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语句

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 '用户表';

2、创建完成 

3、测试插入数据:

3.1、插入数据

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

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

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

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

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

 

外键约束 

1、先创建两张表 

1.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);

 1.2、部门表

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,'总经办');

  

2、语法

添加外键

#添加外键
#方式1:在创建表格的时候直接添加外键
create table 表名(
字段名 字段类型,
...
CONSTRAINT 外键名称 FOREIGN KEY(外键字段名) REFERENCES 主表(主表列名)
);

#方式2:表格已经创建好
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;
#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;

2.2.2、测试SET NULL

 记得先删除一下外键名称

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;

  • 64
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用\[1\]:在MySQL中,可以使用约束来确保表中的数据满足特定的条件。其中,唯一性约束是一种常见的约束类型。唯一性约束可以保证某个列的值在表中是唯一的。在创建表时,可以使用列级约束或表级约束来实现唯一性约束。列级约束是在列定义时指定的,而表级约束是在表定义的末尾指定的。例如,可以使用UNIQUE关键字来创建唯一性约束。引用\[2\]:另外,还可以使用联合约束来实现多个列的唯一性约束。联合约束表示多个字段的组合必须在表中是唯一的。在创建表时,可以使用UNIQUE关键字并指定多个字段来创建联合约束。引用\[3\]:此外,约束还可以命名,以便以后可以通过名称来引用和删除约束。在创建约束时,可以使用CONSTRAINT关键字并指定约束的名称。例如,可以使用UNIQUE关键字和CONSTRAINT关键字来创建具有名称的唯一性约束。在MySQL中,还可以使用NOT NULL约束来确保某个列的值不为空。在创建表时,可以在列定义时指定NOT NULL关键字来创建非空约束。如果插入数据时未提供非空列的值,则会引发错误。 #### 引用[.reference_title] - *1* *2* *3* [MySQL——约束(constraint)详解](https://blog.csdn.net/w_linux/article/details/79655073)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值