【Mysql上分之路】第十篇:MySQL约束之主键、默认值...约束

2022虎年

MySQL约束

MySQL使用约束来限制表中的数据,来确保数据库中数据的完整性和唯一性,能够帮助数据库管理员更好地管理数据库

MySQL约束分类

在MySQL中支持以下六种约束:主键约束、外键约束、唯一约束、检查约束、非空约束、默认值约束

在这里插入图片描述

主键约束

主键约束一般称为主键(Primary Key),主键又称主码,是表中一列或多列的组合。主键约束(Primary key constraint)要求主键列的数据唯一,并且不允许为空。主键能够快速地标识表中的一条记录,可以结合外键来定义不同数据表之间的关系,可以加快数据库查询的速度,一般情况下 都会在表中设置一个主键

主键的特点

  • 每个表只能定义一个主键、
  • 主键必须唯一标识表中的每一行,并且不能为NULL,即唯一性原则(表中不可能存在相同主键值的两行数据)
  • 一个字段名只能在联合主键字段表中出现一次
  • 联合主键不能包含不必要的多余字段,当把联合主键的某一字段删除后,如果剩下的联合主键仍然满足唯一性原则,则该联合主键是不正确的,即最小化原则

创建主键

在创建数据表时设置主键约束,可以将主键设置分为单字段主键和多字段联合主键

单字段主键

语法格式

<字段名> <数据类型> PRIMARY KEY [默认值]

通过Primary Key关键字来指定主键

mysql约束单字段主键
联合主键

联合主键就是主键由一张表中多个字段组成的

语法格式

PRIMARY KEY [字段1,字段2,…,字段n]
当指定联合主键时,不能直接在字段后面声明主键约束
mysql约束联合主键

联合主键即为多个字段共同作为主键,多个字段一起才能体现为唯一性原则,单个字段可以有相同的情况

修改主键

主键约束不仅可以在创建表的同时创建,也可以在修改表时添加,但是一旦修改成主键约束之后,该字段值是不允许有空值的

语法格式

ALTER TABLE <数据表名> ADD PRIMARY KEY(<字段名>);
mysql约束修改主键

通常情况下,当在修改表时要设置表中某个字段的主键约束时,要确保设置成主键约束的字段中值不能够有重复的,并且要保证是非空的,即修改主键一样要求表中数据满足主键的条件为唯一并且等于NULL的限制。否则,无法设置主键约束

删除主键

删除主键即可以将表中的主键约束在不需要的情况下进行删除

语法格式

ALTER TABLE <数据表名> DROP PRIMARY KEY;
mysql约束删除主键

主键自增长

当数据库表中的主键设置为自增长后,插入数据时不需要为该主键字段设值,而是由数据库系统根据定义自动赋值,记录没每增加 一条,主键值就会以同样的步长在增长,主键自增长是通过关键词AUTO_INCRENMENT实现的

语法格式

字段名 数据类型 AUTO_INCREMENT

特点

  • 默认情况下,AUTO_INCREMENT 的初始值是 1,每新增一条记录,字段值自动加 1
  • 一个表中只能有一个字段使用 AUTO_INCREMENT 约束,且该字段必须有唯一索引,以避免序号重复(即为主键或主键的一部分)
  • AUTO_INCREMENT 约束的字段必须具备 NOT NULL 属性。
  • AUTO_INCREMENT 约束的字段只能是整数类型(TINYINT、SMALLINT、INT、BIGINT 等)
  • AUTO_INCREMENT 约束字段的最大值受该字段的数据类型约束,如果达到上限,AUTO_INCREMENT 就会失效
mysql约束主键自增长

注意:当字段设置为AUTO_INCREMENT约束时,该字段必须为主键

指定自增初始值

当字段约束不想从默认值开始自增时可以指定自增的初始值,即AUTO_INCREMENT=初始值

mysql约束主键自增指定初始值

外键约束

外键约束是表中的一个特殊字段,经常与主键一块使用,对于具有关联关系的表而言,相关联字段中主键所在的表就是主表,外键所在的表时就是从表即字表

外键用来建立主表与从表的关联关系,为两个表的数据建立连接,约束两个表中数据的一致性和完整性,子表的外键必须关联父表的主键,并且相关字段的数据类型必须匹配

主表删除某条记录时,从表中与之对应的记录也必须有相应的改变。一个表可以有一个或多个外键,外键可以为空值,若不为空值,则每一个外键的值必须等于主表中主键的某个值

主键特点

  • 主表必须已经存在于数据库中,或者是当前正在创建的表。如果是后一种情况,则主表与从表是同一个表,这样的表称为自参照表,这种结构称为自参照完整性
  • 必须为主表定义主键
  • 主键不能包含空值,但允许在外键中出现空值。也就是说,只要外键的每个非空值出现在指定的主键中,这个外键的内容就是正确的
  • 在主表的表名后面指定列名或列名的组合。这个列或列的组合必须是主表的主键或候选键
  • 外键中列的数目必须和主表的主键中列的数目相同
  • 外键中列的数据类型必须和主表主键中对应列的数据类型相同

创建外键约束

创建外键约束是通过关键字FOREIGN KEY来指定外键

语法格式

