-
Notifications
You must be signed in to change notification settings - Fork 20
DataBase
目录 start
目录 end|2020-10-19 15:56|
码农翻身:爱炫耀的数据库老头儿
事务,undo日志
DB-Engines Ranking
数据库评分排行
-
原子性(Atomicity)
- 事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节。
- 事务执行过程中出错,会回滚到事务开始前的状态,所有的操作就像没有发生一样。也就是说事务是一个不可分割的整体,就像化学中学过的原子,是物质构成的基本单位。
-
一致性(Consistency)
- 事务开始前和结束后,数据库的完整性约束没有被破坏 。比如A向B转账,不可能A扣了钱,B却没收到。
-
隔离性(Isolation)
- 同一时间,只允许一个事务请求同一数据,不同的事务之间彼此没有任何干扰。比如A正在从一张银行卡中取钱,在A取钱的过程结束前,B不能向这张卡转账。
-
持久性(Durability)
- 事务完成后,事务对数据库的所有更新将被保存到数据库,不能回滚。
-
脏读
- 事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据是脏数据
-
不可重复读
- 事务 A 多次读取同一数据,事务 B 在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果 不一致。
-
幻读
- 系统管理员A将数据库中所有学生的成绩从具体分数值改为ABCDE等级,但是系统管理员B就在这个时候插入了一条具体分数的记录
- 当系统管理员A改结束后发现还有一条记录没有改过来,就好像发生了幻觉一样,这就叫幻读。
小结:不可重复读的和幻读很容易混淆,不可重复读侧重于
修改
,幻读侧重于新增或删除
。解决不可重复读的问题只需锁住满足条件的行
,解决幻读需要锁表
MVCC
代表性: Oracle MySQL PostgreSQL SQL Server
- 客户端 sqlitebrowser
结合docker配置很快,就是默认编码是latin 每次要改成 utf8mb4
十分的庞大, 学习了他理念的设计, 感受良多
范式越高意味着数据冗余更低,表的划分更细,但是在查询数据时需要做大量表连接操作,会严重降低性能
- 《数据库系统概论》
确保每列原子性
数据库表中的所有字段值都是不可分解的原子值
在1NF基础上,确保表中的每列都和主键相关,即在一个表中的字段都是仅构成一个实体,不可以把别的实体的字段放进来,会导致插入 删除 修改都很复杂
若 R∈1NF 且每一个非主属性完全函数依赖于任何一个候选码 则 R∈2NF
所谓完全依赖是指不能存在仅依赖主关键字一部分的属性,如果存在,那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与原实体之间是一对多的关系。为实现区分通常需要为表加上一个列,以存储各个实例的唯一标识。
在2NF基础上,任何非主属性不依赖于其它非主属性(在2NF基础上消除传递依赖)
- 例如 学生成绩表 应该只存学号 课程id 成绩,不应存放学生信息,课程信息,能大大减少数据的冗余
- 但是实际上为了系统的性能会做部分数据的冗余,例如改动较少的性别姓名等
Boyce-Codd Normal Form(巴斯-科德范式)
在3NF基础上,任何非主属性不能对主键子集依赖(在3NF基础上消除对主码子集的依赖)
key-value 数据库: redis memcached
文档数据库: MongoDB
图数据库: Neo4j
时序数据库: InfluxDB TSDB
-
sssdb
键值对数据库
数据类型丰富,处理非关系型并且结构化的数据十分方便, 结合Python使用就行云流水一般了
文档性数据库, 混合类型: 关系型非关系型
分布式内存数据库 12306 采用的解决方案
- 应尽量避免 字段默认值和业务值发生重叠, 便于后期排查问题,减少一个值的含义
- 字段应尽量紧凑,达到业务要求的最小设计,利于索引和IO
我哥提出, 基本表中连主键的约束都不要了, 全部由后台的代码进行约束处理
- 如果使用的需要高并发,数据库经常迁移,拆分,分布式,使用UUID,GUID最佳
- 如果是小型项目,使用整型自增即可,排序方便节约内存
-
Mysql-Font
连接Mysql的客户端
- HeidiSQL
-
sqlectron
简单直观的数据库图形化软件
- dbeaver
-
【 Algorithm 】
-
【 Blog 】
-
【 C 】
-
【 Database 】
-
【 Distributed 】
-
【 FrontEnd 】
- 【 FrontEnd/Frame 】
- 【 FrontEnd/Node 】
- Font
- Hexo
- JavaScript
- LearnPS
- ResponseCode
- SVG
- ViewSolution
- extjs学习笔记
-
【 Functional 】
-
【 Go 】
-
【 Groovy 】
-
【 Java 】
- 【 Java/AdvancedLearning 】
- 【 JavaBasic 】
- 【 JavaCache 】
- 【 JavaCollection 】
- 【 JavaConcurrency 】
- 【 JavaMap 】
- Annotation
- ClassFile
- Collection
- Concurrency
- Deploy
- Exception
- ExtendsAndInterface
- Generics
- IO
- JDBC
- JDKAndJRE
- JMX
- JVM
- Java11
- Java7
- Java8
- JavaNetwork
- JavaReleaseVersion
- JavaWeb
- JvmPerformance
- MQ
- MultipleLanguage
- Proxy
- Reflection
- Serialize
- SyntaxAndType
- Thread
- WebPerformance
- 【 Java/Android 】
- 【 Java/Ecosystem 】
- 【 Java/MSA 】
- 【 Java/Spring 】
- 【 Java/TemplateEngine 】
- 【 Java/Test 】
- 【 Java/Tool 】
- 【 Java/thread 】
- AlibabaJavaStandard
- DesignPattern
- HashMap解析
- Java-NIO
- Java虚拟机
- Log
- MIS
- Quartz
- RESTful
- WebSocket学习笔记
- ZooKeeper学习笔记
- android学习笔记
- 【 Java/AdvancedLearning 】
-
【 Kotlin 】
-
【 Linux 】
- 【 Linux/Alpine 】
- 【 Linux/Arch 】
- 【 Linux/Base 】
- 【 Linux/Centos 】
- 【 Linux/Container 】
- 【 Linux/Debian 】
- 【 Linux/Tool 】
- JavaDevInit
- Linux系统学习
-
【 MyBlog 】
-
【 Python 】
- 【 Python/Tool 】
- Python
- PythonConcurrent
- PythonGUI
- PythonGame
- PythonNet
- PythonOffices
- PythonWeb
- Python基础
- Python核心学习
-
【 Reactive 】
-
【 Rust 】
-
【 Scala 】
-
【 Script 】
-
【 Skills 】
- 【 Skills/Application 】
- 【 Skills/CS 】
- 【 Skills/Cache 】
- 【 Skills/Councurrency 】
- 【 Skills/DevOps 】
- 【 Skills/Document 】
- 【 Skills/Ecology 】
- 【 Skills/Network 】
- 【 Skills/Search 】
- 【 Skills/SoftwareEngineering 】
- 【 Skills/Spider 】
- 【 Skills/Test 】
- 【 Skills/Vcs 】
- 【 Skills/Work 】
- AppManual
- CelebrityQuotes
- Miscellaneous
- Platform
- Problem
- Protobuf
- RegularExpression
- SoftwareDesignEngineer
- Website
-
【 Windows 】