请选择 进入手机版 | 继续访问电脑版

[MySql] MySQL中常见的六个束缚 范例 详解

[复制链接]
查看127 | 回复14 | 2021-9-13 00:01:13 | 显示全部楼层 |阅读模式
目次

前言

在向数据表中插入数据时,有的时间 对于插入的数据是有特殊 要求的,比如门生 成绩不能为空,门生 学号不能重复等等,这个时间 束缚 就派上用场了。

束缚 范例 是通过对表的行或列的数据做出限定 ,来确保表的数据的完备 性、唯一性。这一章我们紧张 先容 六个常见的MySQL束缚 范例 。

1. not null

  1. 保证指定不能存储NULL值,如果插入NULL则插入失败。
复制代码

我们定义两张数据表,分别是student表和student_copy表,student表设定相干 束缚 ,student_copy表作为其对照表,不设置任何束缚 来观察两者的区别。

MySQL中常见的六个束缚
范例
详解

student表中id定义了not null,以是 id这一行的NULL = NO,意思是这一行数据不能为NULL,否则会插入失败。

MySQL中常见的六个束缚
范例
详解

student_copy表中没有举行 任何束缚 ,以是 任何字段的NULL = YES,意味着用户可以随意插入空值而不会报错。

  1. <strong>Q:not null约束下除了显式的指定插入NULL会报错外,隐式的NULL会报错吗?</strong>
复制代码

NULL指定有两种方式,分别是显式和隐式。

显式指的是插入时设定该列为NULL,而隐式指的是插入时对该列没有赋值,而这一列又没有指定默认值,体系 默认的默认值是NULL,全部 这中环境 下也会触发插入控制的错误。

MySQL中常见的六个束缚
范例
详解

MySQL中常见的六个束缚
范例
详解

2. unique

  1. 保证某列的每行必须有唯一的值,也就是说,指定列的每行数据都不能重复。
复制代码

下面两张图分别是对student表和student_copy表的操作,student表的id列设置了unique束缚 ,以是 在插入同样的id = 1时会表现 重复操作。

MySQL中常见的六个束缚
范例
详解

student_copy表中没有举行 任何束缚 ,意味着用户可以随意插入恣意 值而不会报错。

MySQL中常见的六个束缚
范例
详解

  1. <strong>Q:unique约束下插入NULL值会报错吗?</strong>
复制代码

实在 这个题目 在刚才已经操作过了,student表中插入id = NULL,体系 并不会报错。unique只是保证存储的值唯一,它可以是空值,但空值也得唯一,再插入NULL就会报错。

3. default

  1. 规定没有给列赋值时的默认值,换句话说就是,插入数据时没有给指定列的值,那么其值就是defalut指定的默认值。
复制代码

student表指定了name字段设置了default束缚 之后,default这一列就有了名字。当插入数据时,没有指定name这一列,那么name这列就会按照我们设置的默认值 = '未定名 '来添补 。

MySQL中常见的六个束缚
范例
详解

而student_copy表没有设置default束缚 ,以是 当插入数据时,没有指定的列会按照体系 默认的默认值来添补 ,也就是NULL。

MySQL中常见的六个束缚
范例
详解

4. primary key

  1. not null + unique 的结合,保证某列具有唯一标识且不能存储NULL值。
复制代码

前几个束缚 范例 都是可以同时给多个列设置的,但是primary key一张表中只有能束缚 一列,利用 primary key束缚 的列被称为主键

和unique范例 ,插入的数据假如 重复了,那么后一条数据会插入失败,并且插入的数据不能为NULL。

MySQL中常见的六个束缚
范例
详解

一个表中只能由一列时主键,不能同时有多列是主键。计划 表的时间 ,一样寻常 最好设定一个主键,常见的主键都是数字情势 的。

MySQL中常见的六个束缚
范例
详解

自增主键auto_increment

在实际 开发 中,通常 有一系列的策略来保证主键不重复,最常见的方法就是设置自增主键,体系 可以主动 给数据分配,用户也可以同时手动举行 干预,由于 MySQL中内置了自增主键功能,以是 利用 非常简单.

下图中id这一列就变成了自增主键,用户在插入数据时,就可以不必手动干预了.

MySQL中常见的六个束缚
范例
详解

  1. <strong>Q:执行以下操作,猜想该表的查询结果是什么?</strong>
复制代码

已知Id字段设置为自增主键.

MySQL中常见的六个束缚
范例
详解

