Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 阻止Mysql查询,直到更新_Php_Mysql - Fatal编程技术网

Php 阻止Mysql查询,直到更新

Php 阻止Mysql查询,直到更新,php,mysql,Php,Mysql,我很好奇,有没有办法让查询块(等待)直到插入新行?我可以看到有两种情况导致您提出这个问题: 大批量INSERT语句,即: INSERT INTO mytable (id, name, date) VALUES (1, 'Tom', '2013-01-31'), (2, 'Dick', '2013-02-28'), (3, 'Harry', '2013-03-31'), ... INSERT INTO mytable (id, name, date) VALUES (1, 'To

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

我可以看到有两种情况导致您提出这个问题:

  • 大批量
    INSERT
    语句,即:

    INSERT INTO mytable (id, name, date) VALUES
      (1, 'Tom', '2013-01-31'),
      (2, 'Dick', '2013-02-28'),
      (3, 'Harry', '2013-03-31'),
      ...
    
    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');
    ...
    
    在本例中,MySQL在内部执行锁定,因此您无需执行任何操作。任何需要使用“mytable”的查询都将推迟到插入完成

  • 重复的单个
    插入
    语句,即:

    INSERT INTO mytable (id, name, date) VALUES
      (1, 'Tom', '2013-01-31'),
      (2, 'Dick', '2013-02-28'),
      (3, 'Harry', '2013-03-31'),
      ...
    
    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表。例如:

    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;
    

  • 不太清楚你的意思。可能会有帮助吗?你可以保留更改直到准备提交它们。我想这有点像块…有什么意义?为什么不在插入行后运行查询?这将有助于了解这背后的原因:)据我所知,插入操作将锁定读取操作,直到它们完成不,在表上发生插入之前,不可能有MySQL SELECT查询块查询。@landons,INSERT通常会阻塞,但仅在实际执行INSERT时才会阻塞;很明显,尚未运行的INSERT不会阻塞任何内容。您知道,当注释试图相互回答时,这是一个措词不当的问题。有什么问题吗?数据完整性?等待其他脚本完成execut是否在继续之前执行?如果您执行插入,然后执行选择,它们将按顺序执行,并且您的数据将保持一致。