MySQL约束

MySQL约束

  • 约束:作用于表中字段上的规则,用于限制存储在表中的数据
约束类型 关键字 描述
主键约束 PRIMARY KEY 确保表中每一行的值都是唯一的,且不允许为空。每个表只能有一个主键。
唯一约束 UNIQUE 确保列中的值是唯一的,但允许有多个空值(NULL)。
外键约束 FOREIGN KEY 用来让两张表之间的数据建立连接,确保数据的一致性和完整性。
非空约束 NOT NULL 确保列中的值不能为NULL,即必须有值。
默认值约束 DEFAULT 为列指定一个默认值,当插入数据时未明确指定该列的值时,自动使用默认值。
检查约束 CHECK 用于限制列的值必须满足某个条件(MySQL 8.0.16及更高版本支持)。
-- 示例:
create table user(id int primary key auto_increment comment 'ID',
				name varchar(10) not null unique comment '姓名',
				age int check(age>0 && age<=120) comment '年龄',
				status char(1) default '1' comment '状态',
				gender char(1) comment '性别');
  • auto_increment 和主键搭配的关键字,表示自增长自动生成一个唯一数值,确保每行都有一个唯一标识

示例:外键约束

-- 创建部门表
mysql> create table dept( id int primary key auto_increment comment 'ID', name varchar(10) not null comment '部门名称') comment '部门表';  

INSERT INTO dept (name) VALUES
('市场部'),
('研发部'),
('财务部'),
('人力资源部'),
('客服部');

-- 创建员工表
mysql> create table emp(id int primary key auto_increment comment 'ID',  name varchar(10) not null comment '姓名', age int check(age>0 && age<=120) comment
'年龄', job varchar(20) comment '职位', salary int comment '薪资', entrydate date comment '入职时间', manageid int comment '部门领导id', dept_id int comment '部门id') comment '员工表';

INSERT INTO emp (name, age, job, salary, entrydate, manageid, dept_id) VALUES
('张三', 28, '市场专员', 8000, '2022-01-15', 1, 1),
('李四', 32, '市场主管', 12000, '2020-05-20', NULL, 1),
('王五', 25, '研发工程师', 15000, '2021-03-10', 2, 2),
('赵六', 30, '高级研发工程师', 20000, '2019-07-05', NULL, 2),
('孙七', 27, '财务专员', 9000, '2022-06-18', 3, 3),
('周八', 35, '财务经理', 25000, '2018-09-12', NULL, 3),
('吴九', 24, '人事专员', 7500, '2023-02-28', 4, 4),
('郑十', 31, '人事经理', 18000, '2017-11-01', NULL, 4),
('钱伯', 26, '客服代表', 6000, '2024-04-10', 5, 5),
('孔仲', 33, '客服主管', 10000, '2020-08-15', NULL, 5),
('段郎', 29, '市场专员', 8500, '2023-01-20', 1, 1),
('沈姐', 34, '市场主管', 13000, '2019-06-05', NULL, 1),
('韩哥', 23, '研发工程师', 14000, '2022-07-10', 2, 2),
('杨姐', 36, '高级研发工程师', 21000, '2018-04-25', NULL, 2),
('徐叔', 28, '财务专员', 9500, '2021-05-15', 3, 3),
('陈姨', 37, '财务经理', 26000, '2016-10-08', NULL, 3),
('曹哥', 25, '人事专员', 7800, '2023-03-12', 4, 4),
('许姐', 32, '人事经理', 19000, '2017-12-20', NULL, 4),
('何伯', 27, '客服代表', 6500, '2024-05-05', 5, 5),
('吕仲', 35, '客服主管', 11000, '2020-09-30', NULL, 5),
('施郎', 24, '市场专员', 8200, '2022-02-18', 1, 1),
('冯姐', 30, '市场主管', 12500, '2018-03-01', NULL, 1);

-- 创建外键关键两张表
mysql> alter table emp add constraint fk_dept_id foreign key (dept_id) references dept (id);

外键约束的删除/更新行为

约束行为 说明
CASCADE 级联操作:删除/更新父表的行时,子表的对应行也被删除/更新。
SET NULL 置空:删除/更新父表的行时,子表的外键列会被设置为 NULL(需允许 NULL)。
SET DEFAULT 置默认值:删除/更新父表的行时,子表的外键列会被设为默认值(innodb 目前 不支持)。
RESTRICT 限制:如果子表中仍然有引用该行的记录,则不允许删除/更新父表的行(默认行为)。
NO ACTION 无操作:与 RESTRICT 类似,但在某些 SQL 标准的事务中可能有不同的行为。
posted @ 2025-03-14 21:04  逃离这世界~  阅读(30)  评论(0)    收藏  举报