当前位置: 首页 > news >正文

网站后台管理系统需求docker做网站

网站后台管理系统需求,docker做网站,qq技术教程wordpress,教育发展基金会网站建设下面我会从“事务是什么”→“为什么需要事务”→“事务的四大特性(ACID)”→“MySQL中怎么用事务”→“常见坑与调试技巧”→“完整实战案例(含代码、输出、讲解)”六个层次,给你一个“看完就能上手”的MySQL事务速查…

下面我会从“事务是什么”→“为什么需要事务”→“事务的四大特性(ACID)”→“MySQL中怎么用事务”→“常见坑与调试技巧”→“完整实战案例(含代码、输出、讲解)”六个层次,给你一个“看完就能上手”的MySQL事务速查手册。所有SQL均在MySQL 8.0验证通过,默认存储引擎InnoDB。


一、事务是什么?
事务(Transaction)是一组要么全部成功、要么全部失败的SQL语句集合
典型场景:银行转账——A扣钱、B加钱两步必须同时成功,否则回滚。


二、为什么需要事务?

  1. 并发场景下避免脏读、不可重复读、幻读
  2. 硬件故障或程序崩溃时保证数据一致性
  3. 业务规则要求“全-or-无”语义

三、ACID 四字口诀

特性解释MySQL实现机制
原子性 Atomicity全部成功或全部回滚undo log(回滚日志)
一致性 Consistency事务前后数据库状态合法(约束、触发器等)约束+undo/redo
隔离性 Isolation并发事务互不干扰锁+MVCC
持久性 Durability提交后永久生效redo log(重做日志)+双写缓冲

四、MySQL事务语法速查

  1. 基本流程
START TRANSACTION;   -- 或 BEGIN;
-- DML语句1…n
COMMIT;              -- 提交
ROLLBACK;            -- 回滚
  1. 自动提交开关
SELECT @@autocommit;   -- 1表示自动提交,0表示手动
SET autocommit=0;      -- 当前会话关闭自动提交
  1. 保存点(部分回滚)
START TRANSACTION;
SAVEPOINT sp1;
DELETE FROM user WHERE id=1;
SAVEPOINT sp2;
UPDATE user SET money=100 WHERE id=2;
ROLLBACK TO sp2;   -- 只回滚到sp2,保留sp1之前的操作
  1. 隐式提交(陷阱)
    DDL(CREATE/ALTER/DROP)、锁表、ANALYZE、LOAD DATA等语句会强制提交当前事务

五、隔离级别与并发问题

隔离级别脏读不可重复读幻读加锁读语句
READ UNCOMMITTED
READ COMMITTED×Oracle默认
REPEATABLE READ×××*MySQL默认
SERIALIZABLE×××锁表

*InnoDB通过间隙锁+MVCC在REPEATABLE READ下也解决了幻读,因此大多数业务无需跳到SERIALIZABLE。


六、完整实战:银行转账(含异常回滚演示)

  1. 表结构
CREATE DATABASE IF NOT EXISTS demo_tx;
USE demo_tx;
CREATE TABLE account(id INT PRIMARY KEY,name VARCHAR(20) UNIQUE,money DECIMAL(10,2) NOT NULL CHECK (money>=0)
) ENGINE=InnoDB;INSERT INTO account VALUES
(1,'Alice',1000),
(2,'Bob',1000);
  1. 存储过程:安全转账
DELIMITER $$
CREATE PROCEDURE sp_transfer(IN from_id INT,IN to_id   INT,IN amount  DECIMAL(10,2)
)
BEGINDECLARE EXIT HANDLER FOR SQLEXCEPTIONBEGINROLLBACK;SELECT 'Transfer failed, rolled back!' AS msg;END;START TRANSACTION;-- 1. 检查余额IF (SELECT money FROM account WHERE id=from_id) < amount THENSIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='Insufficient balance';END IF;-- 2. 扣钱UPDATE account SET money = money - amount WHERE id=from_id;-- 3. 加钱UPDATE account SET money = money + amount WHERE id=to_id;COMMIT;SELECT 'Transfer succeeded!' AS msg;
END$$
DELIMITER ;
  1. 测试场景
    | 步骤 | 会话A(正常转账) | 会话B(并发读) | 结果 |
    |—|—|—|—|
    | T1 | CALL sp_transfer(1,2,200); | | Alice:800, Bob:1200 |
    | T2 | | SELECT * FROM account; | 读到提交后最新值(READ COMMITTED) |
    | T3 | 故意制造异常:扣完钱后插入违反唯一约束 | | 触发EXIT HANDLER,自动ROLLBACK,双方余额不变 |

  2. 观察undo/redo(可验证)

-- 查看当前活跃事务
SELECT * FROM information_schema.innodb_trx\G-- 查看锁等待
SELECT * FROM sys.innodb_lock_waits\G

七、常见坑与调试技巧

  1. 忘记COMMIT,导致长事务——SELECT * FROM information_schema.processlist WHERE time>10;
  2. 自动提交=1,START TRANSACTION后仍被隐式提交——用SELECT @@autocommit;确认
  3. DDL打断事务——把建索引、加字段操作放在业务低峰期
  4. 死锁——InnoDB自动回滚代价最小的事务;应用层捕获1213 Deadlock错误重试即可
  5. 批量插入性能——用START TRANSACTION; ...bulk inserts... COMMIT;比逐条autocommit快1~2个数量级

八、一句话总结
“BEGIN → 改数据 → 没问题COMMIT,出问题ROLLBACK”是事务90%的工作量;剩下10%在于选对隔离级别、避免长事务、监控锁等待。把本文的存储过程模板复制到测试库跑一遍,你就拥有了可落地的MySQL事务最佳实践。

http://www.dtcms.com/a/567628.html

相关文章:

  • 郴州网站制作公司电话景安一个空间怎么做多个网站
  • 与网站建设有关的课程和知识点wordpress 163 授权码
  • 怎么做网站海外运营推广wordpress关键词添加
  • 自己做头像的网站漫画工地接活应该去哪个平台
  • 免费域名试用注册网站保亭县住房城市建设局网站
  • 网站开发公司的职责wordpress最好的中文主题
  • 快速网站建设社交类网站开发
  • 网站研发表情包生成器在线制作
  • 衡阳市建设工程质量监督站网站今晚24时油价调整最新消息
  • 浏览国外网站dnsaso关键词搜索优化
  • 太原网站建设地图code编程网站
  • 做外商备案的网站网页设计背景图
  • 专业做网站的公司哪家更专业国内网页设计公司前十名
  • 网站备案查询平台烟台网站制作维护
  • 网站建设与管理找工作网络管理系统官网
  • 无锡网站seo外包中国房地产十大排名
  • html5网站设计搜索引擎优化步骤
  • 做产品网站要备案吗动态效果酷炫的网站
  • 数码科技网站营销式网站制作
  • 深圳地产网站制作公司建网站推广效果怎么样
  • php做网站的分站深度网营销型网站建设
  • wordpress 设置缩略图佛山做网络优化的公司
  • 深圳网站建设制作设计平台wordpress设置vip
  • html静态页面怎么放在网站上个人适合做的网站
  • asp网站模板源码大连金州新区规划建设局网站
  • 多城市分站网站建设网站没有后台登陆文件夹
  • 门户网站有什么特点上海网站优化哪家好
  • 中国哪些网站做软装姐妹直播
  • 淘掌门官方网站一个产品的宣传和推广方案
  • 淮安网站设计公司crm管理系统有哪些