课程笔记Day27

  • 约束
  • 多表关系

第一章 约束

第01节 基础理论

1、约束概述

什么是约束呢?约束有什么作用呢?

生活当中的约束:法律的约束、道德的约束前面学习过的约束:XML当中 DTD约束、Schema约束约束:可以保证数据的完整性、正确性。例如:1、身份证号码,不能重复。我们会使用到 不能重复的约束,就是 唯一约束2、姓名,不能为null。我们会使用到 不能为空的约束,就是 非空约束3、表和表之间建立的关系,可以使用到 主键和外键等约束
2、约束分类
(1) 非空约束:建表时添加、建表后添加、删除操作
(2) 唯一约束:建表时添加、建表后添加、删除操作
(3) 主键约束:建表时添加、建表后添加、删除操作
(4) 外键约束:建表时添加、建表后添加、删除操作

第02节 非空约束

1、建表时添加非空约束

语法格式

-- 语法格式
CREATE TABLE 表名称(列名1  数据类型1,列名2  数据类型2  NOT NULL,列名3  数据类型3
);-- 举例说明
CREATE TABLE IF NOT EXISTS BiaoOne(uid INT,uname VARCHAR(20) NOT NULL,uage INT
);

案例代码

-- 1. 创建表的时候,添加非空约束
CREATE TABLE IF NOT EXISTS BiaoOne(uid INT,uname VARCHAR(20) NOT NULL,uage INT
);-- 2. 添加数据
INSERT INTO BiaoOne VALUES (1,'张三',23);
INSERT INTO BiaoOne VALUES (2,NULL,24);
INSERT INTO BiaoOne VALUES (3,'王五',25);-- 3. 查询表
SELECT * FROM BiaoOne;-- 4. 查询非空约束SQL语句,查询表结构
DESC BiaoOne;
2、建表后添加非空约束

语法格式

-- 语法格式
ALTER TABLE 表名称 MODIFY 列名 数据类型 NOT NULL;-- 举例说明
ALTER TABLE BiaoOne MODIFY uage INT NOT NULL;

案例代码

-- 1. 查看表结构
DESC BiaoOne;-- 2. 给uage这一列添加非空约束
ALTER TABLE BiaoOne MODIFY uage INT NOT NULL;-- 3. 查询表
SELECT * FROM BiaoOne;-- 4. 插入数据
INSERT INTO BiaoOne VALUES (4,'赵六',NULL);/*注意事项:如果我们采用的是建表之后,再去添加非空约束 NOT NULL需要注意,如果之前存在 NULL 值,则添加非空约束会出错。
*/
3、删除非空约束

语法格式

-- 语法格式
ALTER TABLE 表名称 MODIFY 列名 数据类型;-- 举例说明
ALTER TABLE BiaoOne MODIFY uage INT;

案例代码

-- 1. 创建表的时候,添加非空约束。
CREATE TABLE IF NOT EXISTS BiaoOne(id INT,uname VARCHAR(20) NOT NULL
);
-- 2. 查看表信息,查看非空约束的情况
DESC BiaoOne;
-- 3. 删除非空约束
ALTER TABLE BiaoOne MODIFY uname VARCHAR(20);
-- 4. 插入数据,插入非空的值 和 为空的值
INSERT INTO BiaoOne VALUES (1,'张三'),(2,NULL);
-- 5. 添加非空约束
ALTER TABLE BiaoOne MODIFY uname VARCHAR(20) NOT NULL;
-- 6. 修改值,修改为为不为空的情况
UPDATE BiaoOne SET uname='李四' WHERE id=2;
-- 7. 查询表
SELECT * FROM BiaoOne;
-- 8. 删除非空约束
ALTER TABLE BiaoOne MODIFY uname VARCHAR(20);

第03节 唯一约束

1、建表时添加唯一约束

语法格式

