mySQL在触发器中比较两个不同的列值

Posted

技术标签:

【中文标题】mySQL在触发器中比较两个不同的列值【英文标题】:mySQL compare two different column values in trigger 【发布时间】:2021-10-05 05:48:21 【问题描述】:

我正在尝试使用触发器检查表中的两个值是否相同,如果是,则将信息插入另一个表。我的代码如下。

user_id 是一个 INT(10) post_author_id 是一个 VARCHAR(33) 8utf_unicode_ci

CASE
WHEN (new.user_id = (SELECT CAST(post_author_id AS UNSIGNED INTEGER) FROM Cvr_hooks_501_1000)) 
THEN
INSERT INTO Cvr_1_link_501_1000 (a_hook_id, a_user_id, a_post_id, a_post_author_id)

VALUES (new.hook_id, 
        new.user_id, 
        new.post_id, 
        new.post_author_id);

END CASE

感谢任何帮助!

【问题讨论】:

【参考方案1】:

你可以使用EXISTS来检查用户是否已经存在

CREATE tABLE Cvr_hooks_501_1000(post_author_id vaRCHAR(39))
INSERT INTO Cvr_hooks_501_1000 VALUES ("1")
CREATE TABLE account(hook_id int, user_id int(11) ,post_id int, post_author_id int)
CREATE TABLE Cvr_1_link_501_1000 (a_hook_id int, a_user_id int(11) ,a_post_id int, a_post_author_id int)
CREATE TRIGGER upd_check AFTER  INSERT ON account
       FOR EACH ROW
       BEGIN
      IF ( EXISTS(SELECT 1 FROM Cvr_hooks_501_1000 WHERE post_author_id =  new.user_id)) then
          
          INSERT INTO Cvr_1_link_501_1000 (a_hook_id, a_user_id, a_post_id, a_post_author_id)

          VALUES (new.hook_id, 
                  new.user_id, 
                  new.post_id, 
                  new.post_author_id);

          END IF;

       END
INSERT INTO account VALUES(1,1,1,1)
SELECT * FROM Cvr_1_link_501_1000
a_hook_id | a_user_id | a_post_id | a_post_author_id --------: | --------: | --------: | ---------------: 1 | 1 | 1 | 1

db小提琴here

【讨论】:

我尝试使用您提供的代码,但仍然遇到同样的问题。我认为我的问题是我将 int(11)(表中的 user_id)与 varchar(33) utf8_unicode_ci(即 post_author_id)进行比较。这是在 INSERT AFTER 触发器(在 Cvr_hooks_501_1000 表上)内完成的,如果这有什么不同的话。我对 mysql 很陌生,对编程世界也有些陌生,所以我为我缺乏前期知识而道歉。 @ProfessorPuff 我添加了一个例子,看看它是否也适用于你。 我会看看有没有帮助,谢谢你的帮助 看起来你提供的 IF 版本毕竟有效!非常感谢!

以上是关于mySQL在触发器中比较两个不同的列值的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 触发器 - 复制新的。插入的数据与现有的列值进行比较,如果它们匹配,则将它们插入到其他表中

Oracle触发器

[转]oracle触发器与:new,:old的使用

更新之前的Oracle SQL触发器,用于设置来自其他实体的列值

计算具有3个列值的行的出现次数相同的MySQL

MySQL - 根据更新其他表列值触发更新列值