数据库:ACID、视图、删除、索引、链接、范式、隔离级别、分页

记录一篇很好的文章https://www.cnblogs.com/scarecrow-ryan/p/9204821.html

A C I D : \red{ACID:} ACID:

原 子 性 : \orange{原子性:}
事务是不可分割的工作单位,要么都发生、要么不发生。

一 致 性 : \orange{一致性:}
保持数据完整,即前后数据逻辑一样,不能凭空增多或减少。

隔 离 性 : \orange{隔离性:}
针对多个用户同时操作,排除其他事务对本次事务对影响。

持 久 性 : \orange{持久性:}
一旦提交就是永久性的。


视 图 \red{视图} :

视图是虚拟的表、不包含任何数据。
使用视图可以保护数据,简化检索。
视图创建后,可以使用与表相同的方式利用它们。

视 图 不 能 被 索 引 , 也 不 能 有 关 联 的 触 发 器 \orange{视图不能被索引,也不能有关联的触发器}


d r o p : \red{drop:} drop: 直接删除表
d e l e t e : \red{delete:} delete: 删除特定数据
t r u n c a t e : \red{truncate:} truncate: 删除表所有数据,保留表结构


索 引 : \red{索引:}

排序数据结构,协助快速查询、更新数据库表。B+树实现。

但是构建索引需要额外空间消耗,所以数据量太大不太适应索引。
同时索引需要额外耗时。

索引一般采用外键上,加快链接的速度。

当修改远远大于检索时,不适用索引。

唯 一 索 引 : \orange{唯一索引:}

不允许两个任意行具有相同索引值。

数据库自动为主键创建主键索引,主键索引是一种唯一索引。

多 列 索 引 : \orange{多列索引:}

select * from test where A = 1 and B = 2
多列索引是通过合并多列值成新值再排序的索引,有先后顺序,通常把严格的列放在前面,比如index(A,B)
sql会先筛选A符合条件的数据,在基础上筛选B符合条件的纪录。

如果分别建立索引,则sql只会选择最严格的索引来检索。


连 接 \red{连接}

tableA

id name
1 lee
2 zhang
4 wang

tableB

id name
1 190
2 2100
3 70

左 链 接 : l e f t j o i n \orange{左链接:left join} leftjoin

select * from tableA left join tableB on tableA.id = tableB.id

1 lee 190
2 zhang 2100
4 wang NULL

右 链 接 : r i g h t j o i n \orange{右链接:right join} rightjoin

select * from tableA right join tableB on tableA.id = tableB.id

1 lee 190
2 zhang 2100
NULL NULL 370

完 整 外 链 接 : \orange{完整外链接:}

select * from tableA full join tableB on tableA.id = tableB.id

1 lee 190
2 zhang 2100
4 wang NULL
NULL NULL 370

内 链 接 : \orange{内链接:}

select * from tableA join tableB on tableA.id = tableB.id

1 lee 190
2 Zhang 2100

交 叉 连 接 : \orange{交叉连接:}

select * from tableA cross join tableB

1 lee 190
2 zhang 190
4 wang 190
1 lee 2100
2 zhang 2100
4 wang 2100

不需要对齐,就是N*M枚举


范 式 \red{范式}

依 赖 : \blue{依赖:}
一对一关系:则X->Y,Y->X,例如学校->校长
一对多关系:则X->Y,例如姓名和年龄
多对多不存在依赖。

主 属 性 , 非 主 属 性 : \blue{主属性,非主属性:}
标示数据唯一的一个或多个属性称为主属性,剩下依赖主属性推导出就是非主属性。

第 一 范 式 \orange{第一范式}
不满足第一范式的数据库就不是关系数据库。
关 系 模 式 R , 每 一 个 关 系 r 都 是 原 子 项 \blue{关系模式R,每一个关系r都是原子项} Rr
通俗点就是没有重复的列

第 二 范 式 \orange{第二范式}
必须先满足第一范式
每 一 个 非 主 属 性 依 赖 于 主 键 整 体 ( 主 键 可 以 有 多 个 ) , 而 不 能 依 赖 部 分 主 键 \blue{每一个非主属性依赖于主键整体(主键可以有多个),而不能依赖部分主键}
通俗点就是每一行必须被唯一区分,一般主键只有一个称为id。

第 三 范 式 \orange{第三范式}
必须满足第二范式
消 除 传 递 依 赖 \blue{消除传递依赖}
第三范式消除冗余,通俗一点就是表中表,非主属性抽出来也可以成一张表。
一 般 数 据 库 只 需 满 足 第 三 范 式 即 可 \blue{一般数据库只需满足第三范式即可}

B C N F : \orange{BCNF:} BCNF:
必须满足第三范式
消 除 部 分 依 赖 \blue{消除部分依赖} ,即AB->C,B->C,只存在AB->C或B->C
通俗点就是各候选键的子集不可以推出非主属性。


隔 离 级 别 : \red{隔离级别:}

事务四种隔离级别:

脏读不可重复读幻读
Read uncommittedYYY
Read committedNYY
Repeatable readNNY
SerializableNNN

1 − 脏 读 : \green{1-脏读:} 1
事务A读取了事务B未提交的数据,如果事务B回滚,则发生脏读,事务A读取的是无效数据。

2 − 不 可 重 复 读 : \green{2-不可重复读:} 2
当事务A中间有事务B提交成功,则事务A之后读取的数据有可能与之前不同。针对update

3 − 幻 读 ( 虚 读 ) : \green{3-幻读(虚读):} 3
当事务A检索到N条数据,事务B插入与N条无关的符合事务A的M条数据,则事务A再次检索就有N+M条数据。针对insert

隔 离 级 别 : \red{隔离级别:}

I S O L A T I O N _ R E A D _ U N C O M M I T T E D : \orange{ISOLATION\_READ\_UNCOMMITTED:} ISOLATION_READ_UNCOMMITTED:- 读 未 提 交 \blue{读未提交}
事务最低隔离级别,一个事务可以看到另一个事务未提交的数据。

I S O L A T I O N _ R E A D _ C O M M I T T E D : \orange{ISOLATION\_READ\_COMMITTED:} ISOLATION_READ_COMMITTED:- 读 提 交 \blue{读提交}
大 多 数 数 据 库 的 默 认 隔 离 级 别 \green{大多数数据库的默认隔离级别}
保证一个事务提交数据后,才能被另一个事务读取。

I S O L A T I O N _ R E P E A T A B L E R E A D : \orange{ISOLATION\_REPEATABLE_READ:} ISOLATION_REPEATABLEREAD:- 重 复 读 \blue{重复读}
m y s q l 默 认 级 别 \green{mysql默认级别} mysql
整个事务过程中,对同一笔数据的读取结果是相同的,不管其他事务是否对数据更新。

I S O L A T I O N _ S E R I A L I Z A B L E : \orange{ISOLATION\_SERIALIZABLE:} ISOLATION_SERIALIZABLE:- 序 列 化 \blue{序列化}
事务必须顺序执行。缺点是并法下降,性能变差。


表 分 页 : \red{表分页:}

一 张 表 为 什 么 要 分 页 : \orange{一张表为什么要分页:}
如果一张表有几千万行数据时,查询一次时间会很大,如果有联合查询的话,可能就死了。
分页通过一定hash规律,将一张表划分为数个页,减小数据库负担。

表 锁 定 、 行 锁 定 : \orange{表锁定、行锁定:}
表锁定,即当锁定时,不能对表操作。
行锁定,即当该行数据锁定时,不能对该行数据操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值