前言
MySQL 数据做,不说它是否优秀,至少对我来说它是很特别的,因为这是我自己开始学习的第一个数据库。不像Oracle,是在培训班中学习的,Sql Server 是在大学课堂中学习的,Postgre SQL 实在工作中用到的,没怎么学习过,之后可能会进一步学习一下,因为发现这款数据库同样也是非常优秀的。SQL Server 说实话已经不打算跟进了。Oracle 无可置疑是一款非常优秀的产品,哥哥方面都表现的非常优秀,但是过于复杂,鉴于自己智商捉急,不打算进行深入的学习。之后应该还会去了解一下目前流行的Nosql数据库。
MySQL是我使用的最多的数据库产品,一点一滴,从开始安装着手,慢慢的熟悉起来的,同时在学习的过程中,也帮我理解了很多的关于数据库的理念。
在这里我推荐一下几本看过的书,《MySQL权威指南》是一本比较不错的入门的书籍,《深入理解MySQL技术内幕》,对InnoDB引擎做了比较深入的介绍。
还有一本就是《高性能MySQL》,这本书还没有开始读,今天打算入手,再次感受一下MySQL的美丽。
一些基本概念
锁 就是对共享数据处理的策略,用于防止在多个线程对竞争资源进行处理时彼此相互影响,造成数据的错误。
事物 保证一组操作的成功与失败,使用事物的主要目的是避免数据在业务上出现与实际情况不一致的现象。
事物的特性(ACID)
原子性(atomicity):对于一组操作要么全部执行成功,要么全部执行失败。
一致性(consistency):数据库总是从一个一致性的状态转换到另一个一致性的状态。
隔离性(isolation):通常来说,一个事物所产生的影响在提交以前对其他的事物是不可见的。这里说的是通常,在后面了解到隔离级别的时候,还会再次涉及到这个问题。
持久性(durability):一旦事物提交,其所作的修改,就会永久的保存到数据库中,即使系统崩溃所作的更改也不会消失。
隔离级别
READ UNCOMMITED
未提交读,能够读取其他事物未提交的数据,很少使用,除非非常特殊的情况
READ COMMITED
读已提交,只能读取其他线程提交的数据。该级别也叫不可重读,因为同一个事物中的两次相同的查询可能出现不同的结果。
REPEATABLE READ
可重复读,可重复读保证了在同一个事物中,两次相同的读取操作所得到的结果是一致的,这个级别可能出现幻读,当一次事物两次读取同一范围内的数据的时候,中间如果有其他事物在这个范围内插入新的数据,则是不可见的。
SERIALIZABLE
隔离的最高级别,通过强制事物串行执行,避免了幻读的问题,这也造成了性能的下降。