我爱MySQL系列——约束

一、什么是约束?

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

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

3、分类:   约束作用于表中字段上,可以在创建表/修改表的时候添加约束

二、编写约束条件

  根据以下约束,完成表结构的创建

字段名字段含义字段类型约束条件
idid唯一标识int主键,并且自动增长
name姓名varcha(10)不为空,并且唯一
age年龄int大于0,并且小于等于120
status状态char(1)如果没有指定改值,默认为1
gender性别char(1)
select table user(
    id  int  primary key auto_increment ,
    name varchar(10) not null unique,
    age int check(age > 0 and age <= 120) ,
    status char(1) default'1' ,  # 因为status是字符串  所以1 这边要加上引号
    gender char(1)
);

insert into user(name,age,status,gender)
    values('tom',19,'1','男'),('tmo2',25,'0','男');
            

三、外键约束

1、什么是外键约束? 外键用来让两张表的数据之间建立连接,从而保证数据的一致性和完整性。

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 '薪资',
    enterdate date comment '入职时间',
    managerid int comment '直属领导id',
    dept_id int comment '部门id'
)comment '员工表';

insert into emp(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、 创建表的时候直接设置   [CONSTRAINT] [外键名称] FOREIGN KEY(外键字段名) REFERENCES 主表(主表列名)
CONSTRAINT fk_emp_dept_id FOREIGN KEY (dept_id) REFERENCES dept(id);


#2、创建完表后 去修改表字段   ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名) REFERENCES 主表(主表列名);
alter  table emp add constraint fk_emp_dept_id foreign key (dept_id) references dept(id);


#3、删除外键  ALTER TABLE 表名 DROP FOREIGN KEY 外键名;

alter table emp drop FOREIGN KEY fk_emp_dept_id ;

2、外键的删除、更新

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

alter  table emp add constraint fk_emp_dept_id foreign key (dept_id) references dept(id) on update cascade on delete cascade;  # 对父表操作后 子表也会变化 假如我们将父表中的id改为6  那么 dept_id 也改为6 ;假如我们将父表中的id为6的删除  那么 dept_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为6的删除  那么 dept_id 中原来为6 的变成<null>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

v_w50

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值