模具东莞网站建设,个人外贸网站,潜江资讯网一手机版,南宁住房和城乡建设局网站目录
概念
什么是事务?
理解事务
事务操作
事务的特性
事务的隔离级别
事务的隔离级别-操作
概念
数据库存储引擎是数据库底层软件组织#xff0c;数据库管理系统#xff08;DBMS#xff09;使用数据引擎进行创建、查
询、更新和删除数据。 不同的存储引擎提供…目录
概念
什么是事务?
理解事务
事务操作
事务的特性
事务的隔离级别
事务的隔离级别-操作
概念
数据库存储引擎是数据库底层软件组织数据库管理系统DBMS使用数据引擎进行创建、查
询、更新和删除数据。 不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能。现在
许多不同的数据库管理系统都支持多种不同的数据引擎。MySQL的核心就是存储引擎。 用户可以
根据不同的需求为数据表选择不同的存储引擎 可以使用 SHOW ENGINES 命令 可以查看Mysql的
所有执行引擎我们 可以到 默认的执行引擎是innoDB 支持事务行级锁定和外键。
什么是事务?
在MySQL中的事务Transaction是由存储引擎实现的在MySQL中只有InnoDB存储引擎才
支持事务。 事务处理可以用来维护数据库的完整性保证成批的 SQL 语句要么全部执行要么全
部不执行。 事务用来管理 DDL、DML、DCL 操作比如 insert,update,delete 语句默认是自动
提交的。 理解事务
在银行转账时必须保证转账绝对安全这时需要事务参与: 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;事务的特性 事务的隔离级别
solate顾名思义就是将事务与另一个事务隔离开为什么要隔离呢如果一个事务正在操作的数
据被另一个事务修改或删除了最后的执行结果可能无法达到预期。如果没有隔离性还会导致其他
问题。 读未提交(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;