MySQL——内连接与外连接、三范式、MySQL语言分类、事务机制

内连接:

假设A和B表进行连接,使用内连接的话,凡是A表和B表能够匹配的上的记录查询出来,这就是内连接。AB两张表没有主副之分,两张表是平等的。

外连接:

假设A和B表进行连接,使用外连接的话,AB两张表中有一张表是主表,一张表是副表,主要查询主表中的数据,捎带着查询副表,当副表中的数据没有和主表中的数据匹配上,副表自动模拟出NULL与之匹配。

外连接的分类?

左外连接(左连接):表示左边的这张表是主表。
右外连接(右连接):表示右边的这张表是主表。
左连接有右连接的写法,右连接也有对应的左连接的写法。

eg:找出每个员工的上级领导?
select e.empno,e.ename,e.mgr,m.ename from emp e left join emp m on e.mgr=m.empno;
每个员工的上级领导
找出哪个部门没有员工?
 select e.*,d.* from emp e right join dept d on e.deptno=d.deptno where e.empno is null;
没有员工的部门

数据库设计三范式(重点内容,面试常问)

什么是设计范式?
设计表的依据。按照这个三范式设计的表不会出现数据冗余。
三范式都是哪些?
第一范式:任何一张表都应该有主键,并且每一个字段原子性不可再分。
第二范式:建立在第一范式的基础之上,所有非主键字段完全依赖主键,不能产生部分依赖。
多对多?三张表,关系表,两外键
t_student 学生表
sno(pk) sname


1 张三
2 李四
3 王五

t_teacher 讲师表
tno(pk) tname


1 王老师
2 李老师
3 杜老师

t_student_teacher_relation 学生讲师关系表
id(pk) sno(fk) tno(fk)


1 1 3
2 1 1
3 2 2
第三范式:建立再第二范式基础之上,所有非主键字段直接依赖主键,不能产生传递依赖。
一对多?两张表,多的表加外键
班级t_class
cno(pk) cname


1 班级1
2 班级2

学生t_student
sno(pk) sname classno(fk)
101 张1 1
102 张2 1
103 张3 2
104 张4 2

提醒:在实际的开发中,以满足客户的需求为主,有的时候会拿冗余换执行速度。

一对一怎么设计?
一对一设计有两种方案:主键共享


一对一设计有两种方案:外键唯一


MySQL语句分类

DQL(数据查询语言):查询语句,凡是select语句都是DQL

DML(数据操作语言):insert delete update ,对表中的数据进行增删改查

DDL(数据定义语言):create drop alter ,对表结构的增删改

TCL(事务控制语句):commint 提交事务,rollback回滚事务

DCL(数据控制语言):grant授权、revoke撤销权限等

事务是一个完整的业务逻辑单元,不可再分

和事务相关的语句只有:DML语句。(insert delete update)

你可能感兴趣的:(MySQL——内连接与外连接、三范式、MySQL语言分类、事务机制)