首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql中表上的多个触发器

问mysql中表上的多个触发器
EN

Stack Overflow用户
提问于 2013-08-30 21:54:27
回答 2查看 477关注 0票数 0

在mysql中可以在同一个表上创建多个触发器吗?我想在同一个表上创建两个触发器,如果possible.Below是我尝试过的,但是它不起作用。

标签为table1的表上的第一个触发器,

代码语言:javascript
复制
Create trigger update_table BEFORE INSERT ON table1 
FOR EACH ROW SET NEW.Academic_Year='2010'

标签为table1的表上的第二个触发器,

代码语言:javascript
复制
Create trigger update_table BEFORE INSERT ON table1
FOR EACH ROW SET NEW.Fees='20.00'

以上两个触发器分别工作,但不工作时,他们是together.Please的任何帮助,感谢提前感谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-01 00:54:57

如果我从您的注释中正确理解,您需要某种类型的默认表,您将在触发器和值中使用这些表,管理员可以在这些表中进行更改。

defaults表模式可能如下所示

代码语言:javascript
复制
CREATE TABLE defaults
(`id` int not null auto_increment primary key, 
 `fees` decimal(12, 2) not null default 0, 
 `academic_year` int not null default 0, 
 `created` datetime not null
)

这个想法是存储所有的缺省值以及时间戳,当它们生效时。为了更改默认值,只需插入带有新默认值的新行即可。

代码语言:javascript
复制
INSERT INTO Defaults (`fees`, `academic_year`, `created`)
VALUES (25.00, 2011, NOW())

现在扳机

代码语言:javascript
复制
DELIMITER $$
CREATE TRIGGER tg_bi_table1
BEFORE INSERT ON Table1
FOR EACH ROW
BEGIN
  DECLARE _fees DECIMAL(12, 2);
  DECLARE _year INT;

  SELECT fees, academic_year 
    INTO _fees, _year
    FROM defaults
   ORDER BY id DESC
   LIMIT 1;

   SET NEW.fees          = _fees, 
       NEW.academic_year = _year;
END$$
DELIMITER ;

这是SQLFiddle演示

票数 2
EN

Stack Overflow用户

发布于 2013-08-30 22:07:57

对于相同的操作,您不能有多个触发器。但是,您可以在开始和结束之间包装所有内容:

代码语言:javascript
复制
DELIMITER $$
Create trigger update_table BEFORE INSERT ON table1
FOR EACH ROW 
BEGIN
SET NEW.Academic_Year='2010';
SET NEW.Fees='20.00';
END $$

请注意,您必须使用分隔符。

一个触发器指向另一个,并认为可能很快变得凌乱。触发器很难调试,特别是当它们相互触发时。只需确保您知道在为数据库编写触发器和过程时正在做什么。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18542003

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档