MySQL学习笔记------约束

概述

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

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

分类

非空约束:限制改该字段的数据不能为null   关键字:not null

唯一约束:保证该字段的所有数据都是唯一的、不重复的  关键字:unique

主键约束:主键是一行数据的唯一标识,要求非空且唯一  关键字:primary key

默认约束:保存数据时,如果未指定该字段的值,则采用默认值  关键字:default

检查约束:保证字段值满足某一条件    关键字:check

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

 演示

create table employee(
    #唯一标识,主键,自动增长为auto_increment
    id int primary key auto_increment comment 'ID',
    #不为空且唯一
    name varchar(10) not null unique comment '姓名',
    #大于零小于120
    age int check ( age>0&&age<120 )comment '年龄',
    #默认约束
    status char(1) default '1' comment '状态',
    gender varchar(1) comment '性别'
)comment '员工表';
drop table employee;
#插入数据
insert into employee( name, age, status, gender) VALUES('tom',10,'1','男'),
                                                     ('jom',19,'1','男'),
                                                     ('jerry',30,'1','女');

 唯一约束:

insert into employee(name, age, gender) VALUES ('tom',10,'1','男');

检查约束:

insert into employee(name, age, gender) VALUES ('tem',130,'1','男');//年龄超过

外键约束 

用来让两张表的数据之间建立连接,从而保证数据的一致性和完整性

添加外键

#创建表时添加

create table 表名(

      字段名 数据类型,

。。。

      [constrain][外键名称] foreign key(外键字段名)references 主表(主表列名)

);

alter table 表名 add constraint 外键名称 foreign key (外键字段名) references 主表(主表列名);

删除外键:

 alter table emp drop foreign key 外键名;

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,'总经办');
create table employee(
    #唯一标识,主键,自动增长为auto_increment
    id int primary key auto_increment comment 'ID',
    #不为空且唯一
    name varchar(10) not null unique comment '姓名',
    #大于零小于120
    age int check ( age>0&&age<120 )comment '年龄',
    job varchar(20) comment '职务',
    salary int comment '薪资',
    entrydate date comment '入职时间',
    dept_id int comment '部门id'
)comment '员工表';
insert into employee(id,name,age,job,salary,entrydate,dept_id)values (1,'tom',22,'开发',3000,'2018-11-1',1),
                                                                     (2,'jerry',34,'经理',10000,'2011-2-11',5),
                                                                     (3,'xiaoxiao',18,'程序员鼓励师',8000,'2020-1-2',4);
#添加外键
alter table employee add constraint fk_employee_dept_id foreign key (dept_id) references dept(id);
#删除外键
alter table employee drop foreign key fk_employee_dept_id;

此时不能删除dept表中的数据

删除/更新行为

no action 当在父表中删除更新对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除更新(与restrict 一致)

restrict   当在父表中删除更新对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除更新(与no action一致)

cascade 当在父表中删除更新对应记录时,首先检查该记录是否有对应外键,如果有也允许删除更新外键在子表中的记录

set null   当在父表中删除更新对应记录时,首先检查该记录是否有对应外键,如果有则设置子表中该外键值为null(要求该外键允许取null)

set default  父表将外键列设置成一个默认的值(Innodb不支持)

#添加外键并加上删除更新行为
#语法
#alter table 表名 addconstrant 外键名称 foreign key(外键字段) references 主表名(主表字段名) on update cascade on delete cascade;
alter table employee add constraint fk_employee_dept_id foreign key (dept_id) references dept(id) on UPDATE cascade  on delete cascade ;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值