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

山东川畅科技网站设计网站搜索

山东川畅科技网站设计,网站搜索,怎么自己做网站版面设计,妈妈在家里做女视频网站MySQL 事务(Transaction)详解 1. 什么是事务? 事务(Transaction)是一组要么全部执行,要么全部回滚的 SQL 语句,用于保证数据一致性。事务一般用于银行转账、订单支付等操作,确保多个…

MySQL 事务(Transaction)详解


1. 什么是事务?

事务(Transaction)是一组要么全部执行,要么全部回滚的 SQL 语句,用于保证数据一致性。事务一般用于银行转账、订单支付等操作,确保多个步骤要么全部成功,要么全部失败。

事务的特点(ACID):

  1. 原子性(Atomicity):事务是一个不可分割的最小操作单位,要么全部执行,要么全部回滚。
  2. 一致性(Consistency):事务执行后,数据库必须保持一致状态。
  3. 隔离性(Isolation):多个事务并发执行时,相互之间不会影响。
  4. 持久性(Durability):事务提交后,对数据库的更改是永久性的。

2. 事务的基本操作

在 MySQL 中,事务通常用 START TRANSACTIONBEGIN 开始,COMMIT 提交,ROLLBACK 回滚:

-- 开启事务
START TRANSACTION;-- 执行 SQL 语句
UPDATE accounts SET balance = balance - 100 WHERE user_id = 1;
UPDATE accounts SET balance = balance + 100 WHERE user_id = 2;-- 提交事务(数据永久生效)
COMMIT;

如果中途发生错误,可以回滚:

-- 开启事务
START TRANSACTION;-- 执行 SQL 语句
UPDATE accounts SET balance = balance - 100 WHERE user_id = 1;
-- 发生错误,回滚事务
ROLLBACK;

3. 事务的隔离级别

MySQL 事务的隔离级别影响并发事务的执行方式,常见隔离级别:

隔离级别脏读不可重复读幻读默认值
READ UNCOMMITTED(读未提交)❌ 可能❌ 可能❌ 可能
READ COMMITTED(读已提交)✅ 避免❌ 可能❌ 可能
REPEATABLE READ(可重复读)✅ 避免✅ 避免❌ 可能✅(MySQL 默认)
SERIALIZABLE(串行化)✅ 避免✅ 避免✅ 避免

如何设置隔离级别?

SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;

4. 事务的常见问题

(1)脏读(Dirty Read)

发生在 READ UNCOMMITTED 级别:一个事务能读取另一个未提交事务的数据,如果对方回滚,读取的数据就是无效的。

-- 事务 A
START TRANSACTION;
UPDATE accounts SET balance = 500 WHERE user_id = 1;
-- 此时事务 A 还未提交-- 事务 B
SELECT balance FROM accounts WHERE user_id = 1; -- 读取到了未提交的值

解决方案:使用 READ COMMITTED 以上隔离级别。


(2)不可重复读(Non-Repeatable Read)

发生在 READ COMMITTED 级别:同一个事务多次读取数据,发现数据不一致(另一事务修改了数据并提交)。

-- 事务 A
START TRANSACTION;
SELECT balance FROM accounts WHERE user_id = 1; -- 读取值 500-- 事务 B(修改后提交)
UPDATE accounts SET balance = 600 WHERE user_id = 1;
COMMIT;-- 事务 A(再次读取)
SELECT balance FROM accounts WHERE user_id = 1; -- 发现变成 600

解决方案:使用 REPEATABLE READ 以上隔离级别。


(3)幻读(Phantom Read)

发生在 REPEATABLE READ 级别:事务中多次查询,发现新增的行。

-- 事务 A
START TRANSACTION;
SELECT COUNT(*) FROM orders WHERE user_id = 1; -- 10 条数据-- 事务 B(插入新数据并提交)
INSERT INTO orders(user_id, amount) VALUES (1, 100);
COMMIT;-- 事务 A(再次查询)
SELECT COUNT(*) FROM orders WHERE user_id = 1; -- 发现 11 条数据

解决方案:使用 SERIALIZABLE 级别,防止新数据插入。


5. InnoDB 与 MyISAM 事务支持

存储引擎事务支持适用场景
InnoDB✅ 支持事务适合高并发、数据一致性要求高的系统,如金融、订单
MyISAM❌ 不支持事务适合读取操作多的场景,如 CMS 系统

如何查看表的存储引擎?

SHOW TABLE STATUS WHERE Name = 'my_table';

6. MySQL 事务最佳实践

  1. 尽量使用 InnoDB,保证事务支持。
  2. 缩小事务范围,避免长时间锁表影响性能。
  3. 避免事务嵌套,减少锁竞争。
  4. 使用索引优化查询,减少锁的范围,提高并发效率。
  5. 发生错误时记得 ROLLBACK,确保数据一致性。
  6. 适当选择隔离级别,根据业务需求权衡并发性和数据一致性。

7. 事务相关的 SQL 语句

操作SQL 语句
开启事务START TRANSACTION;BEGIN;
提交事务COMMIT;
回滚事务ROLLBACK;
设置隔离级别SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
查看当前事务隔离级别SELECT @@TRANSACTION_ISOLATION;

8. 总结

  • 事务保证 ACID,保证数据库的一致性。
  • MySQL 事务隔离级别决定数据并发访问时的行为,REPEATABLE READ 是 MySQL 默认隔离级别。
  • 事务的三大问题:脏读、不可重复读、幻读,可通过不同的隔离级别解决。
  • InnoDB 支持事务,MyISAM 不支持
  • 务必在事务结束后 COMMITROLLBACK,防止事务长时间占用资源。

http://www.dtcms.com/wzjs/295283.html

相关文章:

  • wordpress主要菜单搜狗搜索排名优化
  • asp化妆品网站源码吉林seo基础
  • 做网站的品牌公司购物网站页面设计
  • 有没有只做软装方案收设计费的网站智能优化网站
  • flash网站设计教程友情链接检查
  • 西安市建设局网站代做百度首页排名
  • 网站建设太金手指六六二五好用吗
  • 网站全局搜索如何做html网页制作网站
  • 手机网站报价单模板下载电商代运营公司100强
  • php mysql开发网站开发在线超级外链工具
  • 哪个网站上做ppt比较好看百度热搜榜今日头条排名
  • 手机商城oppo重庆seo俱乐部联系方式
  • 河南高端网站高端网站建设武汉官网优化公司
  • 删除网站栏目营销网站定制公司
  • 大型网站开发语言广州seo优化费用
  • 查企业资质上什么网站百度移动端模拟点击排名
  • 网站设计与制作说明seo建站系统
  • 烟台百度网站建设推广外贸网站建设平台
  • 成都青白江网站建设太原seo排名
  • 东莞企业网站设计排名百度seo排名培训
  • 怎么知道一个网站是哪家公司做的今日头条军事新闻
  • 免费养殖网站模板长沙网络推广软件
  • 网站开发和推广的不同关键词投放
  • 广州建网站的网络公司网络营销方案总结
  • vps自带ie浏览器不能访问网站营销工具
  • 网站支持ipv6怎么做获取排名
  • 游戏网站 模板收录查询站长工具
  • 翻译网站平台建设常德网站建设公司
  • 记事本做网站格式新闻网站排行榜
  • 没认证的网站做黄站百度手机下载安装