标签:balance insert 之间 安全 多个 相互 auto 级别 account
1.概念:
* 如果一个包含多个步骤的业务操作,被事务管理,,那么这些操作要么同时成功,要么同时失败。
配个图:
2. 操作:commit
1. 开启事务:start transaction;
2. 回滚:rollback;
3. 提交:commit;
创建账户表:
-- 创建数据表 CREATE TABLE account ( id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(10), balance DOUBLE ); INSERT INTO account (NAME, balance) VALUES (‘张三‘, 1000), (‘李四‘, 1000); |
4. MySQL数据库中事务默认自动提交
* 事务提交的两种方式:
* 自动提交:
* MySQL是自动提交
* 手动提交:
* 需要开启事务,再提交
* 一条DML(增删改)语句自动提交一次事务
* 修改事务的默认提交方式
* 查看:select @@autocommit; 1 代表自动提交 0 代表手动提交
* 修改默认提交方式:set @@autocommit = 0;
手动提交不写commit语句,临时会修改数据,但不会持久化数据。
2. 事务的四大特征:(面试)
1. 原子性:是不可分割的最小操作单位,要么成功,要么失败。
2. 持久性:当事务提交或回滚后,数据库会持久化保存数据。
3.隔离性:多个事物之间,相互独立。
4.一致性:事务操作前后,数据总量不变。
3.事务的隔离级别:
* 概念:多个事物之间是隔离的,相互独立的,但是多个事务同时操作同一批数据,则会引发 一些问题,设置不同的隔离级别就可以解决这些问题
* 存在的问题:
1. 脏读:一个事物,读取到另一个事物中中没有提交数据。
2.不可重复度(虚度):在同一个事物中,两次读取的数据不一样。
3.幻读:一个实务操作(DML)数据表中所有记录,另一个事务添加了一条数据,则第一个事务查询不到自己的修改。
* 隔离级别:
1. read uncommitted: 读未提交
* 产生问题:脏读,不可重复,幻读
2. read committed: 读已提交
* 产生问题: 不可重复,幻读
3. repeatable read:可重复度(默认)
* 产生幻读
4. serializable:串行化
* 可解决所有问题
注意:隔离级别从小到大安全性会越来越高,但是效率越来越低。
* 查询隔离级别
* 数据库查询隔离级别
select @@tx_isolation
* 数据库设置隔离级别
set global transaction isolation level 级别字符串;
标签:balance insert 之间 安全 多个 相互 auto 级别 account
原文地址:https://www.cnblogs.com/fangyulu/p/10294493.html