业务场景往往需要针对多张表同时进行操作(比如转账业务包括A账户减少、B账户增加、转账明细记录),为了保证数据库的完整性,必须确保这三个操作要么都成功、要么都失败,若出现部分成功部分失败,将导致数据库数据出现紊乱。而为了避免这个问题的出现,就需要事务处理来实现。
1 事务
并非所有引擎都支持事务处理,比如常见的执行引擎中MyISAM不支持,InnoDB支持
事务特点
原子性,事务是最小单位,不可再分
一致性,同一事务中的DML操作(事务支持DML操作,包括INSERT,UPDATE,DELETE),必须保证同时成功或同时失败
隔离性,不同事务之间具有隔离性
持久性,事务提交之后对系统的影响是永久的
2 操作
事务主要操作有两种:ROLLBACK(回滚,撤销当前操作)和COMMIT(提交当前操作)。
2.1 ROLLBACK(回滚)
CREATE TABLE IF NOT EXISTS account (acct_num INT, amount DECIMAL(10,2));
CREATE TABLE IF NOT EXISTS account_records(acct_num INT,records INT);
TRUNCATE TABLE account;
TRUNCATE TABLE account_records;
-- 创建表(若表不存在)并清空
INSERT INTO account VALUES(137,14.98),(141,1937.50),(97,-100.00);
INSERT INTO account_records VALUES(137,1),(141,1),(97,1);
-- 插入数据
SELECT * FROM account;
SELECT * FROM account_records;
-- 事务执行前数据情况
START TRANSACTION;
DELETE FROM account;
DELETE FROM account_records;
ROLLBACK;
-- 执行表清空操作之后回滚
-- START TRANSACTION用于表示事务的开始,ROLLBACK表示事务回滚
SELECT * FROM account;
SELECT * FROM account_records;
-- 验证事务回滚情况复制
2.2 COMMIT(提交)
CREATE TABLE IF NOT EXISTS account (acct_num INT, amount DECIMAL(10,2));
CREATE TABLE IF NOT EXISTS account_records(acct_num INT,records INT);
TRUNCATE TABLE account;
TRUNCATE TABLE account_records;
-- 创建表(若表不存在)并清空
INSERT INTO account VALUES(137,14.98),(141,1937.50),(97,-100.00);
INSERT INTO account_records VALUES(137,1),(141,1),(97,1);
-- 插入数据
SELECT * FROM account;
SELECT * FROM account_records;
-- 事务执行前数据情况
START TRANSACTION;
DELETE FROM account;
DELETE FROM account_records;
COMMIT;
-- 执行表清空操作之后提交
-- START TRANSACTION用于表示事务的开始,COMMIT表示事务提交
SELECT * FROM account;
SELECT * FROM account_records;
-- 验证事务提交情况复制
文章转载自lin在路上,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
2025年4月中国数据库流行度排行榜:OB高分复登顶,崖山稳驭撼十强
墨天轮编辑部
1254次阅读
2025-04-09 15:33:27
2025年3月国产数据库大事记
墨天轮编辑部
719次阅读
2025-04-03 15:21:16
2025年3月国产数据库中标情况一览:TDSQL大单622万、GaussDB大单581万……
通讯员
518次阅读
2025-04-10 15:35:48
征文大赛 |「码」上数据库—— KWDB 2025 创作者计划启动
KaiwuDB
453次阅读
2025-04-01 20:42:12
数据库,没有关税却有壁垒
多明戈教你玩狼人杀
402次阅读
2025-04-11 09:38:42
优炫数据库成功应用于国家电投集团青海海南州新能源电厂!
优炫软件
380次阅读
2025-03-21 10:34:08
天津市政府数据库框采结果公布!
通讯员
304次阅读
2025-04-10 12:32:35
最近我为什么不写评论国产数据库的文章了
白鳝的洞穴
297次阅读
2025-04-07 09:44:54
从HaloDB体验到国产数据库兼容性
多明戈教你玩狼人杀
266次阅读
2025-04-07 09:36:17
OceanBase 单机版发布,针对中小规模业务场景
通讯员
230次阅读
2025-03-28 12:01:19