mysql存储引擎:
查看引擎方式:SHOW ENGINES;
在存储引擎里面不是所有存储引擎都支持事物的,innodb在5.0版本以后是支持事物的,而myisam和memory是不支持事物的。
mysql事务特性ACID:
原子性: 事务不可分割,要么全部成功要么全部失败,捆绑式执行。
一致性: 必须保持数据一致,如转账的话一边加一千一边减一千,总金额为
两千,(一个数据的一致状态到另一个数据的一致状态)不管怎么操作
总数据一定是不会变的。
隔离性: 一个事务在执行的时候是不能被其他事物干扰的,其他事物要想执行可以加锁
持久性: 一个事务一但执行就不能被修改,一但提交到数据库数据将被永久修改。
事务创建 :
隐式事物 : 比如我们平时执行的insert、update、delete。他都会默认帮我们开启隐式事物的。
显示事物 : 事务具有明显的开启和结束的标记。但是前提是必须先设置自动提交功能为禁用
开启流程:
自动提交功能关闭
set autocommit=0;
开启事物
start transaction;
编写SQL语句增删改查......
成功:commit;提交事物
失败:rollback;事物回滚
事务隔离机制:
脏读 :针对的是查询,指两个事务同时进行数据操作,读取到的数据不一样。
不可重复读:指数据读取一次就不能在重复进行读取了,避免两次数据读取的不一致。
幻读:幻读一般是指添加和删除,表示第一次读取到了数据以后第二次读取到的数据多了
一行或者少了一行,这就叫幻读。
事务隔离级别:
脏读 不可重复读 幻读
read uncommitted √ √ √
read committed × √ √
repeatable read × × √
serializable × × ×
mysql中默认的是 repeatable read 隔离级别
查看隔离级别命令: select @@tx_isolation;
设置隔离级别命令: set session|global transaction isolation level 隔离级别;