MySQL笔记-约束
1 数据库表的约束
1.1 约束种类
约束名 | 关键字 |
---|---|
主键 | primary key |
唯一 | unique |
非空 | not null |
外键 | foreign key |
1.2 主键
-
主键的性质
- 关键字: primary key
- 特点:
- 非空
- 唯一
-
主键的创建
2.1 创建表时添加主键
字段名 字段类型 PRIMARY KEY
2.2 在已有的表中添加主键
ALTER TABLE 表名 ADD PRIMARY KEY(字段名);
- 例:
--创建表t1 create table t1( id int primary key, name varchar(20), age int ); desc t1; -- 插入值(此时id的值不能为null) inset into t1 values(1,'张三',20); --删除主键 alter table t1 drop primary key; --添加主键 alter table t1 add int primary key(id);
2.3 主键自增长
AUTO_INCREMENT 表示自动增长(字段类型必须是整数类型)
- 语法:
-- 创建表时创建 CREATE TABLE 表名( 列名 int primary key AUTO_INCREMENT ) [AUTO_INCREMENT=起始值]; -- 创建好后修改 alter table 表名 AUTO_INCREMENT=起始值;
1.3 唯一约束
表中某一列不能出现重复的值
- 格式:
字段名 字段类型 UNIQUE;
- 注
- null值没有数据,不存在重复的问题
1.4 非空约束
某一列值不能为null
- 格式:
字段名 字段类型 NOT NULL;
1.5 外键约束
- 概念
- 主表:一方,用来约束其他表的表
- 从表/副表:多方,使用主表的数据,被别人约束的表
- 外键: 在从表中与主表主键对应的那一列
- 语法
-
创建
[CONSTRAINT][外键约束名称] foreign key(外键字段名) references 主表名(主键字段名);
-
修改
ALTER TABLE 从表 ADD [CONSTRAINT] [外键约束名称] FOREIGN KEY (外键字段名) REFERENCES 主表(主键字段名);
-
删除
ALTER TABLE 从表 drop foreign key 外键名称;
-
级联操作
在修改和删除主表的主键时,同时更新或删除副表的外键值,称为级联操作
级联操作语法 | 说明 |
---|---|
ON UPDATE CASCADE | 级联更新,只能是创建表的时候创建级联关系。 更新主表中的主键,从表中的外键列也自动同步更新 |
ON DELETE CASCADE | 级联删除 |
- 例:
-- 创建主表 create table department( id int PRIMARY key auto_increment, dep_name VARCHAR(128), dep_location VARCHAR(128) ); insert into department values(null, '研发部','广州'),(null, '销售部', '深圳'); --创建从表并添加外键约束 create table employee( id int primary key auto_increment, name varchar(20), age int, dep_id int, -- 外键对应主表的主键 -- 创建外键约束并添加级联操作 constraint emp_depid_fk foreign key (dep_id) references department(id) on update cascade on delete cascade ); -- 插入数据 INSERT INTO employee (NAME, age, dep_id) VALUES ('张三', 20, 1); INSERT INTO employee (NAME, age, dep_id) VALUES ('李四', 21, 1); INSERT INTO employee (NAME, age, dep_id) VALUES ('王五', 20, 1); INSERT INTO employee (NAME, age, dep_id) VALUES ('老王', 20, 2); INSERT INTO employee (NAME, age, dep_id) VALUES ('大王', 22, 2); INSERT INTO employee (NAME, age, dep_id) VALUES ('小王', 18, 2);
参考网课资料