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

MySQL——数据库约束

一、什么是数据库约束?

数据库约束是用于强制数据完整性的规则,包括:主键(唯一标识)、外键(关联其他表)、唯一(禁止重复)、非空(值必填)、检查(符合条件)等,确保数据有效且关系正确。


二、约束类型


三、NOT NULL非空约束 

定义:定义表示,若某些列不允许为空,就可以为列添加非空约束。

 示例:

比如创建⼀个学生表,学生名为NULL时,这条记录是不完整的 :

我们可以通过将name字段设置为非空约束来解决:


四、DEFAULT默认值约束 

定义:DEFAULT 约束⽤于向列中插入默认值,如果没有为列设置值,那么会将默认值设置到该列 

示例:

 重构学生表,新增年龄列:


五、UNIQUE唯一约束

定义:指定了唯一约束的列,该列的值在所有记录中不能重复,比如⼀个人的身份证号,学生的学号等

示例:

 重构学生表,新增学号列:


六、PRIMARY KEY主键约束

 定义:主键约束唯一标识数据库表中的每条记录
            主键必须包含唯一的值,且不能包含 NULL 值。 
            每个表只能有一个主键,可以由单个列多个列组成。
            通常为每张表都指定一个主键,主键列建议使用BIGINT类型

示例:

(一)基础用法

重构学生表,为id列添加非空和唯一约束:

查看表结构,添加非空唯一约束之后key列为PRI(主键):

当id列相同时触发主键冲突:

通常将主键列设置为自增长,让数据库维护主键值:

插入数据时不必设置主键列的值:

查看表结构,Extra列显示auto_increment 表示自增 :

如果数据行写入失败(如语法错误),新生成的主键值作废

主键值可以不连续,且下次自增从主键最大值开始


(二)其它情况

<1>主键或唯一键冲突时的更新操作:

语法:INSERT ... ON DUPLICATE KEY UPDATE column = value [, column = value] ...

(如已有id为100,下次通过这个id产生冲突时,会将id为100的数据行进行跟新)

示例:
 插入ID为100,学号为100100的学生记录时,报主键冲突:

可以使用以上语法,如果插⼊时有冲突则更新当前列的值:


<2>替换,如果存在冲突则替换,不存在冲突则插入

语法:

其实就是将插入语句的insert改为replace

示例:

写入或更新id为101的记录(101记录存在,更新值):

写入或更新id为102的记录(102记录不存在,直接插入):


<3> 一个表中不能有多个主键


<4>复合主键:由多个列共同组成的主键,主键是否冲突以多个列的组成进行判定

重构学生表并设置符合主键:

插入两个相同数据:

修改插入的第二个数据的任意一列即可插入成功:


七、FOREIGN KEY外键约束

 定义:

外键用于定义主表和从表之间的关系

外键约束主定义在从表的列上,主表关联的列必须是主键或唯⼀约束

当定义外键后,要求从表中的外键列数据必须在主表的主键或唯⼀列存在或为null

语法:foreign key 从表字段 references 主表字段

示例:

创建班级表(主表)并初始化数据:

重构学生表(从表),添加外键约束:

查看表结构,Key列的值为MUL表示外键约束的列:

正常插入数据:

再次向student插入一条数据,班级编号为100:

向student中插入一条数据,id为null:

分别删除class表中id为5和2的两条数据:


八、CHECK约束

 定义:可以应用于⼀个或多个列,用于限制列中可接受的数据值,从而确保数据的完整性和准确性。

语法:check(条件)

示例:

重构学生表,要求年龄不小于60,性别只能是男或女:

创建新表,c1的值不能为0,c2的值必须大于0,c3的值不小于c2:

 


http://www.kler.cn/a/552695.html

相关文章:

  • 深度学习04 数据增强、调整学习率
  • Redis哈希槽机制的实现
  • 网络安全推荐的视频教程 网络安全系列
  • Flutter 学习大纲
  • HarmonyOS进程通信及原理
  • 初识Linux(9):程序地址空间
  • 特力康输电线路杆塔倾斜智能监测装置:创新技术如何提升电网安全
  • 使用DeepSeek自动获取视频双语字幕srt文件【工具说明】
  • 就像BGP中的AS_PATH一样,无论路途多远,我愿意陪你一起走——基于华为ENSP的BGP的Community[社团属性]深入浅出
  • 【鸿蒙Next】优秀鸿蒙博客集锦
  • linux中yum是干啥的?
  • Unity3D UGUI性能消耗和管理详解
  • HTML之JavaScript Form表单事件
  • Ubuntu 下 nginx-1.24.0 源码分析 - NGX_MAX_ALLOC_FROM_POOL
  • 基于智能体和RWA的分布式商业生态商业模型架构设计
  • 数字化到“数智化”:AI重构商业世界的底层逻辑
  • 【Prometheus】prometheus结合pushgateway实现脚本运行状态监控
  • PyQt加载UI文件
  • HarmonyOS NEXT 5.0.0.126 最新升级内容详解
  • 浅谈模组-相机鬼像