【问题标题】:Trying to Run a stored procedure in mySQL and it fails on a foreign key constraint尝试在 mySQL 中运行存储过程,但在外键约束上失败
【发布时间】:2011-12-07 09:39:26
【问题描述】:

我编写了一个简单的存储过程,其中的 while 循环不起作用。 这里有一些数据给你: 父表是 data_client_id。这些表都是innoDB。主键是 ID。架构中带有 data_ 前缀的所有其他表都将此 (data_client_id.id) 列作为外键。 我生成了一些虚拟数据并将其插入到自动递增主键的 data_client_id 表中。生成的行是 33 到 132。我的目的是编写一个存储过程,它会在所有其他 data_ 表的 id 列中创建具有匹配值的行。

这是我的代码:

mysql> DELIMITER //
mysql> CREATE PROCEDURE this()
    -> BEGIN
    -> DECLARE v1 INT;
    -> SET v1 = 33;
    -> WHILE v1 < 132 DO
    -> INSERT INTO data_banking (id) VALUES(v1);
    -> SET v1 = v1+1;
    -> END WHILE;
    -> END//
Query OK, 0 rows affected (0.00 sec)

然后当我调用 this();程序我收到以下错误:

mysql> call this();
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails             (`oms_clients`.`data_banking`, CONSTRAINT `data_banking_FK` FOREIGN KEY (`id`) REFERENCES  `data_client_id` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION)

我尝试像这样在 data_ 表中运行独立的 INSERT: 插入data_banking(id)值(34);

它可以将所有默认值设置为 NULL 或它们各自的 SET 默认值的列...

【问题讨论】:

    标签: mysql stored-procedures command-line-interface mysql-error-1452


    【解决方案1】:

    你的存储过程没有问题。

    问题是您不能将运行插入到 data_banking 中,除非 data_client_id 中也存在 SAME id。 每个 id,从 33 到 132。

    要解决问题,请移除约束,或确保外键依赖已解决。

    这里有一个很好的链接,里面有一些有用的提示:

    Mysql error 1452 - Cannot add or update a child row: a foreign key constraint fails

    【讨论】:

    • 我想我不是很清楚。我在 data_client_id 中插入了第 33 行到第 132 行。即使填充了一些额外的列,它们都存在。这很奇怪。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-24
    • 2019-04-03
    • 2012-04-21
    • 1970-01-01
    • 1970-01-01
    • 2017-09-16
    • 2017-01-13
    相关资源
    最近更新 更多