-- 语法格式
CREATE TABLE IF NOT EXISTS 表名称(列名1  数据类型1,列名2  数据类型2  UNIQUE,列名3  数据类型3
);-- 举例说明
CREATE TABLE IF NOT EXISTS BiaoTwo(id INT,uname VARCHAR(20) UNIQUE,uage INT
);

案例代码

-- 1. 删除表,如果存在则删除
DROP TABLE IF EXISTS BiaoTwo;-- 2. 创建数据表的时候,添加唯一约束
CREATE TABLE IF NOT EXISTS BiaoTwo(id INT,uname VARCHAR(20) UNIQUE,uage INT
);-- 3. 查看表结构,查询表
DESC BiaoTwo;
SELECT * FROM BiaoTwo;-- 4. 添加数据
INSERT INTO BiaoTwo VALUES (1,'张三',23);
INSERT INTO BiaoTwo VALUES (2,'李四',24);
INSERT INTO BiaoTwo VALUES (3,'王五',25);
INSERT INTO BiaoTwo VALUES (4,'张三',26);
INSERT INTO BiaoTwo VALUES (5,NULL,27);
INSERT INTO BiaoTwo VALUES (6,NULL,28);/*注意事项:如果我们采用创建表的形式,添加唯一约束的话。为 null 的值,可以添加N个,不会被唯一约束限定。
*/
2、建表后添加唯一约束

语法格式

-- 语法格式
ALTER TABLE 表名称 MODIFY 列名 数据类型 UNIQUE;-- 举例说明
ALTER TABLE BiaoTwo MODIFY uage INT UNIQUE;

案例代码

-- 1. 删除表,如果存在则删除
DROP TABLE IF EXISTS BiaoTwo;
-- 2. 创建数据表的时候
CREATE TABLE IF NOT EXISTS BiaoTwo(id INT,uname VARCHAR(20),uage INT
);
-- 3. 查看表结构,查询表
DESC BiaoTwo;
SELECT * FROM BiaoTwo;
-- 4. 添加唯一约束
ALTER TABLE BiaoTwo MODIFY uage INT UNIQUE;
-- 5. 添加数据
INSERT INTO BiaoTwo VALUES (1,'张三',23);
INSERT INTO BiaoTwo VALUES (2,'李四',24);
INSERT INTO BiaoTwo VALUES (3,'王五',25);
INSERT INTO BiaoTwo VALUES (4,'赵六',25);
INSERT INTO BiaoTwo VALUES (5,'前妻',NULL);
INSERT INTO BiaoTwo VALUES (6,'王八',NULL);/**注意事项1: 如果建表后,添加唯一约束,NULL值,无视限定,仍然可以添加NULL重复注意事项2:如果建表后,表当中列存在重复值,给这列添加唯一约束,会报错。注意事项3:如果建表后,表当中的列存在重复的 NULL值,这列添加唯一约束,不会报错。
**/
3、删除唯一约束

语法格式

-- 语法格式
ALTER TABLE 表名称 DROP INDEX 列名;-- 举例说明
ALTER TABLE BiaoTwo DROP INDEX uname;

案例代码

-- 1. 删除表,如果存在则删除
DROP TABLE IF EXISTS BiaoTwo;
-- 2. 创建数据表的时候,添加唯一约束
CREATE TABLE IF NOT EXISTS BiaoTwo(id INT,uname VARCHAR(20) UNIQUE,uage INT
);
-- 3. 查看表结构,查看表信息
DESC BiaoTwo;
SELECT * FROM BiaoTwo;
-- 4. 删除唯一约束
ALTER TABLE BiaoTwo DROP INDEX uname;
-- 5. 添加唯一约束
ALTER TABLE BiaoTwo MODIFY uname VARCHAR(20) UNIQUE;
-- 6. 插入数据
INSERT INTO BiaoTwo VALUES (1,'张三',23);
INSERT INTO BiaoTwo VALUES (2,'李四',24);
INSERT INTO BiaoTwo VALUES (3,'王五',25);
INSERT INTO BiaoTwo VALUES (4,'张三',26);
INSERT INTO BiaoTwo VALUES (5,NULL,27);
INSERT INTO BiaoTwo VALUES (6,NULL,28);
-- 7. 删除记录
DELETE FROM BiaoTwo WHERE id=4;

