像PostgreSQL一样在MySQL中锁定表

像PostgreSQL一样在MySQL中锁定表,mysql,sql,transactions,locking,Mysql,Sql,Transactions,Locking,我的问题是,我想插入一个新行,该新行的计算值依赖于在事务的前面执行的select。但要避免并行事务插入相同的计算值 应该通过事务隔离级别SERIALIZABLE来避免此问题。但事实并非如此 我完成了以下步骤: 事务A:开始 事务B:开始 事务A:从tableName中选择max(x) 事务B:从tableName中选择最大(x) 事务B:在tableName(x,pku列)中插入值(max+1,primaryKeyA) 事务A:在tableName(x,PK_列)中插入值(max+1,prima

我的问题是,我想插入一个新行,该新行的计算值依赖于在事务的前面执行的select。但要避免并行事务插入相同的计算值

应该通过事务隔离级别SERIALIZABLE来避免此问题。但事实并非如此

我完成了以下步骤:

  • 事务A:开始
  • 事务B:开始
  • 事务A:从tableName中选择max(x)
  • 事务B:从tableName中选择最大(x)
  • 事务B:在tableName(x,pku列)中插入值(max+1,primaryKeyA)
  • 事务A:在tableName(x,PK_列)中插入值(max+1,primaryKeyB)
  • 事务A:提交
  • 事务B:提交 在此之后,在MySQL中,我有两个具有相同x值的新行,但我希望两个事务中的一个都中止

    在PostgreSQL上,我可以在共享模式下执行一个
    锁定表tableName
    ,这将阻止事务a执行步骤6。在MySQL上,我尝试了下面描述的锁定技术,但没有成功

    有什么建议吗?谢谢。

    我发现了问题。 MySQL工作台不会为每个sql窗口派生新事务。。。。所以我只处理了一笔交易。。。。 使用两个终端连接到服务器后。一切如期进行