网站建设有哪些困难,网站设计目的与规划,平面设计证书考证官网,wordpress ajax 搜索MySQL 中的事务是由存储引擎实现的。在 MySQL 中#xff0c;只有 InnoDB 存储引擎支持事务。事务处理可用于维护数据库的完整性#xff0c;确保批处理的 SQL 语句要么执行要么根本不执行。事务用于管理 DDL、DML 和 DCL 操作#xff0c;例如插入、更新和删除语句#xff0c…MySQL 中的事务是由存储引擎实现的。在 MySQL 中只有 InnoDB 存储引擎支持事务。事务处理可用于维护数据库的完整性确保批处理的 SQL 语句要么执行要么根本不执行。事务用于管理 DDL、DML 和 DCL 操作例如插入、更新和删除语句这些语句默认是自动提交的。 例如在银行转账时必须保证转账绝对安全这时需要事务参与 update account set money money - 200 where id 1;
update account set money money 200 where id 2;假如在第一次update之后出现了意外、异常没有执行第二次update这时转账会出现异常。
一、操作
MySQL的事务操作主要有以下三种
1. 开启事务Start Transaction
任何DML语句insert、update、delete被执行标志着事务的开启。
BEGIN;
-- 或
START TRANSACTION;
2. 提交事务Commit Transaction
成功完成后所有DML语句操作历史记录和底层硬盘数据将同步一次。
COMMIT;
3. 回滚事务Rollback Transaction
失败结束时清除所有DML语句操作历史记录。
ROLLBACK;
之前所有的SQL操作其实都是有事务的只是MySQL自动帮我们完成了。 每次执行 SQL 时MySQL 都会自动为我们提交事务。 因此如果要手动控制事务就必须关闭MySQL的事务自动提交。
在 MySQL 中直接使用 SET 来改变 MySQL 的自动提交模式
set autocommit0; --禁止自动提交
set autocommit1; --开启自动提交 create database if not exists mydb12_transcation;
use mydb12_transcation;
-- 创建账户表
create table account(id int primary key, -- 账户idname varchar(20), -- 账户名money double -- 金额
);-- 插入数据
insert into account values(1,zhangsan,1000);
insert into account values(2,lisi,1000);-- 设置MySQL的事务为手动提交(关闭自动提交)
select autocommit;
set autocommit 0;-- 模拟账户转账
-- 开启事务
begin;
update account set money money - 200 where name zhangsan;
update account set money money 200 where name lisi;
-- 提交事务
commit;-- 如果转账中的任何一条出现问题则回滚事务
rollback;二、特性 三、隔离级别
隔离Isolate顾名思义就是将一个事务与另一个事务隔离开来为什么要隔离呢 如果一个事务正在操作的数据被另一个事务修改或删除最终的执行结果可能不符合预期。 不这样做可能会导致其他问题。 读未提交Read uncommitted一个事务可以读取另一个未提交事务的数据。在最底层任何情况下都没有保证会造成脏读。
读已提交Read committed一个事务只有在另一个事务提交后才能读取数据这样可以避免脏读导致不可重复读。
可重复读Repeatable read即在读取数据时事务启动不再允许修改操作可以避免脏读和不可重复读的发生但会造成幻读。
串行Serializable是最高的事务隔离级别。在这个层次下事务是串行和顺序执行的可以避免脏读、不可重复读和幻读。但是这种事务隔离级别效率低对数据库性能消耗较大所以一般不使用。
MySQL 的默认隔离级别是Repeatable read。 -- 查看隔离级别
show variables like %isolation%; /*
设置隔离级别
set session transaction isolation level 级别字符串
级别字符串read uncommitted、read committed、repeatable read、serializable
*/-- 设置read uncommitted
set session transaction isolation level read uncommitted;-- 设置read committed
set session transaction isolation level read committed;-- 设置repeatable read
set session transaction isolation level repeatable read;-- 设置serializable
set session transaction isolation level serializable;