暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

第33讲:MySQL自增列和外键约束

何先振 2023-11-16
612

以下文章来源于何先振,责编小何


自增列



自增列就是让某个字段的值自增。通过SQL语法:auto_increment实现。


特点和要求:


一个表最多只能有一个自增长列。


当需要产生唯一标识符或顺序值,可设置自增长。


自增长列约束的列必须是键列(主键列,唯一键列)。


自增约束的列的数据类型必须是整数类型。


如果自增列指定了0和null,会在当前最大值的基础上自增。


如果自增列手动指定了具体值,以手动指定的值为准。


举栗子:


创建表时添加





创建后,添加数据不需要指定id值,因为id是自增长。





修改表时添加写法


先创建表,后面修改添加





查询添加成功。





删除自增列


先查询





删除id自增列





再次查询,已经被删除成功。





自增变量的持久化:


MySQL8.0将自增主键的计数器持久化到重做日志中,每次计数器 发生改变,都会将其写入重做日志中。


如果数据库重启,InnoDB会根据重做日志中的信息来初始化计数器的内存值。



外键约束



外键约束,用来限制某个表的某个字段的引用完整性。


比如:员工表得员工所在部门的字段,必须在部门表能找到对应的部门。


通过SQL语法:foreign key 表示。


主表和从表:


主表(父表):被引用的表,被参考的表。


从表(子表):引用别人的表,参考别人的表。


例如:员工表的员工所在部门这个字段的值,要引用部门表。部门表是被引用的就是主表,而员工表就是从表。


特点:


要保证引用数据的唯一性,从表的外键列,必须引用主表上的主键或唯一约束的列。


在创建外键时需要给外键命名,如果不命名系统会默认产生一个外键名。


创建表时要加外键,必须先创建主表才能加。


删除表时,需要先删除从表,再删除主表。


如果主表的记录被从表引用了,主表的记录将不能被删除。如果要删除,需要先删除从表中的依赖数据,然后才可以删除主表的数据。


在从表中指定外键约束,一个表可以建立多个外键约束。


从表的外键与主表被引用的列,列名可以不一样,但是数据类型需要一样。


当创建外键时,系统会默认创建一个普通索引,索引名是列名。


删除外键后,需要手动删除对应的索引。


外键约束,举栗子:


创建表时加外键


先创建主表





再创建从表时增加外键,注意外键必须是主表的主键或者唯一约束,否则添加不成功。





查看添加成功





添加外键后,直接插入主表不存在的数据会报错。





需要先在主表中,添加1001这个dept_id的编号。





才能添加从表





在alter table 时添加外键约束


创建从表时没有加外键





可以通过alter table语句,添加外键





约束等级


之所以主表中的数据被从表关联就不能直接删除,是因为主表和从表有约束等级。


约束等级可以分为:


cascade方式:在主表修改或删除记录时,同步删除和修改掉从表的匹配记录。


set null方式:在主表上修改或删除记录时,将从表上关联的记录列设为null,但是要注意从表的外键列不能为not null。


no action方式:如果从表中有匹配的记录,则不允许对主表对应的关联数据进行删除或修改。


restrict方式:同no action,相同。


set default方式:主表有变更时,从表的外键列可以设置一个默认值。但是有些数据库引擎不支持。


添加外键时,如果没有设置约束等级,默认都是restrict。


约束等级,举栗子:


加外键时可以设置update、delete的约束等级。





删除外键约束


添加外键约束后,除了会创建外键约束还会创建普通索引。





需要先删除外键约束





再删除,普通索引





删除成功





实际开发场景:


在实际开发场景中,两个表之间有关系一对一、一对多,它们之间不需要创建外键约束,而是通过程序中判断。


创建外键约束,你的操作会受到约束限制。不创建约束,你的操作不会受到限制,要保证数据的引用完整性,只能依靠程序员的自觉,在程序中限制和判断。


因为在MySQL中,外键约束是有成本的,需要消耗系统资源。对于高并发的SQL操作,可能会因为加了外键约束,系统变慢。所以一般实际开发中不会加外键。


阿里开发规范中也说明:






推荐阅读书籍

点击上方"何先振"关注并选择设为星标
各类IT技术文章不会错过!

文章转载自何先振,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论