【问题标题】:Trigger insert on related table mysql在相关表mysql上触发插入
【发布时间】:2014-01-02 22:38:09
【问题描述】:

我在插入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

【问题讨论】:

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


    【解决方案1】:

    当插入表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

    【讨论】:

    • 但是,如果我有另一个与translator_tarifes_data_facturacio 相关的表,与tarifes_translator 相同,我该怎么做?
    • @acasanovas:如果您可以显示其他表格,以及这与“translator_tarifes_data_facturacio”表格的关系如何,将会有所帮助。
    • @acasanovas:请把图片包含在原始问题中吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多