MYSQL 事务

定义

  1. Transactions:一组原子性的SQL语句,或一个独立工作单元
  2. ACID特性
  • A:atomicity原子性;整个事务中的所有操作要么全部成功执行,要么全部失败回归
  • C:consistency一致性;数据库总是从一个一致性状态转换为另一个一致性状态
  • I:Isolation隔离性;一个事务所做出的操作在提交之前,是不能为其它事务所见;隔离有多种隔离级别,实现并发
  • D:durability持久性;一旦事务提交,其所作的修改会永久保存于数据库中

transaction的使用

  1. 启动
    BEGIN
  2. 结束
    COMMIT
    ROLLBACK(只支持DML)
  3. 关闭自动提交transition
    set autocommit=0
  4. 事务支持保存点 savepoint

transaction的隔离级别

READ UNCOMMITTED

可读取到未提交数据,产生脏读

READ COMMITTED

可读取到提交数据,未提交数据不可读,产生不可重复读,即可读取到多个提交数据,导致每次读取数据不一致

REPEATABLE READ

可重复读,多次读取数据都一致,产生幻读,即只能读到旧数据,默认设置

SERIALIZABILE

可串行化,未提交的读事务阻塞修改事务,或者未提交的修改事务阻塞读事务。导致并发性能差

事务隔离级别 脏读 不可重复读 幻读 加锁读
read-uncommitted y y y n
read-committed n y y n
repeatable-read n n y n
serializable n n n y

设置隔离级别

  1. 服务器变量 tx_isolation
MariaDB [hellodb]> select @@tx_isolation;
+-----------------+
| @@tx_isolation  |
+-----------------+
| REPEATABLE-READ |
+-----------------+
SET tx_isolation="read-uncommitted | read-committed | repeatable-read | serializabile"
  1. 服务器选项 transaction-isolation
# /etc/my.cnf
transaction-isolation=read-uncommitted | read-committed | repeatable-read | serializabile
1 row in set (0.00 sec)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容