我知道使用InnoDB表,事務是自動提交的,但是我明白這意味着一個語句?例如,我想檢查用戶是否存在於表中,如果不存在,請創建它。但是存在競爭條件。我相信在執行select之前使用事務,將確保表保持不變,直到後續的插入和事務被提交。你怎麼用MySQLdb和Python來做到這一點?你如何創建一個事務跨越MySQLdb中的多個Python語句?
2
A
回答
4
存在一個SELECT ... FOR UPDATE,它允許您鎖定另一個事務被讀取的行,但我相信這些記錄必須首先存在。然後你可以像你說的那樣做,並且在你提交之後解鎖它。
在你的情況下,我認爲最好的辦法是簡單地設置用戶名的唯一約束,並嘗試插入。如果你得到一個關鍵的異常,你可以通知用戶該名稱已被佔用。
2
理論上,您可以按照Python's DB API中的定義disable auto-commit,做一個Two Phase Commit transaction。這個功能在野外似乎有點難以實現。 SQLAlchemy seems to include support它在MySQL上,所以它是可能的。
相關問題
- 1. WHERE跨越多個UNION ALL語句
- 2. 如何創建跨越多個文件的CommonJS模塊?
- 3. 如何正確創建跨越多個頁面的HTML表單
- 4. 如何在Zurb基金會中創建一個跨越多行的圖像?
- 5. 如何創建/在一個事務中
- 6. 創建一個多和SQL語句
- 7. 跨越多個列
- 8. Microsoft.Practices.EnterpriseLibrary.Data:在一個事務中執行多個語句
- 9. 如何用一個以上的SUM()創建一個mySQL語句?
- 10. SQL事務與多個語句
- 11. 如何在截斷的mysqldb中執行一個事務
- 12. 如何創建一個跨越HTML頁面的整個寬度的按鈕?
- 13. SQLite3 - 在一個語句中創建多個表
- 14. 如何在另外兩個中間創建一個div來跨越多行,如表中的rowspan
- 15. 如何在python中創建OR語句?
- 16. 如何跨越多個OrientDB頂點
- 17. 創建跨越多個模型的嚮導式窗體
- 18. 我可以創建跨越多個工作表的jXLS模板
- 19. 你將如何創建一個在Python中重試的選項?
- 20. 你如何在Python中創建一個新的線程?
- 21. 如何在javafx中創建一個跨越全高的textarea和側欄?
- 22. 你如何強制圖形跨越MATLAB中的多個顯示器?
- 23. 你可以在一個SQL語句中返回多個COUNT嗎?
- 24. WPF跨越多個元件
- 25. 如何在UITableView的switch語句中創建一個變量?
- 26. 的SQLQuery - 在跨越兩個表的語句返回0結果
- 27. 在Mybatis遷移工具中的一個事務中運行多個mysql語句
- 28. if語句中的多個事件js
- 29. 將bcp放入一個事務中與另一個tsql語句
- 30. 如何從跨越多個頁面的php創建MsWord(.doc)文件(使用html)
你在說這個:http://dev.mysql.com/doc/refman/5.0/en/innodb-locking-reads.html – fncomp 2011-01-12 08:34:33