gpt4 book ai didi

mysql - 根据另一个(第 3 个)表上的行数,在表上创建插入触发器,在另一个表上创建新行

转载 作者:行者123 更新时间:2023-11-29 01:57:35 26 4
gpt4 key购买 nike

假设以下结构:

表 1:

ID | name

表 2:

ID | name

表 3:

ID | table1_id | table2_id | value

我想构建一个触发器,如果​​ ID 不存在,则在插入到 Table1 之后,为 Table3 中的 Table2 中的每一行 创建具有相应 ID 的新行。

到目前为止,我所做的是在 php 中创建此逻辑,我以前从未创建过如此复杂的触发器,所以我真的不知道如何处理它。

例子:

Customers Table after insert:
+----+------+
| ID | Name |
+----+------+
| 1 | Dan |
+----+------+

Currency Table:
+----+------+
| ID | Name |
+----+------+
| 1 | USD |
| 2 | EUR |
+----+------+

Customers Currency Table after trigger
+----+---------------+-------------+-------+
| ID | customer_id | currency_id | Value |
+----+---------------+-------------+-------+
| 1 | 1 | 1 | NULL |
| 2 | 1 | 2 | NULL |
+----+---------------+-------------+-------+

最佳答案

您可以使用的另一个选项是:

DELIMITER $$

DROP TRIGGER /*!50032 IF EXISTS */ `trg_bi`$$

CREATE TRIGGER `trg_bi` BEFORE INSERT ON `table1`
FOR EACH ROW
BEGIN
INSERT INTO `table3` (`table1_id`, `table2_id`)
SELECT NEW.`id`, `t2`.`id`
FROM `table2` `t2`
WHERE NOT EXISTS (SELECT NULL FROM `table1` `t1` WHERE `t1`.`id` = NEW.`id`);
END$$

DELIMITER ;

这里是通过idtable1来验证的,但是你可以使用你想要验证的列,但是,依赖于验证没有'customer'在表 1

SQL Fiddle example

关于mysql - 根据另一个(第 3 个)表上的行数,在表上创建插入触发器,在另一个表上创建新行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24381872/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com