【MySQL】表的约束

概念

表的约束保证插入的数据是合法的, 符合预期的;
真正约束字段的是数据类型, 但关于单一, 所以需要一些额外的约束, 满足不同的场景;

1. 空属性

  • MySQL 中, 空属性有两个值, null 和 not null;

  • 与 C/C++ 中的空值不同, MySQL 中的空值无法参与运算;

  • 数据库默认字段基本都是可为空, 但实际使用中, 尽可能保证字段不为空;

例:

创建一个可为空的字段和不可为空的字段;
在这里插入图片描述

向其插入数据, 不可为空的字段中是不能插入空值的;
在这里插入图片描述

2. 默认值

  • MySQL 中, 字段的默认值 默认为空值;
  • 当字段不可为空时, 若默认值为空值, 那么需要显示插入数据;

例:

新增字段 num3 , 默认值为 3;
在这里插入图片描述

向表中插入数据时, 不可为空且默认值为空的字段是不能被忽略的;
在这里插入图片描述

3. 列描述

  • comment, 列描述, 没有实际的含义, 专门用来描述字段, 类似注释, 会根据表创建语句保存;

例:

desc 是不显示列描述信息的, 会在表创建的详细信息中显示;
在这里插入图片描述

4. zerofill

  • zerofill 零填充, 若当前值的宽度小于该字段定义时的宽度(包括符号位), 会将自动填充前导零, 使其与定义中指定的显示宽度相匹配, 类似一种格式化输出;

例:

新增字段 num4, 设置 zerofill 约束, 需要注意, 使用 zerofill 会默认添加无符号属性;
而 int(10) 中的 (10) 表示的是前导零填充至的位数, 与类型的存储大小无关;
在这里插入图片描述

将 num4 的前导零长度减少, 方便观察, 然后向表中插入数据;
在这里插入图片描述

5. 主键

  • primary key 主键, 是用来约束唯一数据的;
  • 主键不能重复, 不能为空, 一张表中只能有一个主键, 通常是整数类型;

例:

新增字段 num5, 设置为主键;
在这里插入图片描述

向表中插入数据, 主键的数据是不能重复, 为空的;
在这里插入图片描述

可以指定删除表的主键

ALTER TABLE table_name DROP PRIMARY KEY;

在这里插入图片描述

也可以为已经插入数据的表创建主键, 但只有字值不为空且不重复的字段才能被设置为主键;

ALTER TABLE table_name ADD PRIMARY KEY(column)

在这里插入图片描述

6. 自增长

  • auto_increment 自增长, 设置自增长的字段, 若插入数据时未显示设置, 会被系统自动触发, 将当前字段中已有的最大值, 进行 +1 操作, 设置; 通常和主键配合使用, 作为逻辑主键;
  • 自增长字段类型必须为整型, 并且本身必须为一个索引, 一张表最多只能有一个自增长字段;

例:

修改字段 num5 , 设置主键和自增长属性;
在这里插入图片描述

向表中插入数据, auto_increment 会根据在该字段中记录的最大值进行操作;
在这里插入图片描述

7. 唯一键

  • unique 唯一键, 是多个字段用来约束唯一性的;
  • 和主键不同, 唯一键可以存在多个, 并且允许为空, 但空字段不做唯一性比较, 主键和唯一键不冲突, 相互补充;
  • 每个唯一键字段都不允许出现重复的值 ;

例:

修改 num1, num2, num3, num4 字段, 添加唯一键;
在这里插入图片描述

向表中插入数据, 每个字段新插入的数据都不能与当前字段存在的值重复;
在这里插入图片描述

8. 外键

  • 外键用于定义主表和从表之间的关系;
  • 外键的约束主要定义在从表上, 主表则必须是有主键约束或唯一键约束字段的;
  • 当定义外键后, 要求外键字段的数据必须在主表的字段中存在或为 null;

例:

为 t1 表的 num5 字段插入数据, 并创建 t2 表, 建立从属关系, 设置 num5 为主键字段, num6 为外键字段;
在这里插入图片描述

向 t2 表中插入数据, 只能插入主键字段中存在的值;
在这里插入图片描述

也可以使用语句创建,

ALTER TABLE 从表名 ADD CONSTRAINT 约束名 FOREIGN KEY (外键字段) REFERENCES 主表名(主键字段);

删除外键;

ALTER TABLE 从表名 ADD CONSTRAINT 约束名 FOREIGN KEY (外键字段) REFERENCES 主表名(主键字段) ON DELETE CASCADE;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值