约束 【重点】
数据库设计 【重点】
多表查询 【重点】
约束 【重点】
约束的概述
什么是约束
作用在表中的列上的,用于限制这一列存储的数据的
约束的分类
非空约束(not null):限制这列的值不能为空(null)
唯一约束(unique):限制这列的值不能有重复的
主键约束(primary key):主键值是每一行数据的唯一标识,限制这列的值必须非空且唯一
一个表最多只能有一个主键约束,一般都会给每一个表加上主键约束
但是可以将一个表中的多个字段联合设置为主键(联合主键/复合主键),主键还是一个
默认约束(default):限制这列的值如果没有设置值就为指定的默认值
检查约束(check):限制这列的值必须满足指定的要求,MySQL不支持检查约束
外键约束(foreign key):限制这列的值必须来自于另外一张表的另一列的值
主表:外键列关联的列所在的表
从表/副表:外键列所在的表
约束可以有两种写法:
1、建表的同时加约束
2、建表之后加约束
数据库设计 【重点】
什么是数据库设计
设计表结构,和表与表之间的关系的过程,就是数据库设计
表与表之间的关系(多表关系)
1、一对一
用户和用户详情
一个用户有一个用户详情 一
一个用户详情对应一个用户 一
建表原则:在任意一端的表中建立唯一的外键记录另一张表的主键都可以
2、一对多
部门和员工
一个部门对于多个员工 多
一个员工对于一个部门 一
建表原则:在多的一端建立外键,指向一的一端的主键
3、多对多
商品和订单
一个商品可以属于多个订单 多
一个订单可以包含多个商品 多
建表原则:创建一张中间表,用于记录两种的表的对应的关系
中间表中至少包含两个外键字段,分别记录两张表的主键
学生和课程:多对多
用户和身份证:一对一
学生和老师:多对多
学生和班级:一对多
多表查询 【重点】
什么是多表查询
同时从多张表中查询数据放到同一个数据结果
多表查询的分类
1、连接查询
内连接
隐式内连接:没有使用内连接关键字(inner join)连接多张表,而是使用逗号,使用where关键字进行条件关联
select 列名1,列名2,... from 表名1,表名2,... where 关联条件;
例如:
select * from emp,dept where emp.dep_id = dept.did;
显式内连接:显式的使用内连接关键字(inner join)连接多张表,使用on关键字进行条件关联
select 列名1,列名2,... from 表名1 inner join 表名2,... on 关联条件;
例如:
select * from emp inner join dept on emp.dep_id = dept.did;
注:inner关键字可以省略。
内连接查询的结果:满足关联条件的才会查询出来,不满足则不能查询出来
外连接(左外连接、右外连接)
左外连接
select 列名1,列名2,... from 表名1 left outer join 表名2,... on 关联条件;
右外连接
select 列名1,列名2,... from 表名1 right outer join 表名2,... on 关联条件;
注:outer关键字可以省略。
2、子查询
什么是子查询
查询中嵌套了查询,被嵌套的查询就称为子查询
子查询的代码一定要使用小括号括起来
子查询根据查询的结果不同使用方式不同
单列:使用在where语句中当做条件进行查询
单行单列:使用 = < > !等运算符连接
多行单列:使用 in关键字连接
多列:当做虚拟表进行关联使用
单行/多行多列