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

 更新时间:2023年09月04日 14:42:24   作者:honeyR  
真正约束字段的是数据类型,但是数据类型约束很单一,需要有一些额外的约束,更好的保证数据的合法性,从业务逻辑角度保证数据的正确性,本文就来介绍一下数据库之表的唯一、自增等七大约束,感兴趣的可以了解一下

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

1、空属性

有两个取值,null(默认)和not null(此列属性不允许为空,必须做数据插入)。

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

举例使用null:

数据库之表的唯一、自增等七大约束_comment    

使用not null:

数据库之表的唯一、自增等七大约束_zerofill  _02

在tt1中我们将per_age设为not null,我们可以观察到,

第一次插入数据时只给per_age设置了值,成功。

第二次,只给per_name设置了值,失败。

2、默认值-default

如果某一种数据会经常性的出现某个具体的值,可以在一开始就指定好,在需要真实数据的时候,用户可以选择性的使用默认值。

eg,新建表如下(默认值一般与not null配合使用 ):

数据库之表的唯一、自增等七大约束_自增长_03

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

数据库之表的唯一、自增等七大约束_主键_04

所以,默认值的生效:数据在插入的时候不给该字段赋值,就使用默认值

我们看一下时间戳的默认值:

数据库之表的唯一、自增等七大约束_自增长_05

(desc:查看表的结构)

注意,set和enum不允许设默认值。

3、列描述-comment

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

eg,新建表如下:

数据库之表的唯一、自增等七大约束_comment    _06

观察上图,我们用desc是查看不到comment的描述信息的。

我们学一条命令show(查看当前数据库的描述信息),如下:

数据库之表的唯一、自增等七大约束_unique_07

(\G是为了让查看结果格式整齐)

这样,肯定有人以为和注释是一样的,其实不然,comment不等同于注释。

测试如下:

数据库之表的唯一、自增等七大约束_zerofill  _08

(注释用– )

观察到用desc两者都看不到,我们用show试试:

数据库之表的唯一、自增等七大约束_zerofill  _09

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

4、zerofill -自动填充0

如果某一数值列规定了zerofill,则自动把此列变为无符号整数。

若规定了zerofill的数据列,如果数据长度没有达到规定长度,则在数据前自动填充0,

eg: int(5) zerofill 123 –>00123

举例如下:

新建表:

数据库之表的唯一、自增等七大约束_自增长_10

查看表结构:

数据库之表的唯一、自增等七大约束_zerofill  _11

可以看到此列变为无符号整数。

我们插入数据:

数据库之表的唯一、自增等七大约束_comment    _12

因为我们设置了5位,而数据只有3位,因此前两次自动填充为0。

那如果数据大于5位呢?如下:

数据库之表的唯一、自增等七大约束_comment    _13

则没有必要填充。

需要注意的是,zerofill属性只是设置了一种格式化输出而已,数据库内部存储的还是本来的数。

我们可以用hex函数来观察,如下:

数据库之表的唯一、自增等七大约束_unique_14

5、主键约束 - primary key

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

单主键

举例如下:

数据库之表的唯一、自增等七大约束_自增长_15

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

数据库之表的唯一、自增等七大约束_zerofill  _16

插入数据:

数据库之表的唯一、自增等七大约束_comment    _17

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

第二次插入成功。

复合主键

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

举例如下:

数据库之表的唯一、自增等七大约束_unique_18

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

数据库之表的唯一、自增等七大约束_zerofill  _19

插入数据:

数据库之表的唯一、自增等七大约束_自增长_20

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

再插入数据,

数据库之表的唯一、自增等七大约束_自增长_21

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

删除主键

alter table 表名 drop primary key;

我们以上例中tt7为例:

数据库之表的唯一、自增等七大约束_zerofill  _22

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

数据库之表的唯一、自增等七大约束_comment    _23

创建表以后追加主键

alter table 表名 add primary key(字段1);

注意:字段1不能为空,不能重复。

数据库之表的唯一、自增等七大约束_主键_24

6、自增长-auto_increment

auto_increment:当对应的字段,不给值,会自动的被系统触发,系统会从当前字段中已经有的最大值+1操作, 得到一个新的不同的值。

注意:任何一个字段要自增长,前提是本身为索引,(key有值)、自增长必须为整数、一张表有且只能有一个自增长

主键和自增长搭配使用:

id+auto_increment:逻辑主键

举例如下:

数据库之表的唯一、自增等七大约束_comment    _25

查看表结构可以看出来id为自增长。

插入数据:

数据库之表的唯一、自增等七大约束_unique_26

可以看出自增值是从1开始的。

