mysql_query("START TRANSACTION");
mysql_query("UPDATE foo = 'bar'");
die();
die()
之前,我可以COMMIT
或ROLLBACK
停止交易。看看我的表,看起來更新不會發生,但如果我稍後在另一個腳本中運行查詢,他們仍然是該初始事務的一部分嗎?直到我COMMIT
或ROLLBACK
交易仍然「開放」?
mysql_query("START TRANSACTION");
mysql_query("UPDATE foo = 'bar'");
die();
die()
之前,我可以COMMIT
或ROLLBACK
停止交易。看看我的表,看起來更新不會發生,但如果我稍後在另一個腳本中運行查詢,他們仍然是該初始事務的一部分嗎?直到我COMMIT
或ROLLBACK
交易仍然「開放」?
如果死亡連接到mysql然後是,交易是關閉的。如果你剛剛離開交易掛起,但你會遇到麻煩。
我會建議確保事務和提交在相同的mysql_query中,如果在所有人類可能的情況下確保它實際發生。
這取決於您的序列化級別。如果事務既沒有提交也沒有回滾,它應該在一段時間後超時並回滾到DB中。但在此之前,這是一個未完成的事務,可能會導致其他不可序列化事務中的選擇不一致。依賴於它的level:
返回一致的值根據http://www.php.net/manual/en/function.mysql-close客戶.php: 「通常不需要使用mysql_close(),因爲在腳本執行結束時,非持久性的打開鏈接會自動關閉。「 由於die()結束腳本的執行,我會假設這意味着數據庫連接已關閉? – Matthew 2010-01-18 16:24:11
不幸的是,我沒有使用mysqli,所以我不能一次做多個查詢。 – Matthew 2010-01-18 16:45:49
這是正確的,我只是想知道你是否真的會徹底忠實於你的交易被打開後總是死去。我的意思是,你真的會在真實生活場景中死去多久?這就是爲什麼我提到你可能不應該依靠die()來爲你關閉交易。 – 2010-01-19 05:55:31