当前位置: 首页 > 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.dtcms.com/a/346780.html

相关文章:

  • 自学嵌入式第二十六天:数据结构-哈希表、内核链表
  • 【Day 11】238.除自身以外数组的乘积
  • Trae 编辑器在 Python 环境缺少 Pylance,怎么解决
  • 构建现代高并发服务器:从内核机制到架构实践
  • Spring把「手动」的复杂裹成了「自动」的温柔
  • PostgreSQL15——查询详解
  • 【51单片机】【protues仿真】基于51单片机宠物投食器系统
  • Qt图像裁剪实时显示尺寸实现
  • Qt5 高级功能
  • 当 AI 学会 “理解” 人类:自然语言处理的进化与伦理边界
  • 商品与股指类ETF期权买卖五档Tick分钟级历史行情数据分析
  • 【KO】前端面试三
  • GPT-5:天变了吗?还是风停了?
  • 基于Python的农作物病虫害防治网站 Python+Django+Vue.js
  • MySQL奔溃,InnoDB文件损坏修复记录
  • [2025CVPR-目标检测方向]PointSR:用于无人机视图物体检测的自正则化点监控
  • 尤弥尔传奇能够进行挂机搬砖吗?
  • AI实现超级客户端打印 支持APP 网页 小程序 调用本地客户端打印
  • 爬小红书图片软件:根据搜索关键词,采集笔记图片、正文、评论等
  • Angular初学者入门第三课——工厂函数(精品)
  • 游戏广告投放数据分析项目:拆解投放的“流量密码”
  • kail的浏览器连接不上网
  • 20250823给荣品RD-RK3588开发板刷Rockchip原厂的Buildroot【linux-5.10】时调通AP6275P的WIFI【源码部分】
  • 从 M4S 到 MP4:用 FFmpeg 轻松合并音视频文件
  • 达梦数据库统计信息收集
  • 无人机光伏巡检误检率↓79%!陌讯多模态融合算法在组件缺陷检测的落地优化
  • 【85页PPT】数字化转型LIMS大型企业智能制造之LIMS实验室管理系统产品解决方案(附下载方式)
  • webrtc弱网-SendSideBandwidthEstimation类源码分析与算法原理
  • 使用dism++备份系统时,出现“句柄无效”错误的解决方法
  • 重构实训生态:旅游管理虚拟仿真实训室的标准落地与价值创新