Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.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中对select语句启动触发器吗?_Mysql_Database_Triggers - Fatal编程技术网

我可以在mysql中对select语句启动触发器吗?

我可以在mysql中对select语句启动触发器吗?,mysql,database,triggers,Mysql,Database,Triggers,每次我从表Y中选择任何记录时,我都试图在表X上运行INSERT语句。我是否可以仅使用MySQL来实现这一点 类似触发器的东西?不-您不能在选择时触发-您必须创建一个存储过程或任何其他类型的日志记录功能-例如日志文件或任何查询语句中隐式调用的任何东西-如果您创建一个调用查询的包装器,调用日志记录并返回查询结果。简短的回答是否。触发器由INSERT、UPDATE或DELETE触发 可能的解决办法。非常罕见的情况: 首先,编写一些存储过程 做你想要的选择 表十。 然后,限制所有用户仅使用 这些存储过程

每次我从表Y中选择任何记录时,我都试图在表X上运行INSERT语句。我是否可以仅使用MySQL来实现这一点


类似触发器的东西?

不-您不能在选择时触发-您必须创建一个存储过程或任何其他类型的日志记录功能-例如日志文件或任何查询语句中隐式调用的任何东西-如果您创建一个调用查询的包装器,调用日志记录并返回查询结果。

简短的回答是否。触发器由INSERT、UPDATE或DELETE触发

可能的解决办法。非常罕见的情况:

首先,编写一些存储过程 做你想要的选择 表十。 然后,限制所有用户仅使用 这些存储过程不存在 允许他们直接使用“在表上选择” 十,。 然后将存储过程更改为 还调用一个存储过程 执行所需的操作 插入或任何东西。
如果您试图使用表X记录表Y上SELECT查询的顺序(这是一种相当常见的查询记录设置),只需颠倒操作顺序,先运行INSERT查询,然后运行SELECT查询即可

这样,您就不必担心用触发器链接这两条语句:如果服务器在这两条语句之间崩溃,那么您已经用第一条语句记录了您所关心的内容,并且SELECT查询是否运行对基础数据库没有影响

如果您没有记录查询,也许您正试图使用表Y作为任务队列—我一直在努力解决的情况将我引向了这个线程—您希望哪个会话查询Y首先将所有其他会话锁定在返回的行之外,以便您可以对结果执行一些操作并将输出插入表X。在这种情况下,只需向表Y添加一些日志功能

例如,您可以将所有者列添加到Y,然后将SELECT查询的WHERE部分固定到UPDATE语句上,运行它,然后修改SELECT查询以仅显示更新声明的结果:

…对foo做些工作,然后

INSERT INTO X (output) VALUES ('awesomeness');

同样,关键是先记录,然后查询。

简短的回答是否。触发器是通过INSERT、UPDATE或DELETE触发的。更新select上的每一行会导致批量操作的性能问题。最好是专门为有意义的操作更新最后一次访问的时间戳。我想用奇怪的特征来反驳一下。具体来说,如果一个人正在访问受控信息,例如我们想要控制数据库中存储的文档被访问或打印的次数的制造标签,这正是我想要的功能。如果信息控制是错误的,我不想是对的。@DannyHolstein好的,怪异不是最好的选择。“稀有”听起来更好吗?我应该为该功能提出一个功能请求。我尝试用一个视图和存储函数来实现该解决方案,当尝试向跟踪访问的表中插入时,它不能,因为该表已经打开并被锁定。@DannyHolstein您可以发布一个新的问题,以及您的实现和发生的问题,并添加一个指向该表的链接。有点,但我在使用多行方面受到限制。这是一个只能查看视图的哑打印机驱动程序。我确实想出了一个解决办法,可以在预定的时间间隔内删除条目,但我在Bradly打印机软件中发现了更多的bug,使得它完全无法使用,而且没有人想修复它。
INSERT INTO X (output) VALUES ('awesomeness');