• 设为首页
  • 收藏本站
  • 积分充值
  • VIP赞助
  • 手机版
  • 微博
  • 微信
    微信公众号 添加方式:
    1:搜索微信号(888888
    2:扫描左侧二维码
  • 快捷导航
    福建二哥 门户 查看主题

    深入理解数据库之表的唯一、自增等七大约束

    发布者: 皮3591 | 发布时间: 2025-6-20 09:13| 查看数: 165| 评论数: 0|帖子模式

    真正约束字段的是数据类型,但是数据类型约束很单一,需要有一些额外的约束,更好的保证数据的合法性,从业务逻辑角度保证数据的正确性。今天我们一起使用一下主要的几个约束,null/not null,default, comment, zerofill,primary key,auto_increment,unique。

    1、空属性

    有两个取值,null(默认)和not null(此列属性不允许为空,必须做数据插入)。
    数据库默认字段基本都是字段为空,但是实际开发时,尽可能保证字段不为空,因为数据为空没办法参与运算。
    举例使用null:

    使用not null:

    在tt1中我们将per_age设为not null,我们可以观察到,
    第一次插入数据时只给per_age设置了值,成功。
    第二次,只给per_name设置了值,失败。

    2、默认值-default

    如果某一种数据会经常性的出现某个具体的值,可以在一开始就指定好,在需要真实数据的时候,用户可以选择性的使用默认值。
    eg,新建表如下(默认值一般与not null配合使用 ):

    插入如下数据,观察结果:

    所以,默认值的生效:数据在插入的时候不给该字段赋值,就使用默认值
    我们看一下时间戳的默认值:

    (desc:查看表的结构)
    注意,set和enum不允许设默认值。

    3、列描述-comment

    comment,没有实际含义,专门用来描述字段,会根据表创建语句保存,用来给程序员或DBA来进行了解。
    eg,新建表如下:

    观察上图,我们用desc是查看不到comment的描述信息的。
    我们学一条命令show(查看当前数据库的描述信息),如下:

    (\G是为了让查看结果格式整齐)
    这样,肯定有人以为和注释是一样的,其实不然,comment不等同于注释。
    测试如下:

    (注释用– )
    观察到用desc两者都看不到,我们用show试试:

    可以看到注释是看不出来的。

    4、zerofill -自动填充0

    如果某一数值列规定了zerofill,则自动把此列变为无符号整数。
    若规定了zerofill的数据列,如果数据长度没有达到规定长度,则在数据前自动填充0,
    eg: int(5) zerofill 123 –>00123
    举例如下:
    新建表:

    查看表结构:

    可以看到此列变为无符号整数。
    我们插入数据:

    因为我们设置了5位,而数据只有3位,因此前两次自动填充为0。
    那如果数据大于5位呢?如下:

    则没有必要填充。
    需要注意的是,zerofill属性只是设置了一种格式化输出而已,数据库内部存储的还是本来的数。
    我们可以用hex函数来观察,如下:


    5、主键约束 - primary key

    主键用于唯一约束字段数据,使用主键约束的字段,不能为空,不能重复。主键所在的列为整数类型,一张表有且只有一个主键。主键有单主键和复合主键之分。

    单主键

    举例如下:

    查看表结构,id的key值为PRI,id为主键

    插入数据:

    如上图,第一次插入id相同,插入失败,证明主键不能重复。
    第二次插入成功。

    复合主键

    多个属性组合起来不能重复 eg:1-101
    举例如下:

    id-sushe为复合主键,如下,id和sushe的key值都为PRI.

    插入数据:

    成功,插入了1-101即2-101两组数据。
    再插入数据,

    因为2-101重复,插入失败。

    删除主键

    alter table 表名 drop primary key;
    我们以上例中tt7为例:

    删除后我们插入重复的数就可以了:


    创建表以后追加主键

    alter table 表名 add primary key(字段1);
    注意:字段1不能为空,不能重复。


    6、自增长-auto_increment

    auto_increment:当对应的字段,不给值,会自动的被系统触发,系统会从当前字段中已经有的最大值+1操作, 得到一个新的不同的值。
    注意:任何一个字段要自增长,前提是本身为索引,(key有值)、自增长必须为整数、一张表有且只能有一个自增长
    主键和自增长搭配使用:
    id+auto_increment:逻辑主键
    举例如下:

    查看表结构可以看出来id为自增长。
    插入数据:

    可以看出自增值是从1开始的。
    若我们设置了自增数值呢?
    如下:

    证明了系统会从当前字段中已经有的最大值+1操作, 得到一个新的不同的值。
    那若我们删掉我们设置的数呢?

    现在只剩下1和2了,我们插入数据:

    发现是接着之前最大的数的。
    **因此,若指定自增数值后,以后的数依次为基础。
    若删除指定列后,还是以最大值(已经达到的值)为基础自增。**

    7、唯一键-unique

    一张表中有往往有很多字段需要唯一性,数据不能重复,但是一张表中只能有一个主键:唯一键就可以解决表中有多个字段需要唯一性约束的问题。
    唯一键的本质和主键差不多,唯一键允许为空,但不能重复,一张表可以有多个字段设置唯一,而且可以多个为空,空字段不做唯一性比较,也就是说可以允许多个null值。
    证明不能重复,举例如下,id为唯一键:

    插入数据:

    再插入:

    插入失败。
    对于空值,插入:

    再次插入id为空值的数据:

    证明了空字段不做唯一性比较,可以允许多个null值。
    到此这篇关于深入理解数据库之表的唯一、自增等七大约束的文章就介绍到这了,更多相关数据库七大约束内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    来源:https://www.jb51.net/database/29721612f.htm
    免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?立即注册

    ×

    最新评论

    QQ Archiver 手机版 小黑屋 福建二哥 ( 闽ICP备2022004717号|闽公网安备35052402000345号 )

    Powered by Discuz! X3.5 © 2001-2023

    快速回复 返回顶部 返回列表