您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關(guān)執(zhí)行數(shù)據(jù)庫'INSERT'操作時事務無法回滾怎么辦的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
在使用Spring聲明式事務的時候,發(fā)現(xiàn)在做”update”時,出現(xiàn)異常事務可以回滾,但是在執(zhí)行”insert”的時候,后臺日志雖然顯示回滾了,但是數(shù)據(jù)卻已經(jīng)保存到了數(shù)據(jù)庫中,本來以為是哪里配置出錯了,后來卻發(fā)現(xiàn)是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)
到了這里原因就了然了,創(chuàng)建表時默認為”MyISAM”,關(guān)于”MyISAM”和”InnoDB”及其他的各種存儲引擎的區(qū)別這里就不展開了,我們只需要將我們的表的存儲引擎改為”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”。。。
感謝各位的閱讀!關(guān)于“執(zhí)行數(shù)據(jù)庫'INSERT'操作時事務無法回滾怎么辦”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。