[CONSTRAINT <外键名>] FOREIGN KEY 字段名 [,字段名2,…]
REFERENCES <主表名> 主键列1 [,主键列2,…]
"外键名":定义的外键约束名称,一个表中不能有相同名字的外键
“字段名”:表示需要添加外键约束的字段列
“主表名”:即被字表外键所依赖的表名
“主键列”:表示主表中定义的主键列名

mysql约束外键约束

West是一张关于NBA西部球队名、球队城市、建队时间以及球队老板信息的表,西部一共有15条记录

SForward是一张关于NBA小前锋位置上的每个球队的球员的个人信息,一个有30条记录

mysql约束外键约束数据表

在两个相关联的表中添加外键约束时,外键所在的表为从表,从表所关联数据必须是主表的主键,并且主键和外键的数据类型必须一致都是varchar类型,所以先对SForward这个表添加主键,然后在West上创建外键约束,外键约束名为foreign_key_TeamName,外键名称为Team,依赖的是表SForward中的主键TeamName

在已经创建好的数据表中添加外键约束的时候,添加外键约束的前提是:从表中外键列中的数据必须与主表中主键列中的数据一致或者是没有数据,即添加外键约束的值必须都来源于主表的主键,并且外键值不能为空,

修改外键约束

语法格式

ALTER TABLE <数据表名> ADD CONSTRAINT <外键名>
FOREIGN KEY(<列名>) REFERENCES <主表名> (<列名>);

删除外键约束

当一个表中不需要外键约束时,就需要从表中将其删除

语法格式

ALTER TABLE <表名> DROP FOREIGN KEY <外键约束名>;

mysql约束删除外键约束

唯一约束

唯一约束(Unique Key)是指所有记录中字段的值不能重复出现,唯一约束与主键约束相似的是它们都可以确保列的唯一性。不同的是,唯一约束在一个表中可有多个,并且设置唯一约束的列允许有空值,但是只能有一个空值。而主键约束在一个表中只能有一个,且不允许有空值

创建唯一约束

唯一约束可以在创建表时直接设置,通常设置在除了主键以外的其它列上

语法格式

<字段名> <数据类型> UNIQUE
mysql约束唯一约束

修改唯一约束

语法格式

ALTER TABLE <数据表名> ADD CONSTRAINT <唯一约束名> UNIQUE(<列名>);
mysql约束修改唯一约束

删除唯一约束

语法格式

ALTER TABLE <表名> DROP INDEX <唯一约束名>;

msyql约束删除唯一约束

检查约束

创建检查约束

检查约束,CHECK是用来检查数据表中字段值有效性的一种手段,通过关键字CHECK来实现

语法格式

CHECK <表达式>
表达式指的是SQL表达式,用于指定需要检查的限定条件

在更新表数据的时候,系统会检查更新后的数据行是否满足 CHECK 约束中的限定条件。MySQL 可以使用简单的表达式来实现 CHECK 约束,也允许使用复杂的表达式作为限定条件,例如在限定条件中加入子查询

注意:若将 CHECK 约束子句置于所有列的定义以及主键约束和外键定义之后,则这种约束也称为基于表的 CHECK 约束。该约束可以同时对表中多个列设置限定条件

mysql约束check

在插入数据时,CHECK会检查数据是否满足表达式要求,若满足则数据是有效的数据

修改检查约束

语法格式

ALTER TABLE tb_emp7 ADD CONSTRAINT <检查约束名> CHECK(<检查约束>)

删除检查约束

语法格式

ALTER TABLE <数据表名> DROP CONSTRAINT <检查约束名>;

默认值约束

默认值(Default)的完整称呼是“默认值约束(Default Constraint)”,用来指定某列的默认值。在表中插入一条新记录时,如果没有为某个字段赋值,系统就会自动为这个字段插入默认值。

创建默认值约束

语法格式

<字段名> <数据类型> DEFAULT <默认值>;
mysql约束默认值约束

修改默认值约束

语法格式

ALTER TABLE <数据表名>
CHANGE COLUMN <字段名> <数据类型> DEFAULT <默认值>;

删除默认值约束

语法格式

ALTER TABLE <数据表名>
CHANGE COLUMN <字段名> <字段名> <数据类型> DEFAULT NULL;

非空约束

指的是字段值不能为空,对于指定非空约束的字段在插入数据时未指定值,数据库系统就会报错

创建非空约束

创建非空约束使用关键字NOT NULL来实现

语法格式

<字段名> <数据类型> NOT NULL;
mysql约束非空约束

修改非空约束

语法格式

ALTER TABLE <数据表名>
CHANGE COLUMN <字段名>
<字段名> <数据类型> NOT NULL;

删除非空约束

语法格式

ALTER TABLE <数据表名>
CHANGE COLUMN <字段名> <字段名> <数据类型> NULL;

查看表中的约束

查看表中的约束可以使用SHOW CREATE TABLE 表名\G或\g

mysql约束查看约束

总结

MySQL使用约束来限制表中的数据,来确保数据库中数据的完整性和唯一性,能够帮助数据库管理员更好地管理数据库;在MySQL中支持以下六种约束:主键约束、外键约束、唯一约束、检查约束、非空约束、默认值约束

赶紧学习起来吧!我是一个正在努力找回自我的人,希望能和一起学习的人成长,有错误的地方请各位大佬帮忙指正,如果觉得有帮助就点个赞当作对我的一个小肯定❤👍,peace&love

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值