作为程序猿我们都应该清楚,不管是在求职面试的过程中还是在平常的开发中,数据库起了很重要的作用,数据库又分为关系型数据库和非关系型数据库。接下来将会介绍一些数据库方面的基础知识。
提起数据库我们想到的就是我们常常编写的一些sql语句,那这些sql语句在执行的过程中,怎么执行的,什么时候结束,这时候边涉及到一个名词——事务。事务通俗地讲就是表示的是一系列命令的集合,它是并发控制的基本单元。事务具有四大特性:原子性,一致性,隔离性,持久性。
原子性:是指事务中的一系列操作要么全部执行完毕,要么全部都不执行(即命令中有一条没有执行,全部回滚)
一致性:是指数据库的数据在进行一系列的操作之后,数据内容应该是由原来的一致性状态变为另一个一致性的状态。
隔离性:即多个事务之间在执行的时候是互不干扰的。
持久性:即一旦一个事务对数据库进行操作后,这个事务对数据库的影响将是持久的。
在这四种特性中,隔离性的保证是靠锁机制实现的,另外三种特性则是依靠数据库的特性实现的。
说到事务,就不得不说事务的四大隔离级别:读未提交,读已提交,可重复度,序列化,这四种隔离级别都是在解决一些问题时出现的。
读未提交:即在事务执行过程中,事务中的一些执行指令改变了数据库的值,但是该事务却没有提交,并且由于某种原因该事务回滚,而在回滚之前,另一个事务也对数据库的统一数据进行了读操作,即前一事务的修改被后一事务读取到,而由于前一事务的回滚操作,导致后一事务的读取是错误的,这就会导致的脏读问题的出现。当然了除了脏读,不可重复读和幻读都是不可避免的。
读已提交:即事务只有在提交之后,该事务所影响的数据才能被其他事务读取。这样便可以避免脏读问题的产生,但是避免不了不可重复读和幻读问题的出现。
可重复读:在该种隔离级别下,事务可以重复读取不同版本的数据,而不会出现读取到的数据不一致的情况。但是避免不了幻读的产生。
序列化:是指多个事务在执行的时候,需按照一定的次序执行,这样可以严格的控制事务之间执行的次序,从而可以避免幻读的出现。但是效率低下。
至此,数据库的事务知识介绍结束,下章会介绍数据库的存储引擎的相关知识。