xixi,先把第二天内容发出来了,不过这是一大部分,还有一小部分努力晚上发出✊
第一天的内容,嗯....还在等待中
一、约束
(一)约束概念:
(1)约束时作用于表中列上的规则,用于限制加入表的数据
(2)约束的存在保证了数据库中数据的正确性、有效性和完整性
(二)约束分类:
约束名称 关键字
(1)非空约束(保证列中所有数据不能有null值) NOT NULL
(2)唯一约束(保重列中所有数据各不相同) UNIQUE
(3)主键约束(主键是一行数据的唯一标识,要求非空且唯一) PRIMARY KEY
(4)检查约束(保证列中的值满足某一条件) CHECK
(5)默认约束(保存数据时,未指定值则采用默认值) DEFAULT
(6)外键约束(外键用来让两个表的数据之间建立连接,保证数据的一致性和完整性) FOEREIGN KEY
1.为什么要有外键约束:
当表与表之间的数据有相关联性的时候,如果没有相关的数据约束,则无法保证数据的准确性!
2.外键约束的作用:
让表与表之间产生关联关系,从而保证数据的准确性
3.键的级联更新和级联删除:
a.什么是级联删除 当我想把主表中的数据进行删除时,我期望从表中有关联的数据也会随之删除!
b.级联操作: 默认:主表有关联数据,主表无法删除、修改关联字段。 set null : 主表操作时,从表置空。 no Action : 主表操作的时候,如果从表有关联数据,则主表操作失败。(默认) cascade : 主表操作的时候,从表级联操作。(慎用)
tips:MYSQL 不支持检查约束
二、多表操作
(一)多表介绍
(1)多表概念 多表就是多张数据表,而表与表之间是可以有一定的关联关系,这种关联关系通过外键约束实现。
(2)多表的分类
1.一对一:
*适用场景 :人和身份证。一个人只有一个身份证,一个身份证只能对应一个人。
用户表-------------用户详情表。
手机号登录表------微信号登录表。
商品表-------------商品详情表。
*-建表原则 :在任意一个表建立外键,去关联另外一个表的主键。
2.一对多:
*适用场景 :用户和订单。一个用户可以有多个订单。 商品分类和商品。一个分类下可以有多个商品。 部门和员工。
*建表原则 :在多的一方,建立外键约束,来关联一的一方主键。
3.多对多:
*适用场景 :学生和课程。一个学生可以选择多个课程,一个课程也可以被多个学生选择。
*建表原则 :需要借助第三张中间表,中间表至少包含两个列。这两个列作为中间表的外键,分别关联两张表
(3)多表设计范式:三范式:
-- 1.第一范式(确保每列保持原子性)
-- 2.第二范式(确保表中的每列都和主键相关)
-- 3.第三范式(确保每列都和主键列直接相关,而不是间接相关)
(二)多表查询
(1)笛卡尔积:
A表4条数据,B表4条数据
笛卡尔积:AB=44=16条 (A表每一条数据和B表每一条数据排列组合)
(A列 B列都显示)
(2)内连接查询:
1.查询原理 内连接查询的是两张表有交集的部分数据(有主外键关联的数据)。
内连接相当于 查询表A和表B的交集数据
2.查询语法 显式内连接: SELECT 列名 表名1[INNER] JOIN 表名2 ON 条件;
隐式内连接: SELECT 列名 FROM 表名1,表名2 WHERE 条件;
(3)外连接查询:
1.左外连接:
查询原理:查询左表的全部数据,和左右两张表有交集部分的数据。
查询语法:SELECT 列名 FROM 表名1 LEFT [OUTER] JOIN 表名2 ON 条件;
2.右外连接:
查询右表的全部数据,和左右两张表有交集部分的数据。
查询语法:SELECT 列名 FROM 表名1 RIGHT [OUTER] JOIN 表名2 ON 条件;
(4)子查询
(1)子查询概念 :查询语句中嵌套了查询语句,我们就将嵌套的查询称为子查询。
(2) 子查询分类:
1.子查询语句结果是单行单列,子查询语句作为条件值,使用 = != > < 等进行条件判断 (普通条件)
查询语法:SELECT 列名 FROM 表名 WHERE 列名=(SELECT 列名 FROM 表名 [WHERE 条件]);
2.子查询语句结果是多行单列,子查询语句作为条件值,使用 in 等关键字进行条件判断 (in)
查询语法:SELECT 列名 FROM 表名 WHERE 列名 [NOT] IN (SELECT 列名 FROM 表名 [WHERE 条件]);
3.子查询语句结果是多行多列,子查询语句作为虚拟表 (from)
查询语法:SELECT 列名 FROM 表名 [别名],(SELECT 列名 FROM 表名 [WHERE 条件]) [别名] [WHERE 条件];
(5)自关联查询
在同一张表中数据有关联性,我们可以把这张表当成多个表来查询