我可以在ALTER TABLE中使用事务吗?

我可以在ALTER TABLE中使用事务吗?,第1张

我可以在ALTER TABLE中使用事务吗?

MySQL中的某些语句(最著名的是DDL)会在执行 之前 导致隐式提交 并且无法回滚-这样可以防止先前的DML更改也被回滚。

本节中列出的语句(及其任何同义词) 隐式结束当前会话中任何活动的事务,就好像您在执行该语句之前执行了COMMIT一样 。从MySQL
5.5.3开始,大多数这些语句在执行后也会引起隐式提交;有关更多详细信息,请参见本节末尾。

由于

ALTER TABLE
是受影响的语句之一,因此将SQL批处理有效地视为:

START TRANSACTION;INSERT INTO `users` VALUES(NULL, 'User A', 'user.a@example.com', '4', 'User A');COMMIT; -- prevents ROLLBACK of insert(s), even if DDL failsALTER TABLE `users` CHANGE `level` `level` TINYINT(3) UNSIGNED NOT NULL;

建议的解决方案是使DDL和DML分开。该文档说:

您应设计[DML]事务,使其不包含此类[DDL]语句。如果您在无法回滚的事务中提早发出了一个语句,然后又有另一个语句失败,则在这种情况下,通过发出ROLLBACK语句将无法回滚事务的全部效果。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4889655.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-11
下一篇 2022-11-11

发表评论

登录后才能评论

评论列表(0条)

保存