第04节 主键约束

1、建表时添加主键约束

语法格式(非自增形式的主键)

-- 语法格式
CREATE TABLE IF 表名称(列名1 数据类型1 PRIMARY KEY,列名2 数据类型2,列名3 数据类型3
);-- 举例说明CREATE TABLE IF NOT EXISTS BiaoThree(id INT PRIMARY KEY,uname VARCHAR(20)
);

主键的特点:

1、非空且唯一 主键所在的列,要求不能为 NULL 值,而且不能出现重复的数据。

2、一张表当中,只能存在一个主键。

3、我们可以通过主键,去确定这一行的信息。

案例代码

-- 1. 删除表
DROP TABLE IF EXISTS BiaoThree;
-- 2. 创建表
CREATE TABLE IF NOT EXISTS BiaoThree(id INT PRIMARY KEY,uname VARCHAR(20)
);
-- 3. 查看表 看结构、看内容
DESC BiaoThree;
SELECT * FROM BiaoThree;
-- 4. 插入数据
INSERT INTO BiaoThree VALUES (1,'孙佳佳');
INSERT INTO BiaoThree VALUES (2,'彭俊杰');
INSERT INTO BiaoThree VALUES (2,'定浩');
INSERT INTO BiaoThree VALUES (NULL,'腚耗');
INSERT INTO BiaoThree VALUES (NULL,'郭龙');/*主键的特点: 1. 非空且唯一2. 不能存在两个主键在同一个表当中
*/

语法格式(自增形式的主键)

-- 语法格式
CREATE TABLE IF 表名称(列名1 数据类型1 PRIMARY KEY AUTO_INCREMENT,列名2 数据类型2,列名3 数据类型3
);-- 举例说明CREATE TABLE IF NOT EXISTS BiaoFour(id INT PRIMARY KEY AUTO_INCREMENT,uname VARCHAR(20)
);

设置自增之后,注意事项:

1、如果添加主键为 NULL 值,默认从1开始

2、如果这条记录删除,下次添加会跳过删除这行记录。(之前 id为2的删除,下次添加 id为3)

3、如果跳过某些顺序添加,则看上一行 id值。(直接添加 id为10,下次添加为NULL,则 id为11)

4、如果跳过某些顺序添加,则看上一行 id值。(直接添加 id为10,下次添加为 2,则id为2,放在id为1的后面)

案例代码

-- 1. 删除表
DROP TABLE IF EXISTS BiaoFour;
-- 2. 创建表
CREATE TABLE IF NOT EXISTS BiaoFour(id INT PRIMARY KEY AUTO_INCREMENT,uname VARCHAR(20)
);-- 3. 查看表 看结构、看内容
DESC BiaoFour;
SELECT * FROM BiaoFour;-- 4. 插入数据
INSERT INTO BiaoFour VALUES (1,'孙佳佳');
INSERT INTO BiaoFour VALUES (2,'彭俊杰');
INSERT INTO BiaoFour VALUES (NULL,'定浩');
INSERT INTO BiaoFour VALUES (NULL,'腚耗');
INSERT INTO BiaoFour VALUES (NULL,'郭龙');
INSERT INTO BiaoFour VALUES (10,'黄杰');
-- 5. 删除表记录
DELETE FROM BiaoFour WHERE id = 4;
2、建表后添加主键约束

语法格式(自增形式的主键)

-- 语法格式
ALTER TABLE 表名称 MODIFY 列名 数据类型 PRIMARY KEY AUTO_INCREMENT;-- 举例说明
ALTER TABLE BiaoFour MODIFY id INT PRIMARY KEY AUTO_INCREMENT;

