MySQL数据约束
2017-12-08 本文已影响12人
Mon7ey
什么是数据约束
数据按照特定的规则、限制存入数据库.这种对数据的限制和规则就是数据约束.
约束类型
默认值约束
作用 :当用户没有对某字段插入数据时,使用默认值填充数据.
关键字 :default
注意 : 默认值字段允许为 null , 只有在不插入值时默认值才会起作用
CREATE TABLE student(
id INT,
NAME VARCHAR(20),
address VARCHAR(20) DEFAULT '河南郑州' // default 后为默认值
);
非空约束
作用 : 限制字段必须赋值
关键字 : not null
// 非空表
create table student(
id int,
name varchar(20),
gender varchar(2) not null); -- 非空约束
唯一约束
作用 : 保证字段值只有唯一一个
关键字 : unique
注意 : 1) 位置字段可以插入null ,2) 唯一字段可以插入多个null
create table student(
id int unique, -- 唯一约束
name varchar(20));
// 错误码: 1062
Duplicate entry '1' for key 'id'
主键约束
关键字 : primary key
作用 : 非空 + 唯一
CREATE TABLE student(
id INT PRIMARY KEY, -- 主键
NAME VARCHAR(20),
age INT);
// 错误码: 1062
Duplicate entry '1' for key 'PRIMARY'
// 插入null值 : Field 'id' doesn't have a default value
insert into student(name) values('李四');
联合主键
自增长约束
关键字 : auto_increment
关键字2 : zerofill 零填充
作用 : 自增长字段可以不复制,该字段会自动递增
CREATE TABLE student(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20),
age INT);
// 零填充
CREATE TABLE student(
id INT(4) ZEROFILL PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20),
age INT);
外键约束
关键字 :
CONSTRAINT : 英文含义为"约束".是外键约束的关键字
emloyee_dept_fk : 外键约束的名字,从表明在前,主表名在后
FOREIGN KEY(deptId) : 外键的关键字.规定从表中那个字段是外键字段
REFERENCES dept(id) : reference 是关键字,该关键字后跟的是主表名(参考字段).
作用 :约束两张表的数据
注意 :
- 被约束的表称为副表,约束别人的表称为主表,外键设置在副表上的!!!
- 主表的参考字段通用为主键.
- 添加数据: 先添加主表,再添加副表
- 修改数据: 先修改副表,再修改主表
- 删除数据: 先删除副表,再删除主表
// 主表(部门表)
CREATE TABLE dept(
id INT PRIMARY KEY,
deptName VARCHAR(20));
-- 从表(员工表)
CREATE TABLE employee(
id INT PRIMARY KEY,
empName VARCHAR(20),
deptId INT,
-- 申请一个外键约束
CONSTRAINT emloyee_dept_fk FOREIGN KEY(deptId) REFERENCES dept(id)
);
级联操作
问题: 当有了外键约束的时候,必须先修改或删除副表中的所有关联数据,才能修改或删除主表!但是,我们希望直接修改或删除主表数据,从而影响副表数据。可以使用级联操作实现!!!
级联修改: ON UPDATE CASCADE
级联删除: ON DELETE CASCADE
CREATE TABLE employee(
id INT PRIMARY KEY,
empName VARCHAR(20),
deptId INT,-- 把部门名称改为部门ID
-- 声明一个外键约束
CONSTRAINT emlyee_dept_fk FOREIGN KEY(deptId) REFERENCES dept(id) ON UPDATE CASCADE ON DELETE CASCADE -- ON CASCADE UPDATE :级联修改
-- 外键名称 外键 参考表(参考字段)
)
注意: 级联操作必须在外键基础上使用