2013-05-28 38 views
-4

我很好奇,有沒有辦法讓查詢塊(等待),直到插入新行?阻止Mysql查詢,直到更新

+0

不太清楚你的意思。也許[這](http://dev.mysql.com/doc/refman/5.0/en/commit.html)會有幫助嗎?您可以保留更改,直到您準備**提交**爲止。我想這有點像塊... – War10ck

+0

有什麼重點?爲什麼不在插入行後運行查詢?這將有助於瞭解這背後的原因:) –

+0

這是我的理解,插入將鎖定讀取操作,直到他們完成。 – landons

回答

1

有兩種情況下,我可以看到令你提出這個問題:

  1. 大批量INSERT語句,即:

    INSERT INTO mytable (id, name, date) VALUES 
        (1, 'Tom', '2013-01-31'), 
        (2, 'Dick', '2013-02-28'), 
        (3, 'Harry', '2013-03-31'), 
        ... 
    

    在這種情況下,MySQL的鎖定內部,所以你不必做任何事情。任何需要使用「mytable」的查詢都將被推遲到插入完成。

  2. 重複單INSERT語句,即:

    INSERT INTO mytable (id, name, date) VALUES (1, 'Tom', '2013-01-31'); 
    INSERT INTO mytable (id, name, date) VALUES (2, 'Dick', '2013-02-28'); 
    INSERT INTO mytable (id, name, date) VALUES (3, 'Harry', '2013-03-31'); 
    ... 
    

    這種 case語句的唯一途徑之間的表解鎖才能正常「鎖定」表是使用transaction。 [注:myISAM不支持事務,你必須使用InnoDB或BDB表。即:

    START TRANSACTION; 
    INSERT INTO mytable (id, name, date) VALUES (1, 'Tom', '2013-01-31'); 
    INSERT INTO mytable (id, name, date) VALUES (2, 'Dick', '2013-02-28'); 
    INSERT INTO mytable (id, name, date) VALUES (3, 'Harry', '2013-03-31'); 
    ... 
    COMMIT;