案例代码

-- 1. 删除表
DROP TABLE IF EXISTS BiaoFour;
-- 2. 创建表
CREATE TABLE IF NOT EXISTS BiaoFour(id INT,uname VARCHAR(20)
);-- 3. 查看表 看结构、看内容
DESC BiaoFour;
SELECT * FROM BiaoFour;-- 4. 添加主键约束
ALTER TABLE BiaoFour MODIFY id INT PRIMARY KEY AUTO_INCREMENT;-- 5. 插入数据
INSERT INTO BiaoFour VALUES (1,'孙佳佳');
INSERT INTO BiaoFour VALUES (2,'彭俊杰');
INSERT INTO BiaoFour VALUES (NULL,'定浩');
INSERT INTO BiaoFour VALUES (NULL,'腚耗');
INSERT INTO BiaoFour VALUES (NULL,'郭龙');
INSERT INTO BiaoFour VALUES (10,'黄杰');
INSERT INTO BiaoFour VALUES (10,'佑威');
-- 6. 删除表记录
DELETE FROM BiaoFour WHERE id = 4;/*注意事项1: 如果我们已经添加了NULL值,再去添加主键约束,不会报错,自动改变为主键的值注意事项2: 如果我们已经添加了重复的非NULL值,再去添加主键约束,会报错。
*/
3、删除主键约束

语法格式(自增形式的主键)

-- 语法格式 (先删除自动增长,再删除主键约束)
ALTER TABLE 表名称 MODIFY 列名 数据类型;
ALTER TABLE 表名称 DROP PRIMARY KEY;-- 举例说明 删除主键约束(在删除主键约束之前,先要删除自动增长)
ALTER TABLE BiaoFour MODIFY id INT;
ALTER TABLE BiaoFour DROP PRIMARY KEY;

案例代码

-- 1. 删除表
DROP TABLE IF EXISTS BiaoFour;
-- 2. 创建表
CREATE TABLE IF NOT EXISTS BiaoFour(id INT PRIMARY KEY AUTO_INCREMENT,uname VARCHAR(20)
);
-- 3. 查看表,看表结构,看表数据
DESC BiaoFour;
SELECT * FROM BiaoFour;-- 4. 删除主键约束(在删除主键约束之前,先要删除自动增长)
ALTER TABLE BiaoFour MODIFY id INT;
ALTER TABLE BiaoFour DROP PRIMARY KEY;-- 5. 插入数据
INSERT INTO BiaoFour VALUES (1,'孙佳佳');
INSERT INTO BiaoFour VALUES (2,'彭俊杰');
INSERT INTO BiaoFour VALUES (NULL,'定浩');
INSERT INTO BiaoFour VALUES (NULL,'腚耗');
INSERT INTO BiaoFour VALUES (NULL,'郭龙');
INSERT INTO BiaoFour VALUES (10,'黄杰');
INSERT INTO BiaoFour VALUES (10,'佑威');

第05节 外键约束

1、为什么需要使用外键

案例代码

/*为什么会存在外键约束呢?主要是为了保证数据的合法性。说白一点,就是说,一张表的数据,对另外的表数据有影响。做增删改操作的过程当中,影响的数据的正确性。
*/
DROP TABLE IF EXISTS bumen;
CREATE TABLE IF NOT EXISTS bumen(bumen_id  INT,bumen_name VARCHAR(20)
);
INSERT INTO bumen VALUES (1,'财务部'),(2,'生产部'),(3,'销售部');
SELECT * FROM bumen;DROP TABLE IF EXISTS yuangong;
CREATE TABLE IF NOT EXISTS yuangong(yuangong_id INT,yuangong_name VARCHAR(20),yuangong_bumen_id  INT
);
INSERT INTO yuangong VALUES (1,'定浩',1);
INSERT INTO yuangong VALUES (2,'腚耗',2);
INSERT INTO yuangong VALUES (3,'郭龙',3);
INSERT INTO yuangong VALUES (4,'黄杰',2);
INSERT INTO yuangong VALUES (5,'佑威',4);
SELECT * FROM yuangong;

外键约束应该具备有什么特点?

1、用于建立两张表之间的关联关系。

2、副表的外键,需要关联 主表的主键,或者是主表的唯一索引列。

3、如果建立了主外键关系的表,做 增删改的时候,就需要注意完整性正确性。

2、建表时添加外键约束

语法格式(外键需要关联主键)

-- 语法格式
CONSTRAINT 外键自定义的名称 FOREIGN KEY (外键列的名称) REFERENCES 主表的名称(主表的主键列名称)
FOREIGN KEY (外键列的名称) REFERENCES 主表的名称(主表的主键列名称) -- 举例说明
CONSTRAINT 'yuangong_ibfk_1' FOREIGN KEY (yuangong_bumen_id) REFERENCES bumen(bumen_id)
FOREIGN KEY (yuangong_bumen_id) REFERENCES bumen(bumen_id)

案例代码

-- 1. 创建部门表
DROP TABLE IF EXISTS bumen;
CREATE TABLE IF NOT EXISTS bumen(bumen_id  INT PRIMARY KEY AUTO_INCREMENT,   -- 部门表主键IDbumen_name VARCHAR(20)
);
INSERT INTO bumen VALUES (1,'财务部'),(2,'生产部'),(3,'销售部');
SELECT * FROM bumen;
DESC bumen;-- 2. 创建员工表
DROP TABLE IF EXISTS yuangong;
CREATE TABLE IF NOT EXISTS yuangong(yuangong_id INT,yuangong_name VARCHAR(20),yuangong_bumen_id  INT,FOREIGN KEY (yuangong_bumen_id) REFERENCES bumen(bumen_id)
);
INSERT INTO yuangong VALUES (1,'定浩',1);
INSERT INTO yuangong VALUES (2,'腚耗',2);
INSERT INTO yuangong VALUES (3,'郭龙',3);
INSERT INTO yuangong VALUES (4,'黄杰',2);
INSERT INTO yuangong VALUES (5,'佑威',4);   -- 这条记录,添加失败,因为外键关系
SELECT * FROM yuangong;
DESC yuangong;
3、建表后添加外键约束

语法格式(外键需要关联主键)

-- 语法格式
ALTER TABLE 副表的名称 ADD FOREIGN KEY (副表的外键列名称) REFERENCES 主表的名称(主表的主键列名);-- 举例说明
ALTER TABLE yuangong ADD FOREIGN KEY (yuangong_bumen_id) REFERENCES bumen(bumen_id);

案例代码

-- 1. 创建部门表
DROP TABLE IF EXISTS bumen;
CREATE TABLE IF NOT EXISTS bumen(bumen_id  INT PRIMARY KEY AUTO_INCREMENT,   -- 部门表主键IDbumen_name VARCHAR(20)
);
INSERT INTO bumen VALUES (1,'财务部'),(2,'生产部'),(3,'销售部');
SELECT * FROM bumen;
DESC bumen;-- 2. 创建员工表
DROP TABLE IF EXISTS yuangong;
CREATE TABLE IF NOT EXISTS yuangong(yuangong_id INT,yuangong_name VARCHAR(20),yuangong_bumen_id  INT
);
-- 3. 添加外键约束
ALTER TABLE yuangong ADD FOREIGN KEY (yuangong_bumen_id) REFERENCES bumen(bumen_id);INSERT INTO yuangong VALUES (1,'定浩',1);
INSERT INTO yuangong VALUES (2,'腚耗',2);
INSERT INTO yuangong VALUES (3,'郭龙',3);
INSERT INTO yuangong VALUES (4,'黄杰',2);
INSERT INTO yuangong VALUES (5,'佑威',4);
SELECT * FROM yuangong;
DESC yuangong;
4、删除外键约束

