我试图在表格X上运行INSERT
语句每次SELECT
来自表Y的任何记录都在那里,我只能使用MySQL来实现这一点吗?
触发器之类的东西?
答案 0 :(得分:24)
简短回答是否定。触发器由INSERT
,UPDATE
或DELETE
触发。
这个(奇怪的)senario的可能解决方案:
SELECT
表X。SELECT
X INSERT
或其他)。答案 1 :(得分:4)
不 - 你不能在SELECT上触发 - 你必须创建一个存储过程(或任何其他类型的日志文件工具 - 比如日志文件或者什么),你隐式调用任何查询语句 - 如果您创建一个调用查询的包装器,调用日志记录并返回查询结果。
答案 2 :(得分:0)
如果您尝试使用表X记录表Y上SELECT
个查询的顺序(一种相当常见的查询记录设置),则可以简单地反转操作顺序并运行{{1 }}先查询 ,然后 运行您的INSERT
查询。
那样,您不必担心用SELECT
链接两个语句:如果服务器在两个语句之间崩溃,则您已经记录了您对第一个语句的关心,以及TRIGGER
查询运行或失败对基础数据库没有影响。
如果您不记录查询,也许您正试图将表Y用作任务队列-我当时在这种情况下苦苦挣扎,导致我进入该线程-并且您希望首先锁定哪个会话查询Y返回行中的所有其他会话,因此您可以对结果执行一些操作,然后将输出插入表X。在这种情况下,只需向表Y添加一些日志记录功能。
例如,您可以向Y添加一个“所有者”列,然后将SELECT
查询的WHERE
部分附加到SELECT
语句上,运行它,然后修改您的UPDATE
查询以仅显示您的SELECT
声明的结果:
UPDATE
...对foo做一些工作,然后...
UPDATE Y SET owner = 'me' WHERE task = 'new' AND owner IS NULL;
SELECT foo FROM Y WHERE task = 'new' AND owner = 'me';
同样,关键是先登录 ,然后进行查询。