繁体   English   中英

如何检查验证SQL查询已在事务中运行?

[英]How to check verify that SQL query was ran in transaction?

我有一个简单的用例要解决。 假设有人告诉您“嘿,这组特定的查询不是事务性的!” 而您的工作就是拒绝该声明。 怎么可以这样呢?

假设:

  • 用户可以通过触发“单击一个魔术按钮”来重现此内容,例如说以下3个INSERTs
  • 我们有权访问mysql client和所有特权
  • 我们无权访问应用程序的代码库,因此无法进行集成测试来从代码角度验证这一点
  • 我们正在将MySQL服务器与InnoDb一起使用
  • 我们可以根据需要调整MySQL配置(慢速查询等)

在以下输出中有一个交易部分:

SHOW ENGINE INNODB STATUS\G

看起来像(那是从我的本地MySQL当前不运行任何查询):

TRANSACTIONS
------------
Trx id counter 900
Purge done for trx's n:o < 0 undo n:o < 0
History list length 0
LIST OF TRANSACTIONS FOR EACH SESSION:
---TRANSACTION 0, not started
MySQL thread id 47, OS thread handle 0x7fc8b85d3700, query id 120 localhost root
SHOW ENGINE INNODB STATUS

我不知道您是否可以主动监视此信息,以便在执行3次插入操作时就可以准确看到它。 您可能可以在这里使用您的最后一个项目符号(使用慢速查询)...

另外,MySQL具有命令计数器。 可以通过以下方式访问此计数器:

SHOW GLOBAL STATUS LIKE "COM\\_%"

每次执行命令都会增加与其关联的计数器。 与事务相关的计数器是Com_beginCom_commitCom_rollback ,因此您可以执行代码并监视这些计数器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM