您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關執行數據庫'INSERT'操作時事務無法回滾怎么辦的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
在使用Spring聲明式事務的時候,發現在做”update”時,出現異常事務可以回滾,但是在執行”insert”的時候,后臺日志雖然顯示回滾了,但是數據卻已經保存到了數據庫中,本來以為是哪里配置出錯了,后來卻發現是Mysql存儲引擎的的問題。我們用的Mysql版本是”5.1.73”,默認存儲引擎是”MyISAM”。
mysql> select version(); +-----------+ | version() | +-----------+ | 5.1.73 | +-----------+ 1 row in set (0.00 sec)
mysql> SHOW ENGINES; +------------+---------+------------------------------------------------------------+--------------+------+------------+ | Engine | Support | Comment | Transactions | XA | Savepoints | +------------+---------+------------------------------------------------------------+--------------+------+------------+ | MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO | | CSV | YES | CSV storage engine | NO | NO | NO | | MyISAM | DEFAULT | Default engine as of MySQL 3.23 with great performance | NO | NO | NO | | InnoDB | YES | Supports transactions, row-level locking, and foreign keys | YES | YES | YES | | MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO | +------------+---------+------------------------------------------------------------+--------------+------+------------+ 5 rows in set (0.00 sec)
到了這里原因就了然了,創建表時默認為”MyISAM”,關于”MyISAM”和”InnoDB”及其他的各種存儲引擎的區別這里就不展開了,我們只需要將我們的表的存儲引擎改為”InnoDB”就可以了。
SHOW TABLE STATUS FROM database; ALTER TABLE table_name ENGINE = InnoDB; mysql> ALTER TABLE table_name ENGINE = InnoDB; Query OK, 8 rows affected (0.03 sec) Records: 8 Duplicates: 0 Warnings: 0
如果是主庫的話,最好是把默認的存儲引擎改為 “InnoDB”。。。
感謝各位的閱讀!關于“執行數據庫'INSERT'操作時事務無法回滾怎么辦”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。