2011-01-09 68 views
2

我知道使用InnoDB表,事務是自動提交的,但是我明白這意味着一個語句?例如,我想檢查用戶是否存在於表中,如果不存在,請創建它。但是存在競爭條件。我相信在執行select之前使用事務,將確保表保持不變,直到後續的插入和事務被提交。你怎麼用MySQLdb和Python來做到這一點?你如何創建一個事務跨越MySQLdb中的多個Python語句?

回答

4

存在一個SELECT ... FOR UPDATE,它允許您鎖定另一個事務被讀取的行,但我相信這些記錄必須首先存在。然後你可以像你說的那樣做,並且在你提交之後解鎖它。

在你的情況下,我認爲最好的辦法是簡單地設置用戶名的唯一約束,並嘗試插入。如果你得到一個關鍵的異常,你可以通知用戶該名稱已被佔用。

+0

你在說這個:http://dev.mysql.com/doc/refman/5.0/en/innodb-locking-reads.html – fncomp 2011-01-12 08:34:33

相關問題