MySQL事务

MySQL事务:一组原子性的SQL查询,或者说一个独立工作单元

一个支持事务的存储引擎或者关系型数据库必然满足ACID测试

A:atomicity,原子性;整个事务中的所有操作要么全部成功执行,要么全部失败后回滚

C:consistency, 一致性;数据库总是从一个一致性状态转换为另一个一致性状态

I:Isolation,隔离性;一个事务所做出的操作在提交之前,是不能为其它所见;隔离有多种隔离级别

D:durability: 持久性;一旦事务提交,其所做的修改会永久保存于数据库中

事务生命周期:启动事务START TRANSACTION-->执行sql语句-->结束事务:(1) COMMIT:提交  或者  (2) ROLLBACK: 回

注意:只有事务型存储引擎方能支持此类操作

autocommit                  | ON     每条sql语句当作一个事务自动提交(这会影响系统i/o性能)

建议:显式请求和提交事务,而不要使用“自动提交”功能  set autocommit=0

事务支持savepoint

  SAVEPOINT identifier    例如:savepoint sp1  savepoint sp2

  ROLLBACK [WORK] TO [SAVEPOINT] identifier    例如:rollback to sp2

  RELEASE SAVEPOINT identifier    例如:release savepoint sp1

  

事务隔离级别:

  READ UNCOMMITTED (读未提交): 另一个事务修改了数据,但尚未提交,而本事务中的SELECT会读到这些未被提交的数据(脏读)

  READ COMMITTED (读提交): 本事务读取到的是其他事务提交后的最新数据。问题是在同一个事务里,如果其他事务修改两次当前事务前后两次相同的SELECT会读到不同的结果(不重复读)

  REPEATABLE READ (可重读):在同一个事务里,SELECT的结果是事务开始时间点的状态,因此,同样的SELECT操作读到的结果会是一致的。但是,会有幻读现象

  SERIALIZABILE (可串行化):一个事务未提交时,另一个事务对同一数据做操作时会被阻塞

存在的问题:脏读(另一个事务修改了数据,但尚未提交,而本事务中的SELECT会读到这些未被提交的数据)

      不可重复读(解决了脏读后,会遇到,同一个事务执行过程中,另外一个事务提交了新数据,因此本事务先后两次读到的数据结果会不一致)

      幻读(解决了不可重复读,保证了同一个事务里,查询的结果都是事务开始时的状态(一致性)但是如果另一个事务同时提交了新数据例如30改为40,这时在底层看到同一数据有30和40两个值)

      加锁读:当在高并发时,可能会导致一场噩梦,不过最大限度地提高了数据的安全性

查看隔离级别:

死锁:两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去,解决死锁主要针对于最常用的InnoDB

查看事务日志:

innodb_log_buffer_size   缓存中事务日志的大小

innodb_log_file_size        磁盘事务日志文件大小

innodb_log_files_in_group   几个事务日志文件

innodb_log_group_home_dir     事务日志文件存放位置

事务日志文件名:

以上几个参数不支持运行时修改,需要修改配置文件并从新启动

原文地址:https://www.cnblogs.com/linuxboke/p/5559446.html