语法格式(外键需要关联主键)

-- 查询外键的名称
SELECT  CONSTRAINT_NAME FROM information_schema.key_column_usage t
WHERE t.constraint_schema = '数据库的名称' AND TABLE_NAME = '数据表的名称';-- 语法格式
ALTER TABLE 副表名称 DROP FOREIGN KEY 外键的名字;-- 举例说明
ALTER TABLE yuangong DROP FOREIGN KEY yuangong_ibfk_1;

案例代码

-- 1. 创建部门表
DROP TABLE IF EXISTS bumen;
CREATE TABLE IF NOT EXISTS bumen(bumen_id  INT PRIMARY KEY AUTO_INCREMENT,   -- 部门表主键IDbumen_name VARCHAR(20)
);
INSERT INTO bumen VALUES (1,'财务部'),(2,'生产部'),(3,'销售部');
SELECT * FROM bumen;
DESC bumen;-- 2. 创建员工表
DROP TABLE IF EXISTS yuangong;
CREATE TABLE IF NOT EXISTS yuangong(yuangong_id INT,yuangong_name VARCHAR(20),yuangong_bumen_id  INT
);
-- 3. 添加外键约束
ALTER TABLE yuangong ADD FOREIGN KEY (yuangong_bumen_id) REFERENCES bumen(bumen_id);-- 补充:查看当前表的外键名称
SELECT  CONSTRAINT_NAME FROM information_schema.key_column_usage t
WHERE t.constraint_schema = 'mydb06' AND TABLE_NAME = 'yuangong';-- 4. 删除外键约束
ALTER TABLE yuangong DROP FOREIGN KEY yuangong_ibfk_1;INSERT INTO yuangong VALUES (1,'定浩',1);
INSERT INTO yuangong VALUES (2,'腚耗',2);
INSERT INTO yuangong VALUES (3,'郭龙',3);
INSERT INTO yuangong VALUES (4,'黄杰',2);
INSERT INTO yuangong VALUES (5,'佑威',4);
SELECT * FROM yuangong;
DESC yuangong;
5、级联更新和级联删除

语法格式

-- 语法格式
ON UPDATE CASCADE     -- 级联更新
ON DELETE CASCADE     -- 级联删除-- 举例说明
ALTER TABLE emp ADD FOREIGN KEY (emp_dept_id) REFERENCES dept(dept_id) ON UPDATE CASCADE;
ALTER TABLE emp ADD FOREIGN KEY (emp_dept_id) REFERENCES dept(dept_id) ON DELETE CASCADE;
ALTER TABLE emp ADD FOREIGN KEY (emp_dept_id) REFERENCES dept(dept_id) ON DELETE CASCADE ON UPDATE CASCADE;

特征:

我们如果添加了级联的操作(级联更新或者级联删除) 直接操作主表的时候,副表也会跟着变化。

这种操作,我们一般不建议使用,不推荐使用 级联的操作。(因为太危险了,很容易丢失数据)

案例代码

