Mysql——表的约束

1.表的约束

1.1什么是表的约束

真正约束字段的是数据类型,但是数据类型约束很单一,需要有一些额外的约束,更好的保证数据的合法性,从业务逻辑角度保证数据的正确性。比如有一个字段是email,要求是唯一的。约束就是数据库的"保安",防止坏数据进入,保证你的数据整齐、准确、靠谱!让我们未来插入的数据一定是符合规定的;

约束本质是通过技术手段倒逼我们的程序员插入符合数据约束的数据;

1.2空属性约束

两个值:null(默认的)和not null(不为空) ->就是这个字段必须的有数据插入

数据库默认字段基本都是字段为空,但是实际开发时,尽可能保证字段不为空,因为数据为空没办法参与运算。


1.3默认值(default)

默认值:某一种数据会经常性的出现某个具体的值,可以在一开始就指定好,在需要真实数据的时候,用户可以选择性的使用默认值。默认值的生效:数据在插入的时候不给该字段赋值,就使用默认值;


1.3 default和NULL的区别

①default+not null=最常见

②设置了null就不能设置default了吗?

这样是允许的:可以为NULL,不填时默认是'游客'

③default NULL优化


1.4 comment (列描述)

这个数据是给数据库管理员使用的,其实就是注释;


1.5 zerofill(格式化显示)

刚开始学习数据库时,很多人对数字类型后面的长度很迷茫。通过show看看tt3表的建表语句:

首先这个10是mysqld默认给加的,

这次可以看到a的值由原来的2变成0000000002,这就是zerofill属性的作用,如果宽度小于设定的宽度(这里设置的是5),自动填充0。要注意的是,这只是最后显示的结果,在MySQL中实际存储的还是1。但是如果你没有写zerofill的话就没有这样的效果;

数据库内部存储的还是2,0000000001只是设置了zerofill属性后的一种格式化输出而已。

int(4),不够括号内的数字给我们补0,但是超了4位也没事;

但是我们建表的时候为什么默认就是10呢?因为int转为2进制刚好是10位;


1.6主键

①什么是主键

主键:primary key用来唯一的约束该字段里面的数据,不能重复,不能为空,一张表中最多只能有一个主键;主键所在的列通常是整数类型。其实就是为了标识一行数据本身的唯一性;


② 使用primary key进行增删查改找


③ 删掉主键

④建表之后如何增加主键

(最好是建好之后就没多久就插入主键);


⑤ 复合主键

"同一节课一个学生不能选两次"

一个主键可以被添加到一列,也可以是多列,把这样的主键就叫做复合主键;

现在我们让学号和课程编号都为主键,也就是让学号和课程编号这两个信息合起来不重复;

也就是他们两个合起来才是主键;也就是这两个数据合起来不许和历史数据相同;

主键冲突不做插入;

⑥ 建议

主键建议设置成和我们当前业务无关的数据;


1.7自增长(auto_increment)

auto_increment:当对应的字段,不给值,会自动的被系统触发,系统会从当前字段中已经有的

最大值+1操作,得到一个新的不同的值。通常和主键搭配使用,作为逻辑主键。

①自增长的特点:

a,任何一个字段要做自增长,前提是本身是一个索引(key一栏有值)

b.自增长字段必须是整数

c.一张表最多只能有一个自增长


②特殊情况:

如果你没有设置默认从1开始增加,但是你也可以修改,后面我们的把AUTO_ICREMENT修改成了1000,它就会默认从1000开始增加;

③ 查看最后一个id值

1.8唯一键


①唯一键的作用

唯一键的作用是在维护主键的同时维护其他键也由主键的功能,但他并不是主键;就比如我们需要维护一个学生的信息,我们让他的学号充当主键,但是我们还需要让每个学生的电话号码不同,这时就可以让电话号码这一列称为唯一键;

技术上,唯一键和主键的不同就是它可以为NULL,但是其他的特点是一样的;唯一键和主键相互补充;

② 唯一键(unique key)的使用

1.9 外键

我们的外键应该做到可以在要插入class_id的时候,必须要让对对应的班级表里的id是存在的,在要删除班级的id时,也要确定class_id里面已经没有了学生;如何做到呢

这种从表和主表中的关系是由我们程序员在底层实现的,我们现在只用使用;这样的外键保证了表和表之间的正确操作,进行约束;表和表之间有关系才应该被建立;

<----------------------------------------------------------------------------------------------------------------------------->

相关推荐
娇娇yyyyyy2 小时前
QT编程(7): Qt主窗口和菜单栏
数据库·qt·microsoft
Leon-Ning Liu2 小时前
Oracle 19C RAC升级到 26ai RAC
数据库·oracle
人间打气筒(Ada)2 小时前
mysql数据恢复实战
数据库·sql·mysql·xtrabackup·全量备份·增量备份·物理备份
爬山算法2 小时前
MongoDB(36)如何使用聚合进行分组?
数据库·mongodb
Natalia_Portman2 小时前
springboot整合DolphinDB
java·数据库·spring boot·后端·db
云边有个稻草人2 小时前
MySQL迁金仓:高兼容+自动化,国产化迁移低成本落地实战
数据库·mysql·国产数据库·kingbasees·金仓数据库·mysql迁移金仓
MrMua2 小时前
mysql与postgresql对比
数据库·mysql·postgresql
梦游人布拿拿2 小时前
【各数据库中sql复制表结构】
数据库·sql