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

MySQL中的约束详解

约束是关系型数据库的一个重要的功能

主要作用是保证数据的完整性,也可以理解为数据的正确性(数据本身是否正确,关联关系是否正常)

约束类型

类型说明
NOT NULL⾮空约束指定⾮空约束的列不能存储 NULL 值
DEFALUT 默认约束当没有给列赋值时使⽤的默认值
UNIQUE 唯⼀约束指定唯⼀约束的列每⾏数据必须有唯⼀的值
PRIMARY KEY 主键约束NOT NULL 和 UNIQUE的结合,可以指定⼀个列或多个列,有助于防⽌数据 重复和提⾼数据的查询性能
FOREIGN KEY 外键约束外键约束是⼀种关系约束,⽤于定义两个表之间的关联关系,可以确保数据的完整性和⼀致性
CHECK 约束⽤于限制列或数据在数据库表中的值,确保数据的准确性和可靠性

注意:

  1. UNIQUE 唯⼀约束 的字段NULL可以重复插入

  2. PRIMARY KEY 主键约束 的列即使非空也是唯一的

    如果设置一个字段非空且唯一(id bigint not null unique)在desc查询表结构的时候会显示id的key为PRI在这里插入图片描述

  3. 一个表中不允许有两个主键,但一个主键可以包含多个字段(复合主键)

    在这里插入图片描述

  4. FOREIGN KEY 外键约束 表中某个列的值要建立外键关系,这个值必须是另一张表的主键列,或是唯一约束列并且存在。在这里插入图片描述

    语法:foregin key (字段名) reference 主表(列);

    create table student(id bigint PRIMARY KEY auto_increment, name varchar(20) not null,age int DEFAULT 18,class_id bigint,foreign key (class_id) references class(id) # 创建外键约束
    );
    
  5. 当子表中存在对主表的依赖的时候,不能删除主表中相应的记录,汇报一个主外键关系的错误。如果要删除主表中记录要先删除子表中记录。

  6. CHECK 约束可以应⽤于⼀个或多个列,⽤于限制列中可接受的数据值,从⽽确保数据的完整性和准确性。 在8.0.16开始全⾯⽀持CHECK约束,之前的版本会忽略CHECK的定义

    # 加⼊CHECK约束
    create table student(id bigint PRIMARY KEY auto_increment, # 设置⾃增主键name varchar(20) not null,age int DEFAULT 18,gender char(1),check (age >= 16),check (gender = '男' or gender = '⼥')
    );

自增类型

在这里插入图片描述

可以让数据库来维护主键的增长,在插入的时候先找最大值,然后在这个基础上加1,生成一个新的值,做为一个新数据行的主键的值。

在设置了自增后,也可以指定一个主键值插入,只要不重复即可。

由于主键自增是在最大值的基础上加1,那么主键值在数据表中可能是不连续的。

注意:正常写入数据时,主键自增。如果写入数据的时候,由于某种原因报错了(主外键约束,语法…),也会生成一个主键值,但记录不会成功写入,这个主键值也会被视为已使用。下一次写入数据时,就会发现主键值不连续的现象

总结

  1. NOT NULL 非空约束,被指定 NOT NULL 的列,值不允许为空(必填)
  2. UNIQUE 唯一约束,这个列里的值在表中是唯一的,也就是说不能重复
  3. PRIMARY KEY 主键约束,可以看做是 NOT NULL 和 UNIQUE 的组合,可以用一个 bigint 类型列为表单独指定主键,同时也可以指定主键自增,用 auto_increment 关键字,自增操作时,会找到当前列中最大的值,然后在这个基础上加 1(+1)
  4. DEFAULT 默认约束,如果写入一行记录的时候,指定了默认约束的列,如果在写入数据时没有指定一个确定的值就会用默认值进行填充该字段的值
  5. FOREIGN KEY 外键约束,一张表要与另一张表的主键或唯一键进行关联,说明表与表之间的关联关系
http://www.dtcms.com/a/499296.html

相关文章:

  • 服务流程企业网站东莞市建设安监监督网站
  • leetcode 206. 反转链表 python
  • 【C语言】自定义类型(附源码与图片分析)
  • 用户头像文件存储功能是如何实现的?
  • 网站设计大概在什么价位渠道销售
  • C++竞赛递推算法-斐波那契数列常见题型与例题详解
  • 单元测试-例子
  • 网站顶部素材山西制作网站
  • PHP 高效 JSON 库 JsonMachine
  • 网站建设内部因素百度站长平台有哪些功能
  • Linux内核IPoIB驱动深度解析:在InfiniBand上跑IP网络的高性能之道
  • 275TOPS算力边缘计算盒子的价值洞察与市场定位---视程空间
  • 对话 MoonBit 张宏波:为 AI 重构编程语言
  • QGIS制图专题4:缓冲区分析与服务半径专题图制作
  • IP 资源会枯竭吗?IPv6 能解决代理市场的矛盾吗?
  • 物联网运维中的边缘计算任务调度优化策略
  • TensorFlow2 Python深度学习 - 循环神经网络(LSTM)示例
  • C++第二十三课:猜数字游戏等练习
  • 河南省建设厅网站中州杯企业网站推广怎么做
  • 【数论】最大公因数 (gcd) 与最小公倍数 (lcm)
  • rocky linux MariaDB安装过程
  • git的 Rebase
  • 第8篇 QT联合halcon12在vs2019搭建环境开发图像处理
  • 【小白笔记】最大交换 (Maximum Swap)问题
  • CentOS安装Node.js
  • 深入解析MCP:从基础配置到高级应用指南
  • 佛山网站建设服务wordpress 不能更换主题
  • Process Monitor 学习笔记(5.13):从 0 到 1 的排障剧本清单(可复用模板)
  • Fluent 重叠网格+UDF NACA0012翼型摆动气动仿真
  • 深圳网站建设 设计卓越迈wordpress一键采集文章