DDL和DML事务相关使用注意

本文探讨了一项需求:使用事务来控制数据表结构的操作(如增加或删除字段)。经过评估发现,由于数据表结构操作(DDL)与数据操作(DML)级别不同,且DDL操作会隐性提交事务,因此在同一个事务中混合使用DDL和DML会导致错误。通过SQLite实验验证了这一结论。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在最近遇到一个需求,需要将对数据表结构的操作(增加字段、删除字段)等用事务做控制。在对这个需求做评估时,考虑到数据表结构操作和数据操作属于不同的级别操作(DML和DDL),就初步回绝了需求。然后又在sqlite中做了以下实验:

begin transaction;

create table test(a int);

insert into test(a) values(1);
alter table test add b int;
insert into test values(2,2);

commit transaction;

执行这个语句块,直接报错。提示是:不能在一个事务内开另一个事务。

原因就是,DDL属于隐性提交事务,在执行前数据库内部会开一个事务。但在语句块中已经显式开启了事务,导致内部事务开启失败。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值