Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.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
MySQL锁表替代方案(用于存储过程)_Mysql_Sql_Stored Procedures - Fatal编程技术网

MySQL锁表替代方案(用于存储过程)

MySQL锁表替代方案(用于存储过程),mysql,sql,stored-procedures,Mysql,Sql,Stored Procedures,有人知道在执行存储过程时锁定表的方法吗 我的过程是一个简单的聚合过程,它将数据加载到另一个表中。完成后,它应该将原始表上的所有选定行更新为聚合的aggregated 对我来说,在这个过程中锁定原始表似乎很重要,这样我就可以避免这样的情况:在这个过程中,新行将被插入到第一个表中,但在这个过程结束时,它们仍将被计算为聚合的(因为这个更新部分适用于整个表) 有什么建议吗?谢谢 您不需要锁 如果您的数据库是Innodb,请使用事务 对于不支持事务的Myisam表,可以将聚合字段与三个值一起使用:未聚合、

有人知道在执行存储过程时锁定表的方法吗

我的过程是一个简单的聚合过程,它将数据加载到另一个表中。完成后,它应该将原始表上的所有选定行更新为聚合的
aggregated

对我来说,在这个过程中锁定原始表似乎很重要,这样我就可以避免这样的情况:在这个过程中,新行将被插入到第一个表中,但在这个过程结束时,它们仍将被计算为聚合的(因为这个更新部分适用于整个表)

有什么建议吗?谢谢

您不需要锁

如果您的数据库是Innodb,请使用事务

对于不支持事务的Myisam表,可以将聚合字段与三个值一起使用:未聚合、聚合、聚合

  • 存储过程将所有选定的行标记为聚合
  • 将标记的行复制到新表中
  • 完成后,将行更新为聚合行
  • 如果发生错误,请重置该值
    请您解释一下,在这种情况下,您将如何实施交易?我考虑的是:启动事务>选择>插入(聚合)>更新>提交。我说得对吗?