我可以在 TRIGGER 中创建一个 MYSQL TRIGGER WITH 或条件吗

Posted

技术标签:

【中文标题】我可以在 TRIGGER 中创建一个 MYSQL TRIGGER WITH 或条件吗【英文标题】:Can I create a MYSQL TRIGGER WITH or condition in TRIGGER 【发布时间】:2017-12-18 06:34:30 【问题描述】:

我可以创建一个 MYSQL 带 OR 条件的触发器

创建或替换触发器名称 在插入之前更新删除

喜欢这个(下面是一个 ORACLE 触发器):

CREATE OR REPLACE TRIGGER TRIGERNAME_XYZ
BEFORE INSERT OR UPDATE OR DELETE
ON TABLE_NAME_ABC
REFERENCING OLD as OLD NEW as NEW
FOR EACH ROW
DECLARE
mAppUserCode     VARCHAR2(50);
mOSUser          VARCHAR2(100);
mAppUserName     VARCHAR2(100);
mModuleName      VARCHAR2(100);
mChangeID        NUMBER;
BEGIN
SELECT APP_USERCODE, OS_USER, APP_USERNAME, MODULE_NAME INTO mAppUserCode, mOSUser, mAppUserName, mModuleName FROM DB_SESSION_VIEW;
SELECT CHANGE_ID_SEQ.NEXTVAL INTO mChangeID FROM DUAL;
IF INSERTING THEN
   :NEW.CREATED_BY_MODULE     := mModuleName;
   :NEW.CREATED_BY_USER_CODE  := mAppUserCode;
   :NEW.CREATED_BY_OS_USER    := mOSUser;
   :NEW.CREATED_BY_USER_NAME  := mAppUserName;
   :NEW.CREATED_ON            := sysdate;
   :NEW.CHG_ID                := mChangeID ;
ELSIF UPDATING THEN
   :NEW.CHANGED_BY_MODULE     := mModuleName;
   :NEW.CHANGED_BY_USER_CODE  := mAppUserCode;
   :NEW.CHANGED_BY_OS_USER    := mOSUser;
   :NEW.CHANGED_BY_USER_NAME  := mAppUserName;
   :NEW.CHANGED_ON            := sysdate;
   :NEW.CHG_ID                := mChangeID ;
END IF;
END;
/

MYSQL 中是否可以使用 OR 条件创建触发器??

同样在 phpmyadmin 中,事件部分没有添加 or 条件的选项,即选择 INSERT ,UPDATE AND DELETE 没有规定放置在插入或更新或删除之前 所以我的问题是,是否有可能像上面的 Oracle 触发器一样?

【问题讨论】:

试一试,亲眼看看 【参考方案1】:

我认为 mysql 没有为单个触发器提供多个事件。你能做什么。您只需创建一个 procedure 并在该过程中按原样编写整个逻辑。

将 NEW 和 OLD 值作为该过程的参数。

并从所有三个触发器中调用该过程。

【讨论】:

以上是关于我可以在 TRIGGER 中创建一个 MYSQL TRIGGER WITH 或条件吗的主要内容,如果未能解决你的问题,请参考以下文章

mysql在存储过程中创建触发器

使用 GROUP BY 在 TRIGGER 中创建临时表

在 PostgreSQL 9.1 中创建触发器时的异常

cve-2012-5613 mysql本地提权

我可以在一个表中创建几个表吗,mysql? [关闭]

在 mySQL 中创建名称中带有空格的表