张三的id = null,由于自增主键按照次序 它的id = 1;李四的id = 1,主键不能重复,李四的id和张三的id重复,以是 插入失败;继续插入李四数据,此时设置id = 4,没有和原有数据重复,以是 插入成功;王五的id = null,按照自增主键接着上一个次序 往下走,以是 它的id = 5;

那么我们来看一下结果 :

MySQL中常见的六个束缚
范例
详解
 

5. foreign key

  1. 外键用于关联其他表的主键,保证一个表中的数据匹配另一个表中的值的参照完整性。
复制代码

  1. foreign key (字段名) references 主表(列)
复制代码

下面我们举个例子来明白 下,我们如今 创建两张表并想把它们关联起来,应该怎样 操作呢?

起首 思考 一下这个对应关系,一个门生 对应一个班级,一个班级对应多个门生 .在门生 表中id为主键,那我们可以设置门生 class_id为外键,去关联比班级表.

创建班级表class,设置classsId为主键

  1. create table class (
  2. id int primary key auto_increment,
  3. name varchar(20)
  4. );
复制代码

创建门生 表student,设置id为主键

  1. create table student (
  2. id int primary key auto_increment,
  3. name varchar(20),
  4. class_id int,
  5. foreign key (class_id) references class(id)
  6. );
复制代码

MUL表示外键束缚 ;

MySQL中常见的六个束缚
范例
详解

  1. <strong>外键的使用规则</strong>
复制代码

门生 表中的插入的班级Id,必须在班级表中存在;

MySQL中常见的六个束缚
范例
详解

班级表是空的,这个时间 插入门生 表数据并给class_id = 1,而班级号在班级表中是空的,以是 插入失败.门生 表指定的这个外键束缚 ,必须是班级表的主键;外键束缚 建立好了以后,此时班级表中的班级id就不能再随意修改或删除;

MySQL中常见的六个束缚
范例
详解

我们无法将班级表中id = 1的记录修改为id = 20,由于 门生 表中的张三依赖 于班级表id = 1如许 的结果 .

  1. <strong>外键的缺点</strong>
复制代码

加入假如我们有下面如许 一个商品-订单关联的两张表

MySQL中常见的六个束缚
范例
详解

此时我们可以利用 订单表中的商品id和商品表中的商品id建立外键束缚 ,但是当订单表中有了一个商品Id为1的记录时,就无法删除商品表中的id = 1的记录了,那么这个数据就会持久的存下去,但是商品不肯定 永世 存在,很有大概 就下架了,这就是外键在关联某些表时的抵牾 地点 .

假如 我们既渴望 拥有外键束缚 的校验功能,同时也渴望 可以办理 当前的抵牾 ,那么我们可以举行 逻辑删除:给商品单独添加一列,标识数据是否有用 ,设定flag = 1表示记录有用 ,flag = 0表示记录无效.必要 删除的商品,可以直接把它的标识改为0,逻辑上标识已经删除了该商品,但实际 上该数据还在表中存储,并不是真正意义上的物理删除.

6. check

  1. 保证列中的值符合指定的条件。
复制代码

总结

到此这篇关于MySQL中常见的六个束缚 范例 的文章就先容 到这了,更多相干 MySQL常见束缚 范例 内容请搜刮 脚本之家从前 的文章或继续欣赏 下面的相干 文章渴望 大家以后多多支持脚本之家!


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

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

x
回复

使用道具 举报

avatar wxf2017 | 2021-9-13 01:51:42 | 显示全部楼层
读了admin楼主的帖子,顿时马桶就通了。。。
回复

使用道具 举报

avatar 小瑞熙 | 2021-9-13 05:12:16 | 显示全部楼层
顶一下,收藏了!
回复

使用道具 举报

avatar 湿湿二 | 2021-9-19 06:48:05 | 显示全部楼层
楼上的说的很多!
回复

使用道具 举报

avatar 清风JA1 | 2021-9-26 18:53:55 | 显示全部楼层
楼上是GG还是MM啊?
回复

使用道具 举报

avatar 忆困血馆闻 | 2021-9-28 06:58:07 | 显示全部楼层
支持楼上的!
回复

使用道具 举报

avatar 八块田确 | 2021-9-29 05:54:11 | 显示全部楼层
回帖也有有水平的!
回复

使用道具 举报

avatar 易网随缘倚 | 2021-9-29 19:36:36 | 显示全部楼层
admin楼主发几张靓照啊!
回复

使用道具 举报

avatar 阿德莱德探路者 | 2021-10-10 21:16:20 | 显示全部楼层
经典!
回复

使用道具 举报

avatar 杨俊语语il | 2021-10-12 05:28:58 | 显示全部楼层
admin楼主,您提前出院了?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则