how2j.cn


5分42秒
本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器。 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)。 chrome 的 视频下载插件会影响播放,如 IDM 等,请关闭或者切换其他浏览器

步骤 1 : 主键   
步骤 2 : 设置id为自增长   
步骤 3 : 外键   

完整的J2SE桌面项目,从无到有完整的开发流程,涵盖全部52个知识点,154个开发步骤, 一共36个讲解视频,累计时长3小时10分59秒,大小1.94G,充实J2SE项目经验,为简历加上一个有吸引力的砝码
增值内容,点击购买
所有的表都有一个主键id,但是这只是语意上的(我们认为的),为了让数据库把id识别为主键,需要加上主键约束

主键约束自带非空和唯一属性,即不能插入空,也不能重复

分析这一条增加约束的SQL语句:

alter table category add constraint pk_category_id primary key (id);

alter table category 表示修改表category
add constraint 增加约束
pk_category_id 约束名称 pk 是primary key的缩写,category是表名, id表示约束加在id字段上。约束名称是可以自己定义的,你可以写成abc,但是尽量使用好的命名,使得一眼就能够看出来这个约束是什么意思。 能够降低维护成本。
primary key 约束类型是主键约束
(id) 表示约束加在id字段上

以下是对三张表都加上主键约束
alter table category add constraint pk_category_id primary key (id); alter table record add constraint pk_record_id primary key (id); alter table config add constraint pk_config_id primary key (id);
alter table category add constraint pk_category_id primary key (id);
alter table record add constraint pk_record_id primary key (id);
alter table config add constraint pk_config_id primary key (id);
步骤 2 :

设置id为自增长

edit
完整的J2SE桌面项目,从无到有完整的开发流程,涵盖全部52个知识点,154个开发步骤, 一共36个讲解视频,累计时长3小时10分59秒,大小1.94G,充实J2SE项目经验,为简历加上一个有吸引力的砝码
增值内容,点击购买
设置id为自增长是常用的插入数据策略。 换句话说,插入消费分类数据的时候,只用提供分类名称即可,不需要自己提供id, id由数据库自己生成。
不同的数据库采用的自增长方式是不一样的,比如Oracle使用Sequence来实现,而MySQL就使用AUTO_INCREMENT来实现

alter table category change id id int auto_increment;

分析这条SQL语句:
alter table category 表示修改表category
change id 表示修改字段 id
id int auto_increment; 修改后的id是 int类型,并且是auto_increment(修改之前仅仅是int类型,没有auto_increment)

以下SQL语句,分别为不同的表设置自增长
alter table category change id id int auto_increment; alter table record change id id int auto_increment; alter table config change id id int auto_increment;
alter table category change id id int auto_increment;
alter table record change id id int auto_increment;
alter table config change id id int auto_increment;
完整的J2SE桌面项目,从无到有完整的开发流程,涵盖全部52个知识点,154个开发步骤, 一共36个讲解视频,累计时长3小时10分59秒,大小1.94G,充实J2SE项目经验,为简历加上一个有吸引力的砝码
增值内容,点击购买
外键约束的作用是保持数据的一致性
比如增加一条消费记录,金额是500,cid是5。
但是cid=5在分类表category中找不到对应的数据,那么这就破坏了数据的一致性,会带来一系列的后续问题,比如根据分类进行统计,就会找不到这条数据。

增加外键约束之前首先确定record表的外键是cid,指向了category表的id主键。
所以增加外键之前,必须把category的id字段设置为主键。从而保证cid=5的数据在category中只能找到一条,而不是找到多条。

以下是增加外键约束的SQL:

alter table record add constraint fk_record_category foreign key (cid) references category(id)

alter table record 修改表record
add constraint 增加约束
fk_record_category 约束名称fk_record_category,fk是foreign key的缩写,record_category表示是从record表指向category表的约束。 与主键一样,约束名称也是可以自己定义的,比如写成abc. 不过依然建议使用可读性好的命名方式。
foreign key 约束类型,外键
(cid) references category(id) 本表record的字段 cid 指向category表的字段id
alter table record add constraint fk_record_category foreign key (cid) references category(id);
alter table record add constraint fk_record_category foreign key (cid) references category(id);


HOW2J公众号,关注后实时获知最新的教程和优惠活动,谢谢。


问答区域    
2022-04-06 sql执行错误1005
fql




sql执行错误1005
加载中

							

							


1 个答案

how2j
答案时间:2022-05-02
把表删除掉,从前面的步骤再做一遍呢: https://how2j.cn/k/hutubill/hutubill-database-table/714.html



回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到





2020-10-26 约束
hfnsc

我加了外键约束后,再对category表的id设置自增,设置不了?? (使用SQLyog,图形界面编辑) (删除表后重新创建,先设置自增,后设置外键,成功)




1 个答案

how2j
答案时间:2020-10-30
加了外键再加主键不冲突啊,推测一下,是不是没注意把id设置成外键了。。。



回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到




2019-11-02 关于外键约束
2019-07-04 还是navicat设主键方便,请问我们工作上很少用这种sql吧,被navicat这种可视化工具替代程度高吗?
2018-09-15 未知错误1075


提问太多,页面渲染太慢,为了加快渲染速度,本页最多只显示几条提问。还有 3 条以前的提问,请 点击查看

提问之前请登陆
提问已经提交成功,正在审核。 请于 我的提问 处查看提问记录,谢谢
关于 实践项目-一本糊涂账-约束 的提问

尽量提供截图代码异常信息,有助于分析和解决问题。 也可进本站QQ群交流: 578362961
提问尽量提供完整的代码,环境描述,越是有利于问题的重现,您的问题越能更快得到解答。
对教程中代码有疑问,请提供是哪个步骤,哪一行有疑问,这样便于快速定位问题,提高问题得到解答的速度
在已经存在的几千个提问里,有相当大的比例,是因为使用了和站长不同版本的开发环境导致的,比如 jdk, eclpise, idea, mysql,tomcat 等等软件的版本不一致。
请使用和站长一样的版本,可以节约自己大量的学习时间。 站长把教学中用的软件版本整理了,都统一放在了这里, 方便大家下载: https://how2j.cn/k/helloworld/helloworld-version/1718.html

上传截图