-4

我很好奇,有没有办法让查询阻塞(等待)直到插入新行?

4

1 回答 1

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');
    ...
    

    这种情况下,表在语句之间解锁,正确“锁定”表的唯一方法是使用事务。[注意:myISAM 不支持事务,您必须使用 InnoDB 或 BDB 表。IE:

    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;
    
于 2013-05-28T19:15:09.990 回答