数据库-MySQL-基础(8)-约束

举报
莫浅子 发表于 2022/10/04 21:16:40 2022/10/04
【摘要】 ​概述 1、概念:约束是作用于表中字段上的规则,用于限制存储表中的数据2、目的:保证数据库中数据的正确、有效性和完整性3、分类:4、注意: 约束是作用表中字段上的,可以在创建表 / 修改表时候添加约束 约束演示案例:根据需求完成表结构的创建代码create table user( id int primary key auto_increment, name varchar(10...


概述 

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

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

3、分类:

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



约束演示

案例:根据需求完成表结构的创建

代码

create table user(
    id int primary key auto_increment,
    name varchar(10) not null  unique ,
    age int check ( age>0 && age<= 120 ),
    status char(1) default 1,
    gender char(1)
)comment '用户表';



外键约束

概念

外键用来让俩张表的数据之间建立联系,从而保证数据的一致性和完整性。

创建表代码

--准备数据
create table dept(
    id int auto_increment primary key ,
    name varchar(10) not null
)comment '部门表';
insert into dept (id, name) values (1,'研发部'),(2,'市场部'),(3,'财务部'),(4,'销售部'),(5,'总经办');

create table  emp(
   id int auto_increment primary key ,
     name varchar(10) not null ,
     age int,
     job varchar(10),
     salary int ,
     entrydate datetime,
     managerid int comment '直属领导',
     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,'张无忌',20,'项目经理',12500,'2005-12-05',1,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 表名(

字段名 数据类型,

 ...

[CONSTRAINT] [外键名称] FOREIGN KEY(外键字段名)REFERENCES 主表(主表列名)

);

ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY(外键字段名) REFERENCES 主表(主表列名);

 代码案例(接上面的例子)

--添加外键
alter table emp add constraint fk_emp_dept_id foreign key (dept_id) references dept(id);

--删除外键
alter table emp drop foreign key  fk_emp_dept_id;

当你添加外键了以后如果删除一个表,比如上面案例中出现的1号部门,那么程序就会报错,提示你有外键存在



删除/更新行为


ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY(外键字段) REFERENCES 主表名(主表字段名) ON UPDATE CASCADE ON DELETE CASCADE;

 案例

使用cascade 

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

如果删除上面dept部门1表之后,emp表会变成这样

 

使用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 ;

如果删除上面dept部门1表之后,emp表会变成这样


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。