Cla*_*key 7 mysql transaction truncate rollback
我想TRUNCATE和INSERT数据到MySQL的InnoDB表。
我想确保如果事务中的任何语句失败,数据都不会受到影响。
如果出现故障,我不能有一个空的或损坏的表。
这就是我打算这样做的方式。
BEGIN TRANSACTIONTRUNCATE TABLE table_nameINSERT INTO table_nameCOMMIT然后我了解到这TRUNCATE TABLE table_name 会导致隐式 COMMIT,这使得整个交易毫无意义。
然后我TRUNCATE TABLE table_name用一种DELETE FROM table_name方法替换了,这并不理想 - 但这也会导致隐式 COMMIT!
DROP TABLE table_name并且CREATE TABLE table_name还会导致隐式 COMMIT!
什么方法/逻辑最适合执行我想要做的事情?
使用运行在 Windows Server 2008 R2 上的 MySQL 5.6.17 64 位服务器
由于 TRUNCATE TABLE 执行隐式提交,因此不要使用它。
只要表没有外键,你可以像这样快速完成:
CREATE TABLE mytable_new LIKE mytable;
RENAME TABLE mytable TO mytable_old,mytable_new TO mytable;
INSERT INTO mytable ... ;
Run Code Online (Sandbox Code Playgroud)
如果 INSERT 成功,则运行此
DROP TABLE mytable_old;
Run Code Online (Sandbox Code Playgroud)
如果 INSERT 回滚,只需恢复
RENAME TABLE mytable TO mytable_zap,mytable_old TO mytable;
DROP TABLE mytable_zap;
Run Code Online (Sandbox Code Playgroud)
试一试 !!!