【问题标题】:Is it possible to create a trigger which is triggered on any insert in any table?是否可以创建在任何表中的任何插入时触发的触发器?
【发布时间】:2013-09-20 17:36:24
【问题描述】:

我想创建一个 MySQL 触发器,该触发器在任何表中的任何行插入之前运行。那可能吗?另一种方法是在为每个表插入之前创建一个触发器,但这还不够好:它很混​​乱而且它不处理新表,所以我肯定想编写一个 MySQL 触发器,它在任何插入到任何表时触发排。那可能吗?如果是这样,怎么做? (我在文档中找不到任何参考)

【问题讨论】:

  • 简短的回答是肯定的。看看这个:stackoverflow.com/questions/17145185/how-to-write-mysql-trigger
  • @user2065377,链接问题的答案正在解决这个问题吗?如何?我希望在任何插入任何表时触发触发器。
  • 我不相信这是可能的或可取的。除非它是您使用一次然后丢弃的私有数据库,否则这种基于数据库的操作会在某个时候咬住您。
  • @Twelfth,我想找到一些依赖项、CFD 和 AR,然后为它们生成约束。生成约束没有问题(我在我的 Java 代码中生成了一个 MySQL 过程),但我想应用这些约束,因此如果任何插入或更新违反任何规则,则会引发错误。为了简化问题,我只询问了这个问题中的插入。但生成的约束只有在阻止违反规则的插入时才有用。
  • Oracle 是对的……触发器可以像在表上一样容易地驻留在模式和数据库中,而 MySQL 的触发器可以完成的工作似乎相对温和。抱歉,Lajos,根据我的研究,我在这里唯一能找到的就是使用存储过程或排序等解决方法,这样用户就不再直接访问表。如果你找到答案,我会很好奇

标签: mysql sql triggers


【解决方案1】:

用一个代替触发器 例如:在 sql server 中

create trigger name
on table_name
instead of insert 
as
begin
if exists9select count(*) from inserted as i
join table_name as t
on i.id-t.id
group by i.id
having count(*) >1)
begin
raiseerror "duplicate category names npt allowsed"
end
else
insert into table_name (col1,col2)
select col1,col2 from inserted

`create trigger name
on table_name
instead of insert 
as
begin
if exists9select count(*) from inserted as i
join table_name as t
on i.id-t.id
group by i.id
having count(*) >1)
begin
raise error "duplicate category names not allowed"
end
else
insert into table_name (col1,col2)
select col1,col2 from inserted
end
go

`

【讨论】:

  • 这个问题显然是关于 MySQL 的,即使是 SQL Server,答案也无法解决所提出的问题(它要求插入触发器,该触发器“独立”于任何表工作)
【解决方案2】:

不,这是不可能的,我问过 MySQL 的人,他们向我保证 MySQL 目前不支持这个功能,甚至没有计划很快推出,所以不,完全没有希望,这就是答案.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-02
    • 2014-08-09
    • 2013-12-03
    • 1970-01-01
    相关资源
    最近更新 更多