MySQL中的约束

概述


演示

案例->

题解->

创建表-->AUTO_INCREMENT是自增

-- --------------------------------约束演示------------------------------------
create table user(
    id int primary key auto_increment comment 'id主键',
    name varchar(10) not null unique comment '姓名',
    age int check ( age > 0 and age <= 120 ) comment '年龄',
    status char(1) default '1' comment '状态',
    gender char(1) comment '性别'
)comment '用户表';

插入数据-->

-- 插入数据
insert into user(name, age, status, gender) values ('Tom1',19,'1','男'),('Tom2',25,'0','男');

结果--->id由数据库自动维护


当姓名设置null时-->

insert into user(name, age, status, gender) values (null,19,'1','男');

结果--->报错


表中先添加一个Tom3->

再次添加Tom3检查是否可重复-->

insert into user(name, age, status, gender) values ('Tom3',19,'1','男');

结果--->报错


添加一个年龄age合法的数据-->

insert into user(name, age, status, gender) values ('Tom4',80,'1','男');

结果--->为什么主键id是5?因为前面再次添加Tom3时虽然报错但它依然向主键申请了+1

添加一个年龄age不合法的数据-->

insert into user(name, age, status, gender) values ('Tom5',-1,'1','男');
insert into user(name, age, status, gender) values ('Tom5',121,'1','男');

结果--->报错


检查状态默认值-->

insert into user(name, age, gender) values ('Tom5',120,'男');

结果--->


外键约束

概念

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

例:

演示:

准备数据-->

-- ---------------外键约束--------------
-- 准备数据
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 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,'张无忌',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);

结果--->


添加外键-->

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

结果--->


删除部门id为1-->

结果--->报错


删除外键-->

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

结果--->


创建外键-->

-- 外键的删除和更新行为
alter table emp add constraint fk_emp_dept_id foreign key (dept_id) references dept(id) on update cascade on delete cascade ;

将研发部id修改为6-->

结果--->

将研发部删除-->

结果--->


创建外键-->

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

将id为1的部门删除-->

结果--->


总结

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值