我想在从表Y选择任何记录时,在表X上运行一个INSERT语句,有没有使用仅限于MySQL的方法来实现这一点?类似于触发器吗?
简短的答案是不行。触发器只有在进行INSERT
、UPDATE
或DELETE
操作时才会被触发。
以下是针对这种罕见情况的可能解决方案:
SELECT
操作。SELECT
。INSERT
)的存储过程。不行 - 你不能对SELECT触发器进行触发 - 你必须创建一个存储过程(或任何其他类型的日志记录设施 - 如日志文件或任何其他设备),在任何查询语句上隐式调用它 - 如果你创建一个调用查询、调用日志记录并返回查询结果的包装器,会更容易。
SELECT
查询顺序(这是一个相当常见的查询记录设置),可以简单地颠倒操作顺序并先运行 INSERT
查询,然后再运行 SELECT
查询。这样,您就不需要担心使用 TRIGGER
将两个语句链接起来:如果服务器在两个语句之间崩溃,则您已经使用第一个语句记录了您所关心的内容,并且无论 SELECT
查询是否运行或失败,都不会影响底层数据库。 SELECT
查询的 WHERE
部分附加到 UPDATE
语句上,运行它,然后修改 SELECT
查询以仅显示由 UPDATE
声明的结果。UPDATE Y SET owner = 'me' WHERE task = 'new' AND owner IS NULL;
SELECT foo FROM Y WHERE task = 'new' AND owner = 'me';
...do some work on foo, then...
INSERT INTO X (output) VALUES ('awesomeness');
关键是先记录日志,然后再查询。
INSERT
、UPDATE
或DELETE
时被触发。 - ypercubeᵀᴹ