2011-05-30 49 views
1

我有以下腳本...爲什麼在MySQL 5中運行腳本時啓動事務和回滾無法回滾?

START TRANSACTION; 

INSERT INTO `Image` (`id`,`created`,`deleted`,`fileName`,`used`) VALUES (-114, NULL, NULL, 'c21_1.jpg', NULL); 
INSERT INTO `Image` (`id`,`created`,`deleted`,`fileName`,`used`) VALUES (-115, NULL, NULL, 'c21_2.jpg', NULL); 
INSERT INTO `Image` (`id`,`created`,`deleted`,`fileName`,`used`) VALUES (-116, NULL, NULL, 'c21_3.jpg', NULL); 
INSERT INTO `Image` (`id`,`created`,`deleted`,`fileName`,`used`) VALUES (-117, NULL, NULL, 'c21_4.gif', NULL); 
INSERT INTO `Image` (`id`,`created`,`deleted`,`fileName`,`used`) VALUES (-118, NULL, NULL, 'c21_5.gif', NULL); 
INSERT INTO `Image` (`id`,`created`,`deleted`,`fileName`,`used`) VALUES (-119, NULL, NULL, 'c21_6.gif', NULL); 
INSERT INTO `Image` (`id`,`created`,`deleted`,`fileName`,`used`) VALUES (-120, NULL, NULL, 'c21_7.gif', NULL); 
INSERT INTO `Image` (`id`,`created`,`deleted`,`fileName`,`used`) VALUES (-121, NULL, NULL, 'AIRMILES_MIN_RBLUE.png', NULL); 
INSERT INTO `Image` (`id`,`created`,`deleted`,`fileName`,`used`) VALUES (-122, NULL, NULL, 'c21_logo_commercial-WHT.png', NULL); 
INSERT INTO `Image` (`id`,`created`,`deleted`,`fileName`,`used`) VALUES (-123, NULL, NULL, 'c21_logo_fhe_pms124-WHT.png', NULL); 
INSERT INTO `Image` (`id`,`created`,`deleted`,`fileName`,`used`) VALUES (-124, NULL, NULL, 'CENTURY-21-Logo-Century21.png', NULL); 
INSERT INTO `Image` (`id`,`created`,`deleted`,`fileName`,`used`) VALUES (-125, NULL, NULL, 'Easter-Seals-Logos-2005-008-1.png', NULL); 
INSERT INTO `Image` (`id`,`created`,`deleted`,`fileName`,`used`) VALUES (-126, NULL, NULL, 'Easter-Seals-Logos-2005-008-2.png', NULL); 
INSERT INTO `Image` (`id`,`created`,`deleted`,`fileName`,`used`) VALUES (-127, NULL, NULL, 'kids-to-camp-EN.png', NULL); 



INSERT INTO `AgencyImage` (`agency_id`,`image_id`) VALUES (1, -115); 
INSERT INTO `AgencyImage` (`agency_id`,`image_id`) VALUES (1, -116); 
INSERT INTO `AgencyImage` (`agency_id`,`image_id`) VALUES (1, -117); 
INSERT INTO `AgencyImage` (`agency_id`,`image_id`) VALUES (1, -118); 
INSERT INTO `AgencyImage` (`agency_id`,`image_id`) VALUES (1, -119); 
INSERT INTO `AgencyImage` (`agency_id`,`image_id`) VALUES (1, -120); 
INSERT INTO `AgencyImage` (`agency_id`,`image_id`) VALUES (1, -121); 
INSERT INTO `AgencyImage` (`agency_id`,`image_id`) VALUES (1, -122); 
INSERT INTO `AgencyImage` (`agency_id`,`image_id`) VALUES (1, -123); 
INSERT INTO `AgencyImage` (`agency_id`,`image_id`) VALUES (1, -124); 
INSERT INTO `AgencyImage` (`agency_id`,`image_id`) VALUES (1, -125); 
INSERT INTO `AgencyImage` (`agency_id`,`image_id`) VALUES (1, -126); 
INSERT INTO `AgencyImage` (`agency_id`,`image_id`) VALUES (1, -127); 


ROLLBACK; 

我想驗證腳本commiting代碼之前跑了。然而,這是第一次運行它沒有回滾任何東西。

我在做什麼錯?

+0

你爲什麼認爲你做錯了什麼? – Ibu 2011-05-30 22:44:39

+0

因爲如果他在使用事務性存儲引擎(例如InnoDB),那麼在ROLLBACK之後;在底部,這些行將不存在。 – 2011-05-30 22:49:29

+0

國王Skippus,請不要做出愚蠢的評論。 – Johan 2011-05-30 23:11:09

回答

1

它是一個MyISAM表嗎?如果是這樣,如果你想使用交易,你需​​要switch to InnoDB。如果您正在運行PHP之類的查詢,請確保您已關閉autocommit

+0

我正在從內置於IDE中的Intellij查詢工具運行它。 – benstpierre 2011-05-30 22:45:20

+0

創建表格時,請嘗試將ENGINE = InnoDB放在最後。例如:CREATE TABLE(/ *列定義* /)ENGINE = InnoDB;如果可行,那麼以前使用的是非事務性引擎(可能是MyISAM)。我對Intellij一無所知;如果它有用於創建表的GUI,請檢查是否有將它們創建爲InnoDB表而不是MyISAM的選項。我有一個鬼鬼祟祟的懷疑,那就是發生了什麼事。 – 2011-05-30 22:47:11

+0

順便說一下,如果您希望所有表和數據庫默認使用InnoDB而不是MyISAM,以便始終啓用事務,請考慮在my.conf文件中更改默認存儲引擎。 http://dev.mysql.com/doc/refman/5.0/en/server-options.html#option_mysqld_default-storage-engine – 2011-05-30 23:09:00