mysql - MySql 可以在多个表上回滚 sql 事务吗?

标签 mysql transactions

我已经搜索了 MySql 文档,但一无所获。我试过这个......回滚似乎没有取消在 table1 和 table2 中所做的插入

Start Transaction;

INSERT INTO Table1(field1,field2) VALUES (value1, value2);

INSERT INTO Table2(field3,field4) VALUES (value3, value4);

INSERT INTO Table3(field5,field6) VALUES (value5, value6);

Rollback;

更新:感谢所有回答,但我忘了告诉你第三条语句抛出异常(违反约束)。

最佳答案

是的,但仅限于支持事务的表。要检查您的表是否兼容,请执行此操作

SELECT table_name
     , engine
  FROM information_schema.tables t
 WHERE t.table_name IN('Table1','Table2','Table3');

如果它们中的任何一个是MyISAM,它们就不是事务兼容的。您需要将它们全部更改为 InnoDB

ALTER TABLE [TableName] ENGINE=InnoDB;

但请注意 - MyISAM 支持 InnoDB 不支持的某些功能,例如全文搜索。

关于mysql - MySql 可以在多个表上回滚 sql 事务吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3094398/

相关文章:

mysql - 选择哪个哈希函数来索引 mysql 上的 uuid 字符串? md5,crc64 或 fnv

php - sql 查询,然后如果满足条件则刷新 Div - 也许是 Ajax?

java - 如何在 Spring + JPA + Hibernate 设置中获得 "start of transaction"时间戳?

Java "Aggregate"事务

.net - 'StackExchange.Redis.ITransaction' 不包含 'StringSetAsync' 的定义

mysql - 如何根据价格确定哪个客户购买了商品

java - 通过 Web 服务可以传输的最大数据量是多少?

mysql - 在 MySQL 中使用 left Join 进行最佳拟合数据重试

sql-server - SQL Server 是否将 Select...Insert 查询包装到隐式事务中?

sql - PSQL "BEGIN TRANSACTION"语句错误