MySQL学习日志十二,事务

一、事务

要么都成功,要么都失败

四个特性:

原子性:不可再分割的工作单位,一个事务中要么都完成,要么都不完成

一致性:从一致的状态转换到另一个一致的状态,事务前后的数据保持一致

隔离性:屏蔽其他的事务,专注自己的事务,互不干扰

持久性:存储在数据库的数据是永久的,事务一旦提交就不可逆,事务未提交就返回到原样

隔离产生的问题

  • 脏读:指一个事务读取到了另一个事务未提交的数据

  • 不可重复性

  • 虚读

set autocommit=1;-- 设置自动提交事务开启,mysql的事务默认是开启的 
set autocommit=0;-- 设置自动提交事务关闭
-- 手动关闭自动提交事务
set autocommit=0;
-- 开启事务
START transaction; 
-- 如果数据没有问题就提交事务,提交成功,数据一旦提交就持久化
commit;
-- 如果数据出错就不提交事务,回滚到原来的数据
rollback;
-- 再次设置事务开启状态
set autocommit=1;
-- 可以设置保存点
SAVEPOINT ;
-- 可以设置删除保存点
release SAVEPOINT;
-- 查看自动提交开启状态
show variables like 'autocommit';

模拟账户转账

-- 创建一个shop数据库,记录工资
CREATE DATABASE SHOP CHARACTER SET UTF8 COLLATE UTF8_GENERAL_CI 
USE SHOP

-- 查询建立数据库表的语句
SHOW CREATE TABLE account;

CREATE TABLE `account` (
  `id` int NOT NULL,
  `name` varchar(255) DEFAULT NULL,
  `money` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3

SELECT *FROM account;

-- 关闭自动提交事务
SET autocommit=0;
-- 开启一个事务
start transaction;
-- 插入sql语句
UPDATE account SET money=money-500 WHERE `name`='A';
UPDATE account SET money=money+500 WHERE `name`='B';
-- 数据没问题就提交事务,数据一旦提交,就持久化到数据库
COMMIT;
-- 数据有问题就回滚
ROLLBACK;
-- 开启自动提交变成默认状态
set autocommit=1;
posted @ 2023-05-14 22:20  YE-  阅读(11)  评论(0编辑  收藏  举报