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

深圳企业网站制作中心推广网上国网app

深圳企业网站制作中心,推广网上国网app,黄冈建设局网站首页,门窗企业网站建设一、什么是事务? 事务(Transaction) 是数据库操作的最小逻辑单元,它由一组不可分割的SQL操作组成。事务的核心目标是确保多个操作要么全部成功,要么全部失败,从而维护数据的完整性。例如,银行转…

一、什么是事务?

事务(Transaction) 是数据库操作的最小逻辑单元,它由一组不可分割的SQL操作组成。事务的核心目标是确保多个操作要么全部成功,要么全部失败,从而维护数据的完整性。例如,银行转账场景中,张三给李四转账1000元,必须同时完成“张三账户减1000”和“李四账户加1000”两个操作,否则就会导致数据不一致。


二、事务的四大特性(ACID)

特性说明示例
原子性事务中的操作要么全部成功,要么全部回滚转账时,张三扣款失败则李四加款也回滚
一致性事务执行前后数据库状态保持一致转账前后,张三和李四的总金额保持不变
隔离性并发事务之间互不干扰A事务转账时,B事务查询到的余额不受未提交的转账影响
持久性事务提交后,数据永久保存到数据库转账成功后即使系统宕机,数据也不会丢失

三、事务操作:手动控制与自动提交

1. 默认行为:自动提交

MySQL默认开启自动提交(autocommit=1),每条SQL语句独立为一个事务,执行后立即提交。

-- 查看当前提交模式
SELECT @@autocommit;  -- 返回1表示自动提交

2. 手动控制事务

通过以下命令显式控制事务流程:

-- 开启事务
START TRANSACTION;-- 执行操作(如转账)
UPDATE account SET money = money - 1000 WHERE name = '张三';
UPDATE account SET money = money + 1000 WHERE name = '李四';-- 提交事务(持久化更改)
COMMIT;-- 回滚事务(撤销所有操作)
ROLLBACK;


四、事务中的错误处理

1. 使用SIGNAL抛出异常

在存储过程中,可通过SIGNAL主动触发错误并回滚:

DELIMITER $$
CREATE PROCEDURE transfer()
BEGINDECLARE EXIT HANDLER FOR SQLEXCEPTION ROLLBACK; -- 异常时回滚START TRANSACTION;-- 检查余额IF (SELECT money FROM account WHERE name='张三') < 1000 THENSIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '余额不足';END IF;-- 执行转账UPDATE account SET money = money - 1000 WHERE name = '张三';UPDATE account SET money = money + 1000 WHERE name = '李四';COMMIT;
END $$
DELIMITER ;

2. 使用ROW_COUNT()验证操作

通过检查受影响行数判断操作是否成功:

START TRANSACTION;
-- 扣款操作
UPDATE account SET money = money - 1000 WHERE name = '张三' AND money >= 1000;
IF ROW_COUNT() = 0 THENROLLBACK;
ELSECOMMIT;
END IF;

五、存储过程与触发器中的事务

1. 存储过程的事务控制

存储过程可显式管理事务,适合复杂业务逻辑:

DELIMITER $$
CREATE PROCEDURE transfer_funds(IN from_id INT, IN to_id INT, IN amount DECIMAL)
BEGINDECLARE EXIT HANDLER FOR SQLEXCEPTION ROLLBACK;START TRANSACTION;-- 扣款UPDATE account SET money = money - amount WHERE id = from_id;-- 加款UPDATE account SET money = money + amount WHERE id = to_id;COMMIT;
END $$
DELIMITER ;

2. 触发器与事务的关系

  • 触发器不能显式控制事务,但错误会触发外层事务回滚。

  • 示例:禁止账户余额为负

CREATE TRIGGER check_balance
BEFORE UPDATE ON account
FOR EACH ROW
BEGINIF NEW.money < 0 THENSIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '余额不能为负';END IF;
END;


六、实战案例:转账事务的完整实现

1. 数据准备

CREATE TABLE account (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(20),money DECIMAL(10,2)
);
INSERT INTO account (name, money) VALUES ('张三', 2000), ('李四', 2000);

2. 实现转账逻辑

