MariaDB:在插入表2之前,验证某个值是否存在于www.example.com中table1.id

qfe3c7zg  于 2022-11-23  发布在  其他
关注(0)|答案(1)|浏览(122)
    • 目标:**验证table1中是否存在ID字符串;如果是,则将数据插入到表2中,否则跳过。

我在MariaDB数据库中有两个表:

    • 表格1**

| id整数(11)自动递增|myID字符串文本|
| - -| - -|
| 千零一|小行星一千二百三十四|

    • 表格2**

| id整数(11)自动递增|myID字符串文本|字符串1字符(32)|字符串2字符(32)|
| - -| - -| - -| - -|
| 千|小行星0123|部分文本1|一些文字2|
显然,它们并不相似,但两者的共同点是一个名为myIDString的列。在处理数据时,首先填充table1,然后在myIDString中获得某个值(此处为1234)。
在进一步的处理过程中,我获取了数据变量,并将其输入到table2.string1和table2.string2中。
如果可能的话,我会尝试创建一行Insert,如

if exists (select myIDString from table1 where myIDSTring = 1234) then 
insert into table2(myIDString, string1, string2) values(1234, $myString1,$myString2);

但到目前为止还没有运气。我读过关于类似问题的帖子,那些帖子没有提供解决这个问题的方法。最好的情况是,我想要一个oneliner解决方案,但其次,如果我需要一个触发器来处理这个问题,那么这样的触发器看起来会是什么样子?

2jcobegt

2jcobegt1#

我认为解决我的问题的最好办法是使用触发器。

DELIMITER //                                                                                                            CREATE TRIGGER threadIDcheck                                                                                            BEFORE INSERT ON myID2                                                                                                  FOR EACH ROW                                                                                                            BEGIN                                                                                                                   IF NEW.threadID1 NOT IN (select threadID1 from myID1) THEN                                                              SIGNAL SQLSTATE '45001' SET MESSAGE_TEXT = 'That myIDString does not exist in table1';                                         END IF;                                                                                                                 END; //                                                                                                                 DELIMITER ;  DELIMITER //                                                                                                            CREATE TRIGGER threadIDcheck                                                                                            BEFORE INSERT ON myID2                                                                                                  FOR EACH ROW                                                                                                            BEGIN                                                                                                                   IF NEW.threadID1 NOT IN (select threadID1 from myID1) THEN                                                              SIGNAL SQLSTATE '45001' SET MESSAGE_TEXT = 'ThreadID does not exist in table1';                                         END IF;                                                                                                                 END; //                                                                                                                 DELIMITER ;  DELIMITER //
CREATE TRIGGER threadIDcheck
BEFORE INSERT ON table2
FOR EACH ROW
BEGIN
IF NEW.myIDString NOT IN (select myIDString from table1) THEN
SIGNAL SQLSTATE '45001' SET MESSAGE_TEXT = 'That myIDString value does not exist in table1';
END IF;
END; //
DELIMITER ;

当我执行一个简单的insert into table2(myIDString) values(1111);时,如果该值不在table1中,那么插入就会失败。如果有人有其他的解决方案,请随时在这里添加:)。

相关问题