2013-05-28 4 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'); 
    ... 
    

    В это случае таблица разблокирует между утверждениями и единственным способом правильно «запереть» таблица использовать 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; 
    
Смежные вопросы