-- 1. 创建部门表
DROP TABLE IF EXISTS bumen;
CREATE TABLE IF NOT EXISTS bumen(bumen_id  INT PRIMARY KEY AUTO_INCREMENT,   -- 部门表主键IDbumen_name VARCHAR(20)
);
INSERT INTO bumen VALUES (1,'财务部'),(2,'生产部'),(3,'销售部');
SELECT * FROM bumen;
DESC bumen;-- 2. 创建员工表
DROP TABLE IF EXISTS yuangong;
CREATE TABLE IF NOT EXISTS yuangong(yuangong_id INT,yuangong_name VARCHAR(20),yuangong_bumen_id  INT
);
-- 3. 添加外键约束
ALTER TABLE yuangong ADD FOREIGN KEY (yuangong_bumen_id) REFERENCES bumen(bumen_id);
ALTER TABLE yuangong ADD FOREIGN KEY (yuangong_bumen_id) REFERENCES bumen(bumen_id) ON UPDATE CASCADE;
-- 补充:查看当前表的外键名称
SELECT  CONSTRAINT_NAME FROM information_schema.key_column_usage t
WHERE t.constraint_schema = 'mydb06' AND TABLE_NAME = 'yuangong';
-- 4. 删除外键约束
ALTER TABLE yuangong DROP FOREIGN KEY yuangong_ibfk_1;INSERT INTO yuangong VALUES (1,'定浩',1);
INSERT INTO yuangong VALUES (2,'腚耗',2);
INSERT INTO yuangong VALUES (3,'郭龙',3);
INSERT INTO yuangong VALUES (4,'黄杰',2);
INSERT INTO yuangong VALUES (5,'佑威',4);
SELECT * FROM yuangong;
DESC yuangong;-- 需求:想要把部门的id进行修改,销售部的id由3变成5,怎么办呢?
UPDATE bumen SET bumen_id = 5 WHERE bumen_name = '销售部';

第二章 多表关系

第01节 基础理论

1、理论概述

什么是多表关系呢?

多表关系 指的是 多张表之间存在的数据联系。MySQL 称之为 "关系型数据库" 指的是 数据之间会存在 关联关系的。
例如: 主键和外键关联当中,提到的两个表 "部门表" 和  "员工表" 他们就存在关联关系
2、常见关系

常见的关系有哪些呢?

(1) 一对一  例如: 身份证号码和人的关系
(2) 一对多  例如: 部门和员工的关系
(3) 多对多  例如: 学生和课程的关系

分析过程1

思考的过程:身份证号码和人为例

1、一个身份证号码对应一个人 OK 吗 ? OK的

2、一个人对应一个身份证号码吗? OK的

因此他们是 一对一的关系

分析过程2

思考的过程:部门和员工的关系为例

1、一个部门对应多个员工OK吗 ? OK的

2、一个员工对应多个部门OK吗? NO

因此他们是 一对多的关系

分析过程3

思考的过程:学生和课程的关系为例

1、一个学生对应多个课程OK吗 ? OK的

2、一个课程对应多个学生OK吗? OK的

因此他们是 多对多的关系

第02节 具体操作

1、一对一关系

举例

人和身份证号码的关系

操作

方式一: 在人这个表当中,建立主键,去关联 身份证表的外键。
方式二: 在身份证这个表当中,建立主键,去关联 人表的外键。更多情况下,我们会 将两个信息,合并在一张表当中。
2、一对多关系

举例

部门和员工的关系

操作

在部门表当中,建立主键,在员工表当中,建立外键。
由外键去关联主键。

画图

建表的原则:

1、在 1 的一方,建立 主键

2、在 N 的一方,建立 外键,由外键关联 1 的主键

3、多对多关系

举例

学生和课程的关系

操作

1、需要在 学生表当中建立 主键
2、需要在 课程表当中建立 主键
3、建立一个中间表(例如:学生选课表)至少包含两列,分别作为外键,去关联各自的主键。

画图

建表的原则:

1、其中一个表,建立主键

2、另外一个表,建立主键

3、创建一个中间表,至少包含两列信息,分别作为外键,关联对应的主键

