MYSQL——约束
2019-06-25 本文已影响0人
So_ProbuING
约束
概念
约束是对表中的数据进行限定,从而保证数据的正确性、有效性和完整性
分类
- 主键约束:primary key
- 非空约束:not null
- 唯一约束:unique
- 外键约束:foreign key
非空约束
添加方式
- 在创建表的时候添加约束
CREATE TABLE stu1(
id INT,
name varchar(20) NOT NULL -- 非空约束
);
2.创建表后通过修改表添加非空约束
ALTER TABLE stu1 MODIFY name varchar(20) NOT NULL;
唯一约束
被unique修饰的列的值是不能重复的
创建表
CREATE TABLE stu1(
id INTEGER,
phone_number varchar(20) UNIQUE -- 手机号唯一约束
);
在mysql中 null值不属于重复的值,可以有多个Null
修改表
ALTER TABLE stu1 DROP INDEX phone_number;
主键约束
概念
- 使用主键 primary key 非空且唯一
- 一张表只能有一个字段为主键
- 主键就是表中记录的唯一标识
创建表时,添加主键约束
CREATE TABLE stu1(
id integer PRIMARY KEY, -- 主键约束
name varchar(20)
);
创建完表后,添加主键
ALTER TABLE stu1 MODIFY id INTEGER PRIMARY KEY;
删除主键
ALTER TABLE stu1 DROP PRIMARY KEY;
主键约束——自动增长
基本概念
如果某一列是数值类型的,使用auto_increment 可以来完成值得自动增长
创建
- 创建表时,添加主键约束,并且指定自增长
CREATE TABLE stu1(id INTEGER PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20)
);
自动增长只和上一条记录有关
- 创建表后添加自增长
ALTER TABLE stu1 MODIFY id INTEGER AUTO_INCREMENT;
删除自增长
ALTER TABLE stu1 MODIFY id INTEGER;
主键无法被删除,但是可以删除自增长属性
外键约束
语法
CREATE TABLE 表名(
... 常规列创建
外键列
constraint 外键名称 foreign key (外键列名称) references 主表名称(主表列名称)
);
### 创建表时指定外键
-- 创建部门表
create table department(
id int primary key auto_increment,
dep_name varchar(20),
dep_location varchar(20)
);
-- 创建员工表(id,name,age,dep_id)
-- 多方,从表
create table employee(
id int primary key auto_increment,
name varchar(20),
age int,
dep_id int, -- 外键对应主表的主键
CONSTRAINT emp_dept_id_fk FOREIGN KEY (dep_id) REFERENCES department(id) -- 添加外键约束 外键为部门表的id字段
);
删除外键
ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;
ALTER TABLE employee DROP FOREIGN KEY emp_dept_id_fk;
创建表之后添加外键
ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名称) REFERENCES 主表名称(主表列名称);
ALTER TABLE employee ADD CONSTRAINT emp_dept_id_fk FOREIGN KEY (dep_id) REFERENCES department(id);
外键可以为NULL 但是不可以为不存在的外键值
级联操作
级联操作需要添加外键的时候设置级联操作
设置级联更新
ALTER TABLE employee ADD CONSTRAINT emp_dept_id_fk FOREIGN KEY (dep_id) REFERENCES department(id)
ON UPDATE CASCADE;
设置级联删除
ALTER TABLE employee ADD CONSTRAINT emp_dept_id_fk FOREIGN KEY (dep_id) REFERENCES department(id)
ON UPDATE CASCADE ON DELETE CASCADE;
设置级联删除后,外键关联的数据被删除后,关联被删除的对应值也会跟着删除