电影天堂网站用什么程序做的,wordpress 添加链接地址,烟台做网站哪里好,做网站要源码吗本文主要介绍MySQL事务 文章目录 前言事务定义事务四大特性#xff08;ACID#xff09; 事务操作事务并发问题事务隔离级别 前言
参考链接#xff1a;
链接1链接2
事务定义
事务是一组操作的集合#xff0c;他是一个不可分割的工作单位#xff0c;事务会把所有的操作作… 本文主要介绍MySQL事务 文章目录 前言事务定义事务四大特性ACID 事务操作事务并发问题事务隔离级别 前言
参考链接
链接1链接2
事务定义
事务是一组操作的集合他是一个不可分割的工作单位事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求即这些操作要么同时成功要么同时失败。
MySQL默认事务是自动提交的也就是当执行一条DML(数据操作语言)时MySQL会马上隐式的提交事务。
事务四大特性ACID
原子性Atomicity事务是不可分割的最小操作单元要么全部成功要么全部失败一致性Consistency事务完成时必须使所有的数据都保持一致状态隔离性Isolation数据库系统提供的隔离机制保证事务在不受外部并发操作影响的独立环境下运行持久性Durability事务一旦提交或回滚它对数据库中的数据的改变就是永久的。
事务操作
#表准备
drop table if exists account;
create table account( id int primary key AUTO_INCREMENT comment ID, name varchar(10) comment 姓名, money double(10,2) comment 余额 ) comment 账户表;
insert into account(name, money) VALUES (张三,2000), (李四,2000);基本操作
-- 1. 查询张三账户余额
select * from account where name 张三;-- 2. 将张三账户余额-1000
update account set money money - 1000 where name 张三;
-- 此语句出错后张三钱减少但是李四钱没有增加
模拟sql语句错误-- 3. 将李四账户余额1000
update account set money money 1000 where name 李四;-- 查看事务提交方式
SELECT AUTOCOMMIT;-- 设置事务提交方式1为自动提交0为手动提交该设置只对当前会话有效
SET AUTOCOMMIT 0;-- 提交事务
COMMIT;-- 回滚事务
ROLLBACK;-- 设置手动提交后上面代码改为
select * from account where name 张三;
update account set money money - 1000 where name 张三;
update account set money money 1000 where name 李四;
commit;操作方式二 开启事务 START TRANSACTION 或 BEGIN TRANSACTION; 提交事务 COMMIT; 回滚事务 ROLLBACK;
操作实例
start transaction;
select * from account where name 张三;
update account set money money - 1000 where name 张三;
update account set money money 1000 where name 李四;
commit;事务并发问题 事务隔离级别
高一级的级别提供更强的隔离性。标准允许事务运行在更强的事务隔离级别上。(如在可重复读(REPEATABLE READ)隔离级别上执行提交读(READ COMMITTED)的事务是没有问题的)。 √表示在当前隔离级别下该问题会出现Serializable 性能最低Read uncommitted 性能最高数据安全性最差 #查看事务隔离级别
SELECT TRANSACTION_ISOLATION;#设置事务隔离级别
SET [SESSION|GLOBAL] TRANSACTION ISOLATION LEVEL {READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE}