- A+
数据类型是为了节约内存,提高计算, 数据约束是为了完整性(存储关系),下面这篇文章主要给大家介绍了关于MySQL中常见的六个约束类型的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下 前言 在向数据表中插入数据时,有的时候对于插入的数据是有特殊要求的,比如学生成绩不能为空,学生学号不能重复等等,这个时候约束就派上用场了。 约束类型是通过对表的行或列的数据做出限制,来确保表的数据的完整性、唯一性。这一章我们主要介绍六个常见的mysql约束类型。 1. not null
我们定义两张数据表,分别是student表和student_copy表,student表设定相关约束,student_copy表作为其对照表,不设置任何约束来观察两者的区别。 student表中id定义了not null,所以id这一行的null = no,意思是这一行数据不能为null,否则会插入失败。 student_copy表中没有进行任何约束,所以任何字段的null = yes,意味着用户可以随意插入空值而不会报错。
null指定有两种方式,分别是显式和隐式。
2. unique
下面两张图分别是对student表和student_copy表的操作,student表的id列设置了unique约束,所以在插入同样的id = 1时会显示重复操作。 student_copy表中没有进行任何约束,意味着用户可以随意插入任意值而不会报错。
其实这个问题在刚才已经操作过了,student表中插入id = null,系统并不会报错。unique只是保证存储的值唯一,它可以是空值,但空值也得唯一,再插入null就会报错。 3. default
student表指定了name字段设置了default约束之后,default这一列就有了名字。当插入数据时,没有指定name这一列,那么name这列就会按照我们设置的默认值 = '未命名'来填充。 而student_copy表没有设置default约束,所以当插入数据时,没有指定的列会按照系统默认的默认值来填充,也就是null。 4. primary key
前几个约束类型都是可以同时给多个列设置的,但是primary key一张表中只有能约束一列,使用primary key约束的列被称为主键。 一个表中只能由一列时主键,不能同时有多列是主键。设计表的时候,一般最好设定一个主键,常见的主键都是数字形式的。 自增主键auto_increment
已知id字段设置为自增主键. 张三的id = null,由于自增主键按照顺序它的id = 1;李四的id = 1,主键不能重复,李四的id和张三的id重复,所以插入失败;继续插入李四数据,此时设置id = 4,没有和原有数据重复,所以插入成功;王五的id = null,按照自增主键接着上一个顺序往下走,所以它的id = 5; 5. foreign key
foreign key (字段名) references 主表(列)
创建学生表student,设置id为主键
mul表示外键约束;
学生表中的插入的班级id,必须在班级表中存在; 班级表是空的,这个时候插入学生表数据并给class_id = 1,而班级号在班级表中是空的,所以插入失败.学生表指定的这个外键约束,必须是班级表的主键;外键约束建立好了以后,此时班级表中的班级id就不能再随意修改或删除; 我们无法将班级表中id = 1的记录修改为id = 20,因为学生表中的张三依赖于班级表id = 1这样的结果.
加入假如我们有下面这样一个商品-订单关联的两张表 此时我们可以使用订单表中的商品id和商品表中的商品id建立外键约束,但是当订单表中有了一个商品id为1的记录时,就无法删除商品表中的id = 1的记录了,那么这个数据就会持久的存下去,但是商品不一定永久存在,很有可能就下架了,这就是外键在关联某些表时的矛盾所在. 6. check
总结 |
- MySQL
- 完整性
- 完整
- 数据
- 类型
- 六个
- 我的微信公众号
- 扫一扫关注
- 我的新浪微博号
- 扫一扫关注