当前位置:   article > 正文

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

not null primary key

前言

在这里插入图片描述

一、表的约束

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

1.非空约束

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

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

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

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

(3)删除name的非空约束

alter  table stu modify name varchar(20);
  • 1

2.唯一约束

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

create table stu(
    id int,
    telephone varchar(30) unique
);
  • 1
  • 2
  • 3
  • 4

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

alter table stu modify telephone varchar(30) unique;
  • 1

(3)删除唯一约束

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

3.主键约束

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

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

create table stu(
    id int primary key,
	name varchar(20)
);
  • 1
  • 2
  • 3
  • 4

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

alter table stu modify id int primary key;
  • 1

(3)删除主键约束

alter table stu drop primary key;
  • 1

补充:

4.自动增长

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

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

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

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

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

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

ALTER TABLE stu MODIFY id INT AUTO_INCREMENT;
  • 1

(3)删除自动增长

ALTER TABLE stu MODIFY id INT;
  • 1

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)
);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

(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, '销售部', '深圳');
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

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


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


外键约束语法:

create table 表名(
....
外键列
constraint 外键约束名称 foreign key (外键列名称) references 主表名称(主表列名称)
);
  • 1
  • 2
  • 3
  • 4
  • 5

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

create table department(  -- 部门表
	id int primary key auto_increment,  -- 主表的主键
	dep_name varchar(20),
	dep_location varchar(20)
);
  • 1
  • 2
  • 3
  • 4
  • 5
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)  -- 创建外键约束
);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
-- 添加 2 个部门
insert into department values(null, '研发部','广州'),(null, '销售部', '深圳');
  • 1
  • 2
-- 添加员工,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);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

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

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

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

(3)删除外键

alter table employee drop foreign key emp_depid_fk;--emp_depid_fk为外键约束名
  • 1
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/297139
推荐阅读
相关标签
  

闽ICP备14008679号