当前位置: 首页 > article >正文

表的约束

约束就是设定条条框框,保证被约束目标符合约束条件。表的约束就是对表内列数据的约束,保证列数据的正确性。

default

设置列数据的默认值。当用户添加记录的时候没有初始化该列的数据,就是使用默认值初始化。

如果创建表的时候没有设置默认值,会自动将默认值设置为null。

空值

往往数据库中的数据不能为空,空值不能进行数据运算。我们可以在列数据设置空属性来控制数据是否可以为空。

默认空属性为null表示数据可以为空,设置为not null即可让数据不为空。

如果插入数据,name列的数据初始值为null,会报错:name值不可以为空;如果不对name进行赋值,会报错:name没有default值。这两个报错的原因是不同的,前者是因为将值设置为null,后者是因为设置空属性not null就不会自动设置默认值,不赋值就会报错。空值和默认值也可以同时设置,但是这样的场景不多。

comment

列描述,没有实际的含义,就是为了开发人员更方便了解列的内容。

通过desc不能看到注释,只能通过show查看:

zerofill

不知道你有没有注意过数值类型的后面会有一个数,这个数看起来没什么用,其实是因为我们没有使用zerofill这个约束。

数值类型后面的数字表示数据的宽度,如果使用了zerofill当数据的长度小于宽度时,就会用0填充使其宽度符合这个值。举个例子:

设置zerofill约束后,数值类型都是无符号的。

zerofill只是在显示的时候填充0,并没有修改数据,使用原数据查找时还是可以找到的:

主键 primary key

主键可以作为表中所有记录的唯一性标识,每个表都只能有一个主键,主键约束的列的内容每个记录都不能相同不能为空,通常数值类型会作为表的主键。就像生活中的身份证号一样,任何人的身份证号都不相同,是我们社会中身份的唯一标识。

这两种约束方式都可以:

插入主键值相同的记录时就会发生错误:

虽然主键在一个表中只有一个,但是可以将多行同时设为主键,这就是复合主键。就好比我们进高铁站验身份的时候,为了保证本人操作,需要我们刷身份证同时刷脸,这个时候身份证+面部信息就是一个复合主键。

删除之前的主键,其实主键也可以看作表中的一个列:

用id和name添加一个复合主键:

在插入记录时,只有复合主键中的所有值都与已插入的数据相同时,才会报错。复合主键其实就是将每个值都拼接起来整体对比。记录(2, Mike)被认作2-Mike,所以插入(2, Sam)不会报错。

自增长 auto_increment

当对应的字段,不给值,会自动的被系统触发,系统会从当前字段中已经有的最大值 +1操作,得到一个新的不同的值。通常和主键搭配使用,作为逻辑主键。

通俗来讲,就是有一个key值,你可以不用设置它,每次添加新的记录时,这个值都是上一个值+1,下面看一个例子:

我们插入几个记录,但是不指定id的值,第一个id的值就是1:

后续的id值都会在最高的值基础上+1:

如果我们添加一个id为200的记录,后续添加都是在200的基础上+1:

表中有一个auto_increment记录下一个key的值,前面的记录插入到id为203了,那么下一次就是204:

我们也可以在创建表的时候就指定这个自增值的大小,不指定就从1开始:

唯一键 unique

一张表可能不止主键的列的数据是有唯一性的。例如,一个公司的员工,工号是标识员工唯一性的数据,但是员工联系方式也是唯一的,不可能有两个人的手机号是相同的。注意,联系方式也可以作为唯一性标识,但是工号便于管理,没有用联系方式罢了。

唯一键和主键本质差不多,区别就在于唯一键的数据可以为空且不参与数据的比较。主键是用来标识唯一性的,唯一键更多是保证业务上保证数据不重复

唯一键的值为null的时候不作计算,多个记录的值为null不会报错。但是非空的唯一键值相同就会报错。

外键 foreign key

外键用于定义主表和从表之间的关系:外键约束主要定义在从表上,主表则必须是有主键约束或unique 约束。当定义外键后,要求外键列数据必须在主表的主键列存在或为null。

语法:

foreign key (从表列名) references 主表 (列名)

例子:在学生管理系统中,每个学生都有所属的班级,必然会存在两张表,学生表和班级表。学生表中记录学生信息以及学生所在班级,班级表记录班级号以及班级名称等等。

学生表的班级号和班级表的班级号是一一对应的,学生不可能在一个不存在的班级中,那么每次插入学生数据时就需要看一下学生的班级在不在班级表中。这种情况下我们就可以使用外键,将两个表上的列数据关联,班级表是主表,学生表是从表。

创建表,并在班级表插入数据,班级表的外键值必须是主键或者唯一键:

向从表插入学生数据,班级id不在班级表中就会插入失败:


http://www.kler.cn/news/358299.html

相关文章:

  • 将任意图像增强模型与ultralytics中任意模型进行结合 (二)| yolo11与gdip模块、ipam的融合实践
  • 5规则中的命令
  • Dubbo的负载均衡与故障服务规避机制详解
  • [Bert模型微调]
  • TOMCAT Using CATALINA——OPTS,闪退解决方法(两种)
  • oracle ORA-24920:列大小对于客户机过大
  • 【AIGC】智能创作的革新与未来展望
  • PMOS和NMOS管
  • iOS 大数相乘
  • 【Bug】STM32串口空闲中断接收不定长数据异常
  • PyTorch:强大灵活的深度学习框架
  • 多IP访问浏览器
  • Mybatis 直接传入sql执行, 并且传入参数List<Object> params
  • Ubuntu设置静态IP地址
  • C控制语句
  • 车辆电气化集成式 E/E 系统 应对车辆电气化挑战的端到端解决方案
  • 嵌入式开发介绍以及项目示例
  • python如何提取MYSQL数据,并在完成数据处理后保存?
  • 基于springboot+thymeleaf+springsecurity搭建一套web小案例
  • mysql--视图