赞
踩
约束:顾名思义舒服,限制。是作用于表中字段上的规则,用于限制存储在表中的数据
目的:保证数据库中数据的正确性,有效性和完整性
约束 | 描述 | 关键字 |
非空约束 | 限制该字段的数据不能为null | NOT NULL |
唯一约束 | 保证该字段的所有数据都是唯一、不重复的(身份证,手机号) | UNIQUE |
主键约束 | 主键是一行数据的唯一标识,要求非空且唯一 | PRIMARY KEY |
默认约束 | 保存数据时,如果未指定该字段的值,则采用默认值 | DEFAULT |
检查约束 | 保证字段值满足某一个条件或多个条件 | CHECK |
外键约束 | 用来让两张表之间建立连接,保证数据的一致性和完整性 | FOREIGN KEY |
总之:约束是作用于表中的字段上的,可以在创建表或修改表的时候添加约束
示例:创建一个user表,满足以下条件
字段名 | 字段含义 | 字段类型 | 约束条件 | 约束关键字 |
id | ID唯一标识 | int | 主键,并且自动增长 | primary key auto_increment |
name | 姓名 | varchar(10) | 不为空,并且唯一 | not null |
age | 年龄 | int | 大于0,并且小于等于120 | check |
status | 状态 | char(1) | 如果没有指定该值,默认为1 | default |
gender | 性别 | char(1) | 无 |
- create table user(
- `id` int primary key AUTO_INCREMENT COMMENT '主键',
- `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 '性别'
- )COMMENT '用户表';
INSERT INTO user (name,age,status,gender) values ('Tom1',18,'1','女');
- #不加status
- INSERT INTO user (name,age,gender) values ('Tom2',18,'男');
- #测试年龄
- INSERT INTO user (name,age,gender) values ('Tom3',-1,'男');
- INSERT INTO user (name,age,gender) values ('Tom4',121,'男');
1、先创建两张表
- create table emp_new(
- id int auto_increment comment 'id' primary key ,
- name varchar(50) not null comment '姓名',
- age int comment '年龄',
- job varchar(20) comment '职位',
- salary int comment '薪资',
- enterdate date comment '入职时间',
- managerid int comment '直属领导id',
- dept_id int comment '部门id'
- )comment '员工表';
- insert into emp_new(id, name, age, job, salary, enterdate, managerid, dept_id)
- VALUES (1,'金庸',66,'总裁',20000,'2000-01-01',null,5),
- (2,'张无忌',20,'项目经理',12500,'2005-12-05',2,1),
- (3,'杨逍',33,'开发',8400,'2000-11-03',2,1),
- (4,'韦一笑',48,'开发',11000,'2002-02-05',2,1),
- (5,'常遇春',43,'开发',10500,'2004-09-07',3,1),
- (6,'小昭',19,'程序员鼓励师',6600,'2004-10-12',2,1);
- create table dept(
- id int auto_increment comment 'ID' primary key ,
- name varchar(50) not null comment '部门名称'
- )comment '部门表';
insert into dept (id, name) values(1,'研发部'),(2,'市场部'),(3,'财务部'),(4,'销售部'),(5,'总经办');
添加外键
- #添加外键
- #方式1:在创建表格的时候直接添加外键
- create table 表名(
- 字段名 字段类型,
- ...
- CONSTRAINT 外键名称 FOREIGN KEY(外键字段名) REFERENCES 主表(主表列名)
- );
-
- #方式2:表格已经创建好
- ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY(外键字段名) REFERENCES 主表(主表列名);
ALTER TABLE emp_new ADD CONSTRAINT fk_emp_dept_id FOREIGN key(dept_id) REFERENCES dept(id);
执行之后,我们在删除了部门表id的时候员工表就有了关系,就会报错
行为 | 说明 |
NO ACTION | 当父表中删除更新对于记录时,首先检查该记录是否有对应外键,如果有则不允许删除更新 |
RESTRICT | 当父表中删除更新对于记录时,首先检查该记录是否有对应外键,如果有则不允许删除更新(同上) |
CASCADE | 当父表中删除更新对于记录时,首先检查该记录是否有对应外键,如果有则也删除子表的记录 |
SET NULL | 当父表中删除更新对于记录时,首先检查该记录是否有对应外键,如果有子表中该外键值为null |
SET DEFAULT | 父表有变更时,子表将外键设为一个默认值(innodb不支持) |
记得先删除一下外键名称
ALTER TABLE emp_new DROP FOREIGN KEY fk_emp_dept_id;
- #IN UPDATE CASCADE ON DELETE CASCADE;
-
- ALTER TABLE emp_new ADD CONSTRAINT fk_emp_dept_id1 FOREIGN KEY(dept_id) REFERENCES dept(id) ON UPDATE CASCADE ON DELETE CASCADE;
DELETE from dept where id =1;
记得先删除一下外键名称
ALTER TABLE emp_new DROP FOREIGN KEY fk_emp_dept_id1;
- ALTER TABLE emp_new ADD CONSTRAINT fk_emp_dept_id1 FOREIGN KEY(dept_id) REFERENCES dept(id) ON UPDATE SET NULL ON DELETE SET NULL;
- DELETE from dept where id =1;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。