学习数据库笔记分享五

1、事务(Transaction)

(1)事务的概述

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

(2)事务相关的语句是:DML语句(insert、update、delete)

​ 事务是为了保证数据的完整性,安全性的

(3) 业务需要使用事务机制的原因:主要是因为一个业务往往徐亚多种DML语句

事务的特性:ACID

(1)原子性( [atomicity](javascript:😉):事务不可再分

(2)一致性([consistency](javascript:😉):事务保证多条DML 语句同时成功否则都不成功过

(3)隔离性([isolation](javascript:😉 ):事务A B之间具有隔离

(4)持久性([durability](javascript:😉 ):最终的数据都要持久大硬盘文件中,事务才算成功

事务的隔离级别

(1)读未提交(read uncommitted)

​ 描述现象:A修改完数据没有提交,但是B可以读到A修改完的数据

​ 产生的问题:读取了为提交完的数据,称为**“脏读”**

(2)读已提交(read committed)

​ 描述现象:A修改完数据了,B可以读到数据

​ 解决了 脏读 的问题

​ 产生的问题:不可重复读(事务A首先读取了一条数据,然后执行逻辑的时候,事务B将这条数据改变了,然后事务A再次读取的时候,发现数据不匹配了,就是所谓的不可重复读了。)

(3)可重复读(repeatable read)

​ 解决了不可重复读的问题

​ 存在的问题:读取到的数据都是幻想:幻读

(4)序列化读/串行化读(Serializable )

​ 解决了全部的问题

​ 存在的问题: 效率低下,需要事务之间的排队

2、索引

(1)什么叫索引?索引的作用?

​ 索引可以理解为一本书的目录,通过索引可以快速的找到对应的资源

(2)在数据库,查询一张表的有两种检索的方式?

​ 全表扫描

​ 根据索引来检索(效率高)

(3)索引提高检索的效率的原理:缩小了扫描的范围。

(4)创建索引和删除索引?

create index  索引的名称   on 表名(字段名);
drop index 索引的名称 on 表名;

(5) 什么时候添加索引?

数据量多的时候

这个字段很少使用DML操作

这个字段经常在where 子句中

注意:

​ 主键和其他的unique约束的字段自动会添加索引。

(6)查看SQL语句的执行计划:

explain select 语句;

(7) 索引的实现原理

​ 索引底层使用的数据结构是:B+Tree

​ 索引的实现原理:

​ 通过B+Tree 来缩小扫描的范围,底层索引先进行了排序—>分区—>,索引会携带数据在表中最终通过检索来找到数据,进而找到与之对应的物理地址,通过物理地址定位表的数据;

select ename from emp where ename = 'SMITH';
通过索引转换为:
select ename from emp where 物理地址 = 0x3;

(8)索引的分类?

​ 单一索引

​ 复合索引

​ 主键索引

​ 唯一索引

​ …

(9)索引的失效

​ 使用模糊查询的时候,第一个字符是使用%,索引失效。

2、视图(view)

​ (1) 视图:同一张表的不同的角度去看待。

​ (2)创建视图和删除视图

create view myview(视图的名字) as select 语句;

drop view myview(视图的名字);

只有DQL语句才能创建视图对象。

对视图的增删改查,会影响原表的数据。

(3) 为什么使用视图?

​ 视图可以隐藏表的实现细节,保密的数据,对外提供的是视图,不会吧原表给你的。

3、DBA命令

(1)将数据库当中的数据导出
在windows的dos命令窗口中执行:(导出整个库)

mysqldump 数据库名>D:\名字.sql -uroot -pXXXX

​ 在windows的dos命令窗口中执行:(导出指定数据库当中的指定表)

mysqldump 数据库名 emp>D:\名字.sql -uroot –pXXXX

(2)导入数据

create database JJ(数据库名);
use JJ;
source D:\名字.sql

4、数据的设计的三范式(重点)

第一范式:要求任何一张表都应该有主键,并且每一个字段不可在分。

第二范式: 在第一范式的基础上,满足所有的主键字段完全依赖主键,不能产生部分依赖。

第三范式:在第二范式的基础上,满足所有的非主键字段直接依赖主键,不能产生传递依赖。

设计表的结构,满足三范式就能够避免数据的冗余:

​ 多对多的表设计:三张表,其中关系表中两个外键;

​ 一对多的表的设计:两张表, 其中多的那张表中设计外键;

​ 一对一的表的设计:主键共享和外键唯一

案例一:多对多

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
4				2				3
5				3				1
6				3				3

案例二:一对多

班级t_class
cno(pk)			cname
--------------------------
1					班级1
2					班级2

学生t_student
sno(pk)			sname				classno(fk)
---------------------------------------------
1011				1
1022				1
1033				2
1044				2
1055				2

案例三:一对一

t_user_login  用户登录表
id(pk)		username			password
--------------------------------------
1				zs					123
2				ls					456

t_user_detail 用户详细信息表
id(pk+fk)	realname			tel			....
------------------------------------------------
1				张三				1111111111
2				李四				1111415621

一对一设计有两种方案:外键唯一。
t_user_login  用户登录表
id(pk)		username			password
--------------------------------------
1				zs					123
2				ls					456

t_user_detail 用户详细信息表
id(pk)	   realname			tel				userid(fk+unique)....
-----------------------------------------------------------
1				张三				1111111111		2
2				李四				1111415621		1

注意:在实际的开发业务中,我们可以采用数据冗余的方式来换取时间。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值