03_Mysql_约束与多表关系相关推荐

  1. MySQL笔记——外键约束和表关系(一对一,多对一,多对多)

    一.外键约束 概念:外键用来让两个表的数据之间建立链接,保证数据的一致性和完整性.语法:(1)添加约束-- 创建表是添加外键约束CREATE TABLE 表名(列名 数据类型,-[CONSTRAINT ...

  2. oracle表违反主键约束,主键/约束/事务/表关系 Oracle

    1:创建一个主键 --创建一个表,有主键 create table studs( id varchar(32) primary key, name varchar(30) ); --主键也是数据库的对 ...

  3. 数据库MySQL基础---约束、表关系、聚合函数、连接查询、分组查询和子查询

    约束 1.主键约束亦成为主码,关键字:primary key,设置了主键约束的列的数据要求:不能为空,不允许重复. 2.自增长策略针对主键,不需要手动给值,自动的值是当前表中该列最大值+1关键字:au ...

  4. 数据库 约束(Constraint)、多表关系和范式

    文章目录 约束 Constraint 分类 多表关系 范式 第一范式1NF. 第二范式2NF 第三范式3NF BCNF 约束 Constraint 概念: 对表中数据进行限制,保证数据正确性.有效性. ...

  5. MySQL基础教程 包含SQL语句、约束、表关系、设计范式、多表、事务等

    简介 数据库 ​ 数据库(Database):是按照数据结构来组织.存储和管理数据的仓库.每个数据库都有一个或多个不同的 API 用于创建,访问,管理,搜索和复制所保存的数据. ​ 我们也可以将数据存 ...

  6. mysql关系表控制_mysql表关系

    一.表的详细操作 1.修改表名 alter table 旧表名 rename 新表名; ​2.修改表的引擎与字符编码 alter table 表名 engine="引擎名" ch ...

  7. 010_多表的表关系

    一. 一对多表关系 1. 用户表user -- 用户的id: uid -- 用户名: username -- 密码: password -- 手机: phonecreate table `user` ...

  8. mysql 表结构关系_mysql 表关系 与 修改表结构

    mysql 表关系 与 修改表结构 两张表关系 多对一 以员工和部门举例 多个员工对应一个部门 foreign key 永远是在多的那张表中设置外键 """ 从左边的表思 ...

  9. MySQL基础(三)表关系及数据的增删改查

    这一部分主要使用SQL中的DML,数据库操作语言(data manipulation language),对数据库数据进行增.删.改.查操作,作为前提,先介绍关系型数据库中的表关系. 关系型数据库(R ...

最新文章

  1. [转]cocos2d-x
  2. TNS-01201: Listener cannot find executable /u01/oracle/bin/extproc for SID orcl Listener failed to
  3. golang 切片 数组 洗牌
  4. LaTeX技巧24:LaTeX常用命令集锦
  5. 深度学习模型如何缩小到可以放到微处理器呢?
  6. C++ Opengl 3D世界源码
  7. activeMQ发送与接受消息模板代码
  8. html怎么让背景颜色百分比,jquery – CSS设置背景颜色只是表行宽度的一个百分比...
  9. java field setfont_java高手请进!
  10. 对饿了么app进行思维导图的分析
  11. postgresql客户端代码上传中文数据到服务器
  12. 企业常用OSPF组网配置示例
  13. 扫一下这个神奇的二维码,Wifi不用输密码
  14. VS LNK2001--链接器工具错误
  15. 从零开始再造打爆李世石的AlphaGo:快速构建棋盘和围棋规则
  16. hexo博客首页添加网易云音乐
  17. 《Designing Data-Intensive Application》01数据系统的基石-可靠性/可扩展性/可维护性
  18. 和岳父岳母的有效沟通
  19. 闲人琐事(假期第一周)
  20. STL模型转点云数据

热门文章

  1. 神经网络听上去高大上?带你从零开始训练一个网络(基于MNIST)
  2. 【听说有人想转码】大炮打蚊子----用二维数组写小游戏
  3. 青云战歌mysql_青云战歌数据库修改
  4. phpcms v9会员推荐位
  5. STM32升级方法(一):IAP升级
  6. 8086指令系统(一)数据传送指令
  7. mysql长度3 3_我的MYSQL学习心得(3) : 查看字段长度
  8. 全景图的各种制作方法~~
  9. 腾讯课堂课程汇总 CourseList(1001000-1002000)
  10. 不定积分——有理函数积分