MySQL(范式、连接、子查询、事务、DCL)

本文详细介绍了数据库范式的第一、二、三范式概念,包括函数依赖、部分函数依赖和传递依赖,以及如何避免数据冗余。涵盖了连接操作如笛卡尔积、内连接、外连接、左外连接和右外连接,以及子查询的应用。同时讨论了事务的原子性问题和解决脏读、不可重复读、幻读的方法。
摘要由CSDN通过智能技术生成

目录

范式

第一范式

第二范式

第三范式

连接

笛卡尔积

内连接

外连接

左外连接

右外连接

自连接

 子查询

事务

可能产生的问题

解决方法

DCL


范式

  • 函数依赖:如果可以通过属性(组)A,可以确定唯一的B,叫做B属性依赖A
    • 部分函数依赖:通过属性(组)A中一部分值确定唯一的B  学号+课程 确定 学生姓名
    • 完全函数依赖:通过属性(组)A中全部的值确定唯一的B  学号+课程 确定 分数
  • 传递依赖:通过属性(组)A能确定唯一的属性(组)B,再通过属性(组)B确定唯一的属性(组)C,叫做C传递依赖A  学生姓名 确定 系别,系别 确定 系主任
  • 主属性:表中存在属性(组),可以通过这个属性(组)确定表中其他属性的值

第一范式

指在关系模型中,对于添加的一个规范要求,所有域都应是原子性

即所有的字段应是原子性,不能存在如下情况:

第二范式

在第一范式的基础上,非码属性必须完全依赖于其候选码

即一张表只表达一件事,分数完全依赖于学号和课程名称,但是系名仅仅完全依赖于学号,并不完全依赖于姓名与学号,因此需要将表拆分,否则会造成数据冗余和更新、删除、插入异常

第三范式

在第二范式的基础上,任何非主键属性不依赖于其他非主键属性,即不能有传递依赖出现

系名不应直接依赖于学号,而应该是系名依赖于系编号,系编号依赖于学号,所以应该再分割表

连接

笛卡尔积

A表的每一条记录都通过外键依次连接B表的每一条记录

select * from emp,dept;--得出14*4条记录

内连接

等同于笛卡尔积的基础上限制了外键相同

select * from emp inner join dept on emp.deptno = dept.deptno;--得出13条记录
--等同于
select * from emp,dept where emp.deptno = dept.deptno
--这样任何一边有外键为空的记录都会被忽略

外连接

左外连接

将左边的表作为驱动表,在右边的表中寻找对应外键相同的记录,就算驱动表的外键为null,也会自动往后补一个全是null的记录

select * from emp left join dept on emp.deptno = dept.deptno;--得出14条记录
--KING的记录7839,KING,PERSIDENT,,1981-11-17,5000,null/*deptno*/,null,null,null,null

右外连接

和左连接同理,只是将右边的表变成驱动表

自连接

自己和自己连接,这是一种需求,不是一个方式

select e.ename,m.ename from emp e left join emp m on e.mgr = m.empno;--得到14条记录

 子查询

使用其他的查询结果,结果可以是单个(单列单行)、集合(单行多列,单列多行)、(多列多行)

事务

业务层面上的不可切割的整体,比如转账到对方接收成功就是一个事务,事务具有原子性一致性持久性隔离性

事务并发:不同的事务操作相同的数据

可能产生的问题

  • 脏读:事务B读到了事务A没有提交的数据,这个时候A可以提交也可以回滚操作。
  • 不可重复读:针对update,事务A更新数据前事务B查询了一次,更新数据后事务B又查询了一次,导致两次查询结果不一致。
  • 幻读:事务A删除了某条数据,但是事务B又插入了一条同样的数据,看起来就好像没删掉

解决方法

DCL

管理各个用户的权限,了解就行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值