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

MYSQL-约束

目录

🌿前言:

🌿非空约束(not null)

🧊创建表,并查看表结构

🧊验证

🌿默认约束(default)

🧊创建表,并查看表结构

🧊验证

🍋‍🟩指定age字段的数值

🍋‍🟩不指定age字段,让SQL给它默认值

🌿唯一约束(unique)

🧊创建表,并查看表结构

🧊验证

🧊注意:

🍋‍🟩重复插入两条不指定sno字段的数据行,SQL语法正确!!

🍋‍🟩重复插入两条指定sno字段值为null的数据行,SQL语法报错!!

🌿主键约束(primary  key)

🧊创建表,并查看表结构

🧊以下面的这个表为基准

🧊没加自增(auto_increment)和加了自增(auto_increment)的不同点

🧊替换,如果存在冲突则替换,不存在冲突则插⼊

🍋‍🟩语法:

🧊复合主键:

🍋‍🟩创建带有复合主键的表

🍋‍🟩插入两条相同的数据行,会触发复合主键的约束,从而SQL报错

🌿外键约束(foreign key)

🧊语法:

🧊创建主表和与之相关的外表

🧊主表

🧊外表

🧊删除主表行时,不能先删除已经和外表建立关系得数据行

🌿check约束

🧊注意

🧊创建check约束

🧊正例

🧊反例


🌿前言:

在讲约束之前,先把一个数据库-库和表的操作的相关知识点讲完,

问题:我们在使用数据库的时候,可能突然忘记或者需要检查当前使用的是哪个数据库

查看当前使用的数据库

语法:

select  数据库名();



约束

注意:

每个约束我都创建了一张新表,可能名字跟上一个讲约束的表名相同,但实际上我是先drop掉旧表,create了个新表!!!共有6大约束!!!


🌿非空约束(not null)

🧊创建表,并查看表结构

设置idname这两个字段,只将name字段设为not  null约束的

🧊验证

插入一条namenull的数据,SQL语法报错

如果不指定name的值呢,就是只插入id值,name值让SQL默认

这个就是name不能为空,而我们又没有指定该字段的数值,所以本来不写not null时SQL会默认给它个null值,而我们写了not null,且我们没有指定该字段的数值,所以SQL也不知道该写啥,故而报错

也就是设置了为not null的字段,插入数据行时,必须指该字段的值!!!


🌿默认约束(default)

🧊创建表,并查看表结构

🧊验证

🍋‍🟩指定age字段的数值

🍋‍🟩不指定age字段,让SQL给它默认值


🌿唯一约束(unique)

🧊创建表,并查看表结构

🧊验证

由于unique所修饰的字段,不能出现重复的字段数值,所以SQL报错

🧊注意:

🍋‍🟩重复插入两条不指定sno字段的数据行,SQL语法正确!!

🍋‍🟩重复插入两条指定sno字段值为null的数据行,SQL语法报错!!

总结:

默认的null不报错指定的null等等报错


🌿主键约束(primary  key)

🧊创建表,并查看表结构

注意:not nullunique的先后顺序可以变动,不影响两者构成主键约束(primary  key)

🧊以下面的这个表为基准

🧊没加自增(auto_increment)和加了自增(auto_increment)的不同点

没加的,往主键里写入null,直接报错!!!

加了的,往自增主键里写入null,写入成功,不报错!!!

而且,自增主键不管写没写入null,都不会报错,都从1开始往后自增,且受插入记录的影响!!!

记住:只对null生效,其它的任何值都会受此约束的影响!!!


🧊替换,如果存在冲突则替换,不存在冲突则插⼊

🍋‍🟩语法:

replace into 表名(字段1,字段2~~)  values(数值1,数值2~~);

介绍:只要表里的数据行与要插入的数据行有冲突,就替换原来的数据行,但它不是严格意义上的将冲突的数据行删除,把要插入的数据行放到已经删除行的位置上,而是将冲突的数据行删除,然后把要插入的数据行默认插入最后面

一个表里也不能有2个和2个以上的主键,如果有SQL会报错!!!

🧊复合主键:

🍋‍🟩创建带有复合主键的表

🍋‍🟩插入两条相同的数据行,会触发复合主键的约束,从而SQL报错

想不想同由id和name共同决定!!!


🌿外键约束(foreign key)

🧊语法:

foreign   key   (当前表的字段名q)   references    主表(字段名q

注意:两个表的字段名不要求要相同,且这个只能在本表也就是外表定义,主表上不能定义

🧊创建主表和与之相关的外表

🧊主表

🧊外表

我们可以发现由于主表上没有id为4的数据行,所以当外表插入数据行时,SQL语法会检查主表存不存在这个id值得数据,有,则插入成功没有,则SQL报错

🧊删除主表行时,不能先删除已经和外表建立关系得数据行

这个是id为2的已经与在外表id为2建立了关系,所以不能删除

删除主表行时,可以删除已经和外表没有建立关系得数据行

删除表的话,一般先删除外表再删除主表!!!


🌿check约束

🧊注意

8.0.16开始全⾯⽀持CHECK约束,之前的版本会忽略CHECK的定义

🧊创建check约束

🧊正例

🧊反例


🧊🧊🧊完结!!

http://www.xdnf.cn/news/1353439.html

相关文章:

  • 【数据结构】线性表——链表
  • 微服务的编程测评系统15-头像上传-OSS
  • 高阶数据结构---ST表
  • kafaka知识要点
  • VLOOKUP专题训练
  • UE C++ 堆化
  • windows中bat脚本的一些操作(三)
  • 算法第五十五天:图论part05(第十一章)
  • 图论与最短路学习笔记
  • 【数据结构】跳表的概率模型详解与其 C 代码实现
  • 深度学习开篇
  • `strlen` 字符串长度函数
  • python 字典有序性的实现和OrderedDict
  • 计算机网络 各版本TLS握手的详细过程
  • 电脑零广告快响应提速(一)之卸载搜狗输入法使用RIME—东方仙盟
  • python re模块常用方法
  • MySQL详细介绍指南
  • 蓝牙aoa仓库管理系统功能介绍
  • [e3nn] 归一化 | BatchNorm normalize2mom
  • 【技术突破】动态目标误检率↓83.5%!陌讯多模态融合算法在智慧城管的实战优化
  • 基于电力电子变压器的高压脉冲电源方案复现
  • 使用 Certbot 申请 Apache 证书配置棘手问题
  • 【数据结构】计数排序:有时比快排还快的整数排序法
  • Ubuntu 操作系统深度解析:从入门到精通(2025 最新版)
  • Java JVM 超级详细指南
  • 在Linux环境中为Jupyter Lab安装Node.js环境
  • 云计算之云主机Linux是什么?有何配置?如何选?
  • JavaSpring+mybatis+Lombok,实现java架构[保姆教程]
  • Linux PCI 子系统:工作原理与实现机制深度分析
  • Bartender 5 Mac 多功能菜单栏管理