DELIMITER $$
CREATE PROCEDURE secure_transfer(IN from_name VARCHAR(20),IN to_name VARCHAR(20),IN amount DECIMAL(10,2)
)
BEGINDECLARE EXIT HANDLER FOR SQLEXCEPTION ROLLBACK;START TRANSACTION;-- 检查余额IF (SELECT money FROM account WHERE name = from_name) < amount THENSIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '余额不足';END IF;-- 执行转账UPDATE account SET money = money - amount WHERE name = from_name;UPDATE account SET money = money + amount WHERE name = to_name;COMMIT;
END $$
DELIMITER ;-- 调用示例
CALL secure_transfer('张三', '李四', 1000);

七、事务的最佳实践

  1. 短事务原则:尽量减小事务范围,避免长时间锁定资源。

  2. 合理设置隔离级别:默认REPEATABLE READ适用于多数场景,高并发时可考虑READ COMMITTED

  3. 避免嵌套事务:MySQL不支持嵌套事务,复杂逻辑用保存点(SAVEPOINT)替代。

  4. 监控与优化:使用SHOW ENGINE INNODB STATUS分析事务锁情况。


文章转载自:

http://LY4tFlZ3.xcjwm.cn
http://2DcouZOJ.xcjwm.cn
http://3nZXoP7t.xcjwm.cn
http://iEY1yYLv.xcjwm.cn
http://JxuYts7n.xcjwm.cn
http://pvjPisje.xcjwm.cn
http://hwtZnM40.xcjwm.cn
http://xpJbsUca.xcjwm.cn
http://LXG0nhsd.xcjwm.cn
http://ebGi8FRM.xcjwm.cn
http://Vy5obTJP.xcjwm.cn
http://vClD518F.xcjwm.cn
http://WDbIhzcL.xcjwm.cn
http://xZmOMTJe.xcjwm.cn
http://chnKNWO6.xcjwm.cn
http://42h7s90C.xcjwm.cn
http://7707ozab.xcjwm.cn
http://Pun3Q54d.xcjwm.cn
http://ARGTzmKF.xcjwm.cn
http://uJbgQfMC.xcjwm.cn
http://A7wQ74Un.xcjwm.cn
http://Faf4EJZe.xcjwm.cn
http://rHCWQO10.xcjwm.cn
http://Nl7Iodj0.xcjwm.cn
http://AIeBzvX0.xcjwm.cn
http://LFPuIYnN.xcjwm.cn
http://hbs6h1Vb.xcjwm.cn
http://2HrjlfVm.xcjwm.cn
http://dHsv6cgU.xcjwm.cn
http://i5F6QmWB.xcjwm.cn
http://www.dtcms.com/wzjs/650343.html

相关文章:

  • 怎样申请免费的网站空间策划公司英文
  • 渭南网站建设费用明细自己动手做网站教程
  • 西昌有哪些做网站的公司wordpress怎么安装 centos
  • 优质的做网站旅游网站建设的重要性
  • 怎么做素材设计网站网站要怎么运营
  • 河南省住房城乡与建设厅网站首页seo优化流程
  • 网站开发资金预算企业门户网站实现
  • 哔哩哔哩网站4 3比例怎么做阜阳市住房和城乡建设部网站
  • led灯网站建设案例wordpress网页模板制作
  • 互联网资源整合平台专注软件优化分享的网站
  • 做网站友情链接都写什么装饰网站建设的方案ppt
  • 惠州专门做网站凡科网站的ftp
  • 网站开发教程大全优化系统功能
  • 网站后台里有网页代码没wordpress配置数据库文件夹
  • 烟台专业做网站公司百度电话号码查询
  • 禁止同ip网站查询个人智慧团建网站
  • 网站dns刷新wordpress收费阅读
  • 怎么建立企业网站平台好玩的网页游戏知乎
  • 做影视网站赚钱江西省网站开发
  • 网站付费推广渠道网站建设需要的准备
  • 网站系统开发怎么做河南自助建站seo公司
  • 家庭电影网站建设成都网站网络公司
  • 岚山区建设局网站不要钱做网站软件
  • 网站的建设有什么好处践行新使命忠诚保大庆网站建设
  • 厦门有没网站建设的公司网页设计制作个人简历代码
  • 网站备案 价格宝山网站建设哪家好
  • 30天网站建设实录光盘云盘seo外链发布技巧
  • 上海十大公关公司排名百度关键词优化有效果吗
  • 专做婚礼logo的网站node做网站后台
  • 企业建设网站的主要目的中企动力免费做网站