MySQL 约束

查看约束

复制代码
select * from information_schema.table_constraints
where   table_name='要查看的表名'

按约束的作用范围

列级约束: 将此约束声明在对应字段的后面

表级约束:在表中所有字段都声明完,在所有字段的后面声明的约束,可以声明组合约束

约束的作用

  1. not null 非空约束
  2. unique 唯一约束
  3. primary key 主键约束
  4. foreign key 外键约束
  5. check 检查约束
  6. default 默认值约束

添加约束

声明表定义约束

create table 表名 (

id int not null

);

声明表之后,追加、删除约束

alter table 表名

modify 列 类型 约束 --- 追加约束 写上约束便可,若删除约束 不写约束便可

sql server 追加约束

alter table 表名

add constraint 约束名 约束类型 (字段)

alter table 表名

add constraint ch_tel check( 列名 like 0-9 0-90-90-9 )

非空约束

声明表定义约束

create table 表名 (

id int not null

);
声明之后追加约束

alter table 表名

modify 列 类型 not null--- 追加约束 写上约束便可,若删除约束 不写约束便可

删除非空约束

alter table 表名

modify 列 类型 --- 除去 not null 便可

唯一约束 UNIQUE

  1. 同一个表可以有多个唯一约束
  2. 唯一约束可以是某一列的值唯一,也可以多个列组合的值唯一(复合约束)
  3. 唯一约束允许列值为空, 主键约束 是特殊的唯一约束,只是不允许为 null,即 主键约束(primary key)相当于 唯一约束+非空约束组合,主键约束 列 不允许重复,且不能出现 空值 null
  4. 在创建唯一约束的时候,若没有给唯一约束 命名,则默认和列名相同。复合唯一约束,没命名,也取 复合列中的第一个列 做为约束名
  5. Mysql 会给唯一约束的列上默认创建一个唯一索引, SQL server 中 主键约束,会默认创建一个 唯一索引

在create table 添加唯一约束

create table 表名(

sut_NO char(8) UNIQUE, -- 列级约束

sut_ID char(18), -- , 别忘记

constraint 约束名 UNIQUE(sut_ID ) 可以简写 UNIQUE KEY (sut_ID) ---表级约束

);

在create table 添加复合唯一约束

create table 表名(

sut_NO char(8) , -- 列级约束

sut_ID char(18), -- , 别忘记

constraint 约束名 UNIQUE(sut_ID ,sut_NO) 可以简写 UNIQUE KEY (sut_ID,sut_NO) ---表级约束

);

建表后 指定唯一约束

方式1 支持复合约束的

alter table 表名 add unique key(字段列表)

方式2 不支持复合约束

alter table 表名 modify 字段名 unique

删除唯一约束

alter table 表名

DROP INDEX 索引名

查看表的索引

show index from 表名 ;

主键约束 PRIMARY KEY

主键约束: 唯一约束+ 非空约束 非空且唯一

复制代码
create table student (
id int autoincrement,
name   varchar(10),
stu_ID  char(18)  primary key   -- 列级约束----身份证号  


create table student (
id int autoincrement,
name   varchar(10),
stu_ID  char(18) ,
--   MYSQL   主键名总是PRIMARY ,就算命名了主键约束名,也没用
constraint  约束名 primary key(stu_ID)   -- 列级约束----身份证号  
相关推荐
XLYcmy16 分钟前
信息检索报告数字经济赋能城市低碳治理的路径研究——基于“传统数据库 + 生成式人工智能”双轮驱动的检索实践 检索实施与结果分析 Web of Science
数据库·ai·llm·prompt·ssci·deepseek·wos
Decay__21 分钟前
21_MySQL 优化案例集 —— 慢 SQL 优化、索引重构与参数调整收益对比
运维·数据库·sql·mysql·架构
挖掘狂人1 小时前
MySQL 深分页优化:limit 100000, 10 慢在哪,怎么救
后端·sql·mysql
codigger1 小时前
MySQL 深分页优化:limit 100000, 10 慢在哪,怎么救
数据库·sql·mysql·程序员
麦壳饼2 小时前
SonnetDB 5.0 正式发布:增强 SQL 与事务,开放九模型 MCP 读写
数据库·人工智能·sql·sonnetdb
Decay__11 小时前
18_MySQL 智能巡检方案 —— 巡检项清单 / 一键巡检脚本 / 健康评分
运维·数据库·sql·mysql·架构
java_logo11 小时前
Docker 部署 Liquibase:轻松搭建数据库变更管理
数据库·docker·容器·数据库管理·liquibase·轩辕镜像·数据库变更
凤凰院凶涛QAQ12 小时前
《MySQL内核拆解:从SQL到InnoDB》(四) : 联合查询 & 视图
数据库·sql·mysql
码农小河6612 小时前
基于SSM+JSP的高校专业信息管理系统【附源码+数据库】
java·开发语言·数据库
张小姐的猫12 小时前
【MySQL】访问 & 数据流动原理
android·数据库·mysql·adb·1024程序员节