我最近開始了一個相當大的Web項目,它將使用MySQL作爲數據庫。我對MySQL並不完全熟悉,但我足夠了解如何進行簡單查詢,並且通常可以完成所需的所有工作。在MySQL中鎖定
有人告訴我,在寫信給他們之前需要鎖定我的桌子嗎?這是每次都需要嗎?當然,MySQL會具有某種內置功能來處理數據庫的併發讀寫操作?
總之,什麼時候應該使用鎖定,我應該怎麼做呢?
我最近開始了一個相當大的Web項目,它將使用MySQL作爲數據庫。我對MySQL並不完全熟悉,但我足夠了解如何進行簡單查詢,並且通常可以完成所需的所有工作。在MySQL中鎖定
有人告訴我,在寫信給他們之前需要鎖定我的桌子嗎?這是每次都需要嗎?當然,MySQL會具有某種內置功能來處理數據庫的併發讀寫操作?
總之,什麼時候應該使用鎖定,我應該怎麼做呢?
這裏是何時以及如何實現鎖定一個很好的解釋:http://www.brainbell.com/tutors/php/php_mysql/When_and_how_to_lock_tables.html
按照埃爾雅博的建議:
如果你正在做一個關選擇querys,也不會是一個問題。 從文章:需要
鎖定,只有當 開發腳本,首先從數據庫中讀取一個 價值以後又寫 該值的數據庫。
良好的聯繫,但我認爲你也應該總結說「你可能不需要擔心它」:) – 2010-12-20 01:51:46
謝謝,這是我一直在尋找。所以我只需要在進行事務時顯式鎖定表,而不是單個查詢? – DanielGibbs 2010-12-20 01:54:45
@DanieL:如果你需要一個'transaction',然後執行'transaction'。然後,鎖沒有任何關係。 – zerkms 2010-12-20 02:06:02
總之,不要用myisam來代替innodb。當你要插入,更新或刪除(CRUD)行做:
start transaction;
insert into users (username) values ('f00');
...
commit; -- or rollback
,當你想讀取行只選擇他們:
select user_id, username from users;
希望這有助於:)
+1 InnoDB。作爲Postgres用戶很長時間,當我第一次使用MySQL時,*不支持數據庫的基本功能(例如MyISAM不支持事務,外鍵和檢查約束)的引擎的存在是令人震驚的。 – 2010-12-20 01:51:11
您還應該指出,只有在您要執行*多於一條語句並且需要確保它們全部失敗或全部成功或確保數據在事務期間保持一致時才需要事務。 – 2010-12-20 01:52:51
爲什麼不你只是解釋你的問題? 「有人告訴我,在寫信給他們之前,我需要鎖定我的桌子」---沒有任何特別的問題,這句話是不正確的。 – zerkms 2010-12-20 01:07:00
鎖是自動使用標準的SQL。如果你的表需要被鎖定,MySQL會爲你做。 – 2010-12-20 01:19:12
@zerkms我的一位同事告訴我,在寫信給他們之前,確保我鎖定了我的桌子。我不確定爲什麼或者這是否有必要,這就是我問的原因。 – DanielGibbs 2010-12-20 01:52:40