mysql - 触发mysql相关表的插入

标签 mysql database-design triggers relational-database foreign-key-relationship

我在插入 tarifa_data 时遇到问题。该表与 translator_tarifes_data_facturacio 相关,并且与 tarifes_translator 相关。在 translator_tarifes_data_facturacio 表上,我想保存 id 关系 tarifa_datatarifes_translator

这是设计表: table design http://project2be.com/stack/tables.png

tarifa_data 上,我创建了此触发器以将 id 插入到 translator_tarifes_data_facturacio 中。这是触发器:

USE `proje169_gl`;
DELIMITER $$

CREATE TRIGGER `TRG_INSERT_id_init` AFTER INSERT ON `tarifa_data` FOR EACH ROW
BEGIN
    INSERT INTO translator_tarifes_data_facturacio (tarifa_data_id) VALUES (NEW.id);
END

当我插入 tarifa_data 时,例如 INSERT INTO tarifa_data(id, data) VALUES ('1','2013-12-15 00:00:00') 我收到此错误:

#1452 - Cannot add or update a child row: a foreign key constraint fails (`proje169_gl`.`translator_tarifes_data_facturacio`, CONSTRAINT `fk_translator_tarifes_data_facturacio_tarifes_translator1` FOREIGN KEY (`tarifes_translator_id`) REFERENCES `tarifes_tra)

有什么想法吗?

编辑:这是整个表格:

table design http://project2be.com/stack/tables1.png

最佳答案

插入表 translator_tarifes_data_facturacio 时,您需要 tarifa_data_idtarifes_translator_id 两列的值。

尝试:

DELIMITER $$

CREATE TRIGGER `TRG_INSERT_id_init` AFTER INSERT ON `tarifa_data`
FOR EACH ROW
BEGIN
    INSERT INTO `tarifes_translator` (`id`) VALUES (NULL);
    INSERT INTO `translator_tarifes_data_facturacio` (`tarifa_data_id`, `tarifes_translator_id`) VALUES (NEW.`id`, LAST_INSERT_ID());
END$$

DELIMITER ;

SQL Fiddle demo

关于mysql - 触发mysql相关表的插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20595663/

相关文章:

mysql - 如何在一个表中使用外键在另一个表中使用主键

sql-server - MSSQL有效触发器INSTEAD OF INSERT

php - 如何用Html表中第二行的第二列减去第一行的第一列

MySQL 连接/选择具有转置列的表

java - 如何在 Java Web 应用程序中存储文件?

sql - PostgreSQL 索引使用分析

c# - 团结 : is it possible to configure the scene for trigger colliders to only work with one layer?

postgresql - 如何在 postgresql 中以弹性方式删除触发器

MySQL:FROM 子句中的 CASE 语句

mysql - SQL - 最佳方式[期初期末余额]