当前位置:   article > 正文

MySQL约束—— CONSTRAINT_mysql constraint

mysql constraint

约束:顾名思义舒服,限制。是作用于表中字段上的规则,用于限制存储在表中的数据

目的:保证数据库中数据的正确性,有效性和完整性

MySQL—约束
约束描述关键字
非空约束限制该字段的数据不能为nullNOT NULL
唯一约束保证该字段的所有数据都是唯一、不重复的(身份证,手机号)UNIQUE
主键约束主键是一行数据的唯一标识,要求非空且唯一PRIMARY KEY
默认约束保存数据时,如果未指定该字段的值,则采用默认值DEFAULT
检查约束保证字段值满足某一个条件或多个条件CHECK
外键约束用来让两张表之间建立连接,保证数据的一致性和完整性FOREIGN KEY

总之:约束是作用于表中的字段上的,可以在创建表或修改表的时候添加约束

示例:创建一个user表,满足以下条件

字段名字段含义字段类型约束条件约束关键字
idID唯一标识int主键,并且自动增长

primary key

auto_increment

name姓名varchar(10)不为空,并且唯一

not null

unique

age年龄int大于0,并且小于等于120check
status状态char(1)如果没有指定该值,默认为1default
gender性别char(1)

1、写创建表格数据的sql语句

  1. create table user(
  2. `id` int primary key AUTO_INCREMENT COMMENT '主键',
  3. `name` VARCHAR(10) not null UNIQUE COMMENT '姓名',
  4. `age` int check(age>0&&age<=120) COMMENT '年龄',
  5. `status` char(1) DEFAULT '1' COMMENT '状态',
  6. `gender` char(1) COMMENT '性别'
  7. )COMMENT '用户表';

2、创建完成 

3、测试插入数据:

3.1、插入数据

INSERT INTO user (name,age,status,gender) values ('Tom1',18,'1','女');

3.2、不设置status,可以发现直接默认是1

  1. #不加status
  2. INSERT INTO user (name,age,gender) values ('Tom2',18,'男');

 3.3、测试年龄,当插入年龄不在范围内直接报错

  1. #测试年龄
  2. INSERT INTO user (name,age,gender) values ('Tom3',-1,'男');
  3. INSERT INTO user (name,age,gender) values ('Tom4',121,'男');

 

外键约束 

1、先创建两张表 

1.1、员工表

  1. create table emp_new(
  2. id int auto_increment comment 'id' primary key ,
  3. name varchar(50) not null comment '姓名',
  4. age int comment '年龄',
  5. job varchar(20) comment '职位',
  6. salary int comment '薪资',
  7. enterdate date comment '入职时间',
  8. managerid int comment '直属领导id',
  9. dept_id int comment '部门id'
  10. )comment '员工表';
  1. insert into emp_new(id, name, age, job, salary, enterdate, managerid, dept_id)
  2. VALUES (1,'金庸',66,'总裁',20000,'2000-01-01',null,5),
  3. (2,'张无忌',20,'项目经理',12500,'2005-12-05',2,1),
  4. (3,'杨逍',33,'开发',8400,'2000-11-03',2,1),
  5. (4,'韦一笑',48,'开发',11000,'2002-02-05',2,1),
  6. (5,'常遇春',43,'开发',10500,'2004-09-07',3,1),
  7. (6,'小昭',19,'程序员鼓励师',6600,'2004-10-12',2,1);

 1.2、部门表

  1. create table dept(
  2. id int auto_increment comment 'ID' primary key ,
  3. name varchar(50) not null comment '部门名称'
  4. )comment '部门表';
insert into dept (id, name) values(1,'研发部'),(2,'市场部'),(3,'财务部'),(4,'销售部'),(5,'总经办');

  

2、语法

添加外键

  1. #添加外键
  2. #方式1:在创建表格的时候直接添加外键
  3. create table 表名(
  4. 字段名 字段类型,
  5. ...
  6. CONSTRAINT 外键名称 FOREIGN KEY(外键字段名) REFERENCES 主表(主表列名)
  7. );
  8. #方式2:表格已经创建好
  9. ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY(外键字段名) REFERENCES 主表(主表列名);

2.1、外键名称叫做fk_emp_dept_id

ALTER TABLE emp_new ADD CONSTRAINT fk_emp_dept_id FOREIGN key(dept_id) REFERENCES dept(id);

执行之后,我们在删除了部门表id的时候员工表就有了关系,就会报错

2.2、解决这张错误:就是在删除主表的时候,子表/从表相关联的信息也会被删除

约束——删除/更新行为
行为说明
NO ACTION当父表中删除更新对于记录时,首先检查该记录是否有对应外键,如果有则不允许删除更新
RESTRICT当父表中删除更新对于记录时,首先检查该记录是否有对应外键,如果有则不允许删除更新(同上)
CASCADE当父表中删除更新对于记录时,首先检查该记录是否有对应外键,如果有则也删除子表的记录
SET NULL当父表中删除更新对于记录时,首先检查该记录是否有对应外键,如果有子表中该外键值为null
SET DEFAULT父表有变更时,子表将外键设为一个默认值(innodb不支持)

2.2.1、测试

 记得先删除一下外键名称

ALTER TABLE emp_new DROP FOREIGN KEY fk_emp_dept_id;
  1. IN UPDATE CASCADE ON DELETE CASCADE;
  2. 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;

2.2.2、测试SET NULL

 记得先删除一下外键名称

ALTER TABLE emp_new DROP FOREIGN KEY fk_emp_dept_id1;
  1. 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;
  2. DELETE from dept where id =1;

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/574849
推荐阅读
相关标签
  

闽ICP备14008679号