mysql-约束

本文详细介绍了数据库中的各种约束,包括非空约束、唯一约束、主键约束、默认约束和检查约束,以及外键约束的作用、创建和行为,如自增长、外键关联的cascade和setnull规则。通过实例演示了如何在SQL中应用这些约束以确保数据的正确性和完整性。
摘要由CSDN通过智能技术生成

基础知识:

1.概念:约束是作用于表中字段的规则,用于限制存储在表中的数据


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


3.分类


约束         :             描述                   |             关键字

非空约束: 限制改数据不能为null              | not null

唯一约束:保证改字段所有数据都是唯一、不重复的  | unque

主键约束:主键约束是一行数据的唯一标识,要求非空且唯一 | primary keyy(auto_increment--实现主键的自动增长)

默认约束:保存数据时,如果没有指定改字段的值,则采用默认值   | default

检查约束:保证字段满足某一个条件  | check

外键约束:用来让两张表的数据之间建立连接,保证数据的一致性和完整性  | foreign key

基础约束case:

按照如下限制规则创表:

create  table user(
id int primary key auto_increment comment'主键',
name char(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测试:

我们上面insert并没有添加主键id,而是让他自增长,得到以下数据

unique--不准重复

not null --不能为空

age 被check 严密限制着

合适的年龄范围才insert成功,但是注意这里的主键id是4,虽然我们之前的操作不会添加数据,但是主键id还是处于自增的一个状态,已经到3了,现在能insert了又自增一次,得到4

default如果--如果不给status 传递数据,我们就取默认值 '1'

外键约束


添加外键:


1.创建表的时候添加:
create table 表名(
[constraint][外键名称] foreign key(外键字段名) erferences 主表(主表列名);

);
2. 对已经存在的表添加:
alter table  表名 add constraint 外键名称 foreign key(外键字段名) references 主表(主表列名);


删除外键:


alter table 表名 drop foreign key 外键名称;


-  删除/更新的行为:
no action / restrict   进行外键关联时,不允许进行 删除/更新

cascade   外键关联的父表更改/删除时带子表内容一起

set null 外键关联的父表删除/更新时子表对应内容设置为null

set default 父表有变时子表将外键设置成一个默认值(Innodb不支持) -- 了解即可


alter table emp add constraint fk_emp_dept_id foreign key (dept_id) references  dept(id) on update set null on delete  set null;


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

外键约束case:

先执行以下语句建表: 

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


create  table emp(
id int auto_increment comment 'ID' primary key,
    name varchar(50) not null comment '姓名',
    age int comment '年龄',
    job varchar(20)  comment '职位',
    salary int comment '薪资',
    entrydate date comment '入职日期',
    managerid int comment   ' 直属领导ID',
    dept_id int comment '部门ID'
)comment '员工表';


INSERT INTO emp (id, name, age, job, salary, entrydate, managerid, dept_id)
values
(1,'王富贵',66,'总裁',20000,'2000-01-01',null,5),
(2,'张哥',39,'经理',12000,'2012-03-22',1,1),
(3,'杨哥',22,'开发',8400,'2021-02-23',2,1),
(4,'笑笑',32,'开发',11000,'2020-12-01',2,1),
(5,'啊giao',28,'开发',10500,'2019-5-26',3,1),
(6,'小王',22,'程序员助理',6600,'2023-12-01',2,1);

添加基本外键约束:

alter table emp add constraint fk_emp_dept_id  foreign key (dept_id) references  dept(id);

查看emp属性,出现了外键约束

有外键约束的内容页不允许修改和删除的,因为他默认  no action / restrict  行为关联,不允许删除和更改

删除外键:

alter table emp drop foreign key fk_emp_dept_id;

执行删除后外键名字爆红,说明已经不存在了。

外键常用行为:

cascade 

添加外键:
alter table emp add constraint fk_emp_dept_id foreign key (dept_id) references  dept(id) on update cascade on delete  cascade ;

修改

删除

上面操作可以看出cascade修饰的外键,父表修改/删除时,子表也会进行相应的删除更改。

set null

添加外键
alter table emp add constraint fk_emp_dept_id foreign key (dept_id) references  dept(id) on update set null on delete  set null;

可以看到父表中外键关联内容删除后,子表对应的内容会被修改成null

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值