黑马程序员技术交流社区
标题:
Doy_09 MySQL多表&事务
[打印本页]
作者:
夕阳下的少年
时间:
2018-5-9 16:24
标题:
Doy_09 MySQL多表&事务
MySQL多表&事务
# 多表设计之外键约束
##约束
###约束的作用
约束是用来保证数据的完整性.
##### 单表约束
*
主键约束
*
唯一约束
*
非空约束
##### 多表约束
*
外键约束: 用来保证数据完整性(多表之间).
#### 演示外键约束作用
```
create table dept(
did int primary key auto_increment,
dname varchar(20)
);
insert into dept values (null,'市场部');
insert into dept values (null,'人事部');
insert into dept values (null,'教研部');
```
#### 创建一个员工表
```
sex varchar(10),
dno int
);
insert into employee values (null,'张三',8000,'1988-09-01','男',3);
insert into employee values (null,'李四',9000,'1988-09-01','男',1);
insert into employee values (null,'王五',6000,'1988-09-01','男',2);
insert into employee values (null,'赵六',10000,'1988-09-01','男',3);
insert into employee values (null,'孙七',10000,'1988-09-01','男',1);
```
#### 删除其中的某个部门(是否可以)
*
查看数据
*
select * from dept;
*
向员工表中插入一条记录
*
insert into
employee values (nul , '田八' , 10000 , '1988-09-01 ' , '男' , null);
*
删除一个人事部
*
delete from dept where did =2;
``
`
向刚才做的这两个操作(插入一个没有部门的员工,删除一个带有员工的部门)。这种情况都是不应该发生。这个时候需要在多表之间添加外键约束。
``
`
#### 添加外键约束
##### 在员工表上添加外键
``
`
alter table employee add foreign key (dno) references dept(did);
``
`
##### 设置外键为非控
``
`
alter table employee modify dno int not null;
``
`
## 表关系的介绍
#### 表与表之间的关系
##### 一对多的关系
-
一对多的例子
-
一个部门下可以有多个员工,一个员工只能属于某一个部门.
##### 多对多的关系
-
多对多的例子:
-
一个学生可以选择多门课程,一门课程可以被多个学生选择.
##### 一对一的关系
*
一对一的例子:
*
一个公司可以有一个注册地址,一个注册地址只能多一个公司.
## 多表分析及创建
#### 多表的分析
##### 需求
```
完成一个学校的选课系统,在选课系统中包含班级,学生和课程这些实体。
```
*
班级和学生之间是有关系存在:
*
一个班级下包含多个学生,一个学生只能属于某一个班级(一对多的关系)。
*
学生和课程之间是有关系存在:
*
一个学生可以选择多门课程,一门课程也可以被多个学生所选择(多对多的关系)。
## 多表查询的概述
#### 多表查询的分类
##### 连接查询
*
交叉连接:cross join
*
交叉连接: 查询到的是两个表的笛卡尔积.
*
语法:
*
select * from 表1 cross join表2;
*
select * from 表1 表2;
*
内连接:inner join(inner是可以省略的)
*
显示内连接:在SQL中显示的调用inner join关键字
*
语法:select * from 表1 inner join 表2 on 关联条件;
*
隐式内连接: 在SQL中没调用 inner join 关键字
*
语法 : select * from 表1,表2 where 关联条件;
*
外部连接 :outer join(outer可以省略的)
*
左外连接:
*
语法:select * from 表1 left outer join 表2 on 关联条件;
*
有外连接:
*
语法:select * from 表1 right outer join 表2 on 关联条件;
##### 子查询
*
子查询:一个查询语句条件需要依赖另一个查询语句的结果.
## 数据准备
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2