若我们设置了自增数值呢?

如下:

数据库之表的唯一、自增等七大约束_zerofill  _27

证明了系统会从当前字段中已经有的最大值+1操作, 得到一个新的不同的值。

那若我们删掉我们设置的数呢?

数据库之表的唯一、自增等七大约束_unique_28

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

数据库之表的唯一、自增等七大约束_comment    _29

发现是接着之前最大的数的。

**因此,若指定自增数值后,以后的数依次为基础。

若删除指定列后,还是以最大值(已经达到的值)为基础自增。**

7、唯一键-unique

一张表中有往往有很多字段需要唯一性,数据不能重复,但是一张表中只能有一个主键:唯一键就可以解决表中有多个字段需要唯一性约束的问题。

唯一键的本质和主键差不多,唯一键允许为空,但不能重复,一张表可以有多个字段设置唯一,而且可以多个为空,空字段不做唯一性比较,也就是说可以允许多个null值。

证明不能重复,举例如下,id为唯一键:

数据库之表的唯一、自增等七大约束_自增长_30

插入数据:

数据库之表的唯一、自增等七大约束_主键_31

再插入:

数据库之表的唯一、自增等七大约束_zerofill  _32

插入失败。

对于空值,插入:

数据库之表的唯一、自增等七大约束_unique_33

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

数据库之表的唯一、自增等七大约束_主键_34

证明了空字段不做唯一性比较,可以允许多个null值。

到此这篇关于深入理解数据库之表的唯一、自增等七大约束的文章就介绍到这了,更多相关数据库七大约束内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 记一次SQL优化的实战记录

    记一次SQL优化的实战记录

    作为开发人员,我们免不了与sql打交道,有些sql可能在业务的最开始,执行是毫无问题的,但是随着业务量的提升以及业务复杂度的加 深,可能之前的sql就会需要优化了,下面这篇文章主要给大家介绍了关于一次SQL优化的实战记录,需要的朋友可以参考下
    2022-07-07
  • 关于sql注入的简要演示(入坑抛砖)

    关于sql注入的简要演示(入坑抛砖)

    这篇文章主要介绍了关于sql注入的简要演示(入坑抛砖),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-02-02
  • 关于Hive中的NULL空值处理问题

    关于Hive中的NULL空值处理问题

    这篇文章主要介绍了关于Hive中的NULL空值处理问题,Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并提供类SQL查询功能,需要的朋友可以参考下
    2023-07-07
  • 新推出的金融版eXtremeDB 6.0功能改进预览

    新推出的金融版eXtremeDB 6.0功能改进预览

    这篇文章主要介绍了新推出的金融版eXtremeDB 6.0功能改进预览,如运用SQL, Python实现的基于矢量的统计功能、分布式的查询处理、市场数据压缩等内容,需要的朋友可以参考下
    2014-10-10
  • SQL注入的四种防御方法总结

    SQL注入的四种防御方法总结

    SQL Injection是一种常见的Web安全漏洞,主要形成的原因是在数据交互中,下面这篇文章主要给大家介绍了关于SQL注入的四种防御方法,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-07-07
  • navicat导入excel文件的步骤以及可能碰到的问题

    navicat导入excel文件的步骤以及可能碰到的问题

    本文介绍将excel导入到mysql数据库的方法,相对来说比较简单,但也可能会碰到一些小问题,在这里做一个小的总结,这里使用到的工具包括navicat,mysql数据库以及excel,需要的朋友可以参考下
    2024-07-07
  • 一款免费开源的通用数据库工具DBeaver

    一款免费开源的通用数据库工具DBeaver

    这篇文章主要介绍了一款免费开源的通用数据库工具DBeaver,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • pentaho工具将数据库数据导入导出为Excel图文步骤

    pentaho工具将数据库数据导入导出为Excel图文步骤

    本篇博客讲述的是如何使用pentaho工具快速的将数据库数据导出为Excel文件,以及如何将Excel文件数据导入数据库,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪
    2022-03-03
  • 数据库设计经验谈

    数据库设计经验谈

    这篇文章主要介绍了数据库设计经验谈的相关资料,需要的朋友可以参考下
    2007-03-03
  • SQL注入详解(扫盲篇)

    SQL注入详解(扫盲篇)

    刚进公司的时候,研究的主要是SQL注入,因为之前没有搞过安全,所有费了好长一段时间对SQL注入基本知识进行了解。所以这篇文章并不是什么很深入的技术博客,或许应该叫它‘ SQL注入扫盲 ’有需要的朋友可以参考学习,下面来一起看看吧。
    2017-01-01

最新评论