Day03数据库基础之表的约束(not null、unique、primary key、foreign key)

前言

在这里插入图片描述

一、表的约束

1、约束:对表中的数据进行限定,保证数据的完整性、正确性、有效性。
2、分类:
非空约束:not null
主键约束:primary key
唯一约束:unique
外键约束:foreign key

1.非空约束

(1)创建表时添加约束:

create table stu(
	id int,
	name varchar(20) not null -- 添加非空约束
);

(2)创建表完后,添加非空约束:

alter table stu modify name varchar(20) not null;---在Day02中的DDL中有详细说明

(3)删除name的非空约束

alter  table stu modify name varchar(20);

2.唯一约束

(1)创建表时,添加唯一约束(注意:mysql中,唯一约束限定的列的值可以有多个null)

create table stu(
    id int,
    telephone varchar(30) unique
);

(2)创建表后添加唯一约束

alter table stu modify telephone varchar(30) unique;

(3)删除唯一约束

alter table stu drop index telephone;-- 与删除非空约束的方式不一样的 

3.主键约束

1. 含义:非空且唯一
2. 一张表只能有一个字段为主键
3. 主键就是表中记录的唯一标识

(1)创建表时,添加主键约束(主键约束一张表中只有1个,非空且唯一)

create table stu(
    id int primary key,
	name varchar(20)
);

(2)创建表之后添加主键约束

alter table stu modify id int primary key;

(3)删除主键约束

alter table stu drop primary key;

补充:

4.自动增长

如果某一列是数值类型的,使用 auto_increment 可以来完成值得自动增长

(1) 创建表的时候添加自动增长

 create table stu(
	id int primary key auto_increment,
    name varchar(20)
);
  • 添加自动增长之后,添加数据
insert into stu values(1,'aaa'); 
再添加一行数据
insert into stu values(null,'bbb');-- 此时会在上面的添加数据后面自动增加第2行数据

如图:
在这里插入图片描述

  • 再添加一行数据
insert into stu values(10,'ccc');
  • 此时再用添加一行id为null的数据
insert into stu values(null,'ccc');

这个时候的id自动增加为11了~(自动根据上一行增长,上一行为10,现在添加的自动增加为11)
在这里插入图片描述
(2)创建表后,添加自动增长

ALTER TABLE stu MODIFY id INT AUTO_INCREMENT;

(3)删除自动增长

ALTER TABLE stu MODIFY id INT;

5.外键约束

让表与表产生关系,从而保证数据的正确性。

(1)首先我们创建1个员工表emp

CREATE TABLE emp (
id INT PRIMARY KEY AUTO_INCREMENT,
	NAME VARCHAR(30),
	age INT,
	dep_name VARCHAR(30),
	dep_location VARCHAR(30)
);

(2)在emp表中添加一些数据

INSERT INTO emp (NAME, age, dep_name, dep_location) VALUES ('张三', 20, '研发部', '广州');
INSERT INTO emp (NAME, age, dep_name, dep_location) VALUES ('李四', 21, '研发部', '广州');
INSERT INTO emp (NAME, age, dep_name, dep_location) VALUES ('王五', 20, '研发部', '广州');
INSERT INTO emp (NAME, age, dep_name, dep_location) VALUES ('老王', 20, '销售部', '深圳');
INSERT INTO emp (NAME, age, dep_name, dep_location) VALUES ('大王', 22, '销售部', '深圳');
INSERT INTO emp (NAME, age, dep_name, dep_location) VALUES ('小王', 18, '销售部', '深圳');

运行结果:
在这里插入图片描述


这个emp员工表的缺点是有多个同样的“研发部”和“广州”“深圳”等,会造成数据的冗余,因此为了解决这个缺点,用到了知识点“外键”


外键约束语法:

create table 表名(
....
外键列
constraint 外键约束名称 foreign key (外键列名称) references 主表名称(主表列名称)
);

(1)创建2个表,员工表employee和部门表department;并将两个表添加数据

create table department(  -- 部门表
	id int primary key auto_increment,  -- 主表的主键
	dep_name varchar(20),
	dep_location varchar(20)
);
create table employee( -- 员工表
	id int primary key auto_increment,
	name varchar(20),
	age int,
	dep_id int, -- 外键对应主表的主键
	constraint emp_depid_fk foreign key (dep_id) references department(id)  -- 创建外键约束
);
-- 添加 2 个部门
insert into department values(null, '研发部','广州'),(null, '销售部', '深圳');
-- 添加员工,dep_id 表示员工所在的部门
INSERT INTO employee (NAME, age, dep_id) VALUES ('张三', 20, 1);
INSERT INTO employee (NAME, age, dep_id) VALUES ('李四', 21, 1);
INSERT INTO employee (NAME, age, dep_id) VALUES ('王五', 20, 1);
INSERT INTO employee (NAME, age, dep_id) VALUES ('老王', 20, 2);
INSERT INTO employee (NAME, age, dep_id) VALUES ('大王', 22, 2);
INSERT INTO employee (NAME, age, dep_id) VALUES ('小王', 18, 2);

用以下的图来帮助理解:
在这里插入图片描述
主表:就是约束别人的表
从表:就是被别人约束的表

(2) 添加完员工表之后,添加外键

alter table employee add constraint emp_depid_fk
foreign key (dep_id) references department(id);

(3)删除外键

alter table employee drop foreign key emp_depid_fk;--emp_depid_fk为外键约束名
  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值