试图在mySQL中运行存储过程,它在外键约束上失败

时间:2011-10-14 00:50:05

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

我用一个不起作用的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)

然后当我打电话给这个();程序我收到以下错误:

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: INSERT into data_banking(id)VALUES(34);

并且它将所有默认值设置为NULL或其各自的SET默认值...

1 个答案:

答案 0 :(得分:0)

您的存储过程没有任何问题。

问题在于,除非data_client_id中也存在SAME ID,否则无法将运行插入到data_banking中。 每个 ID,33到132。

要解决此问题,请删除约束,或确保解析外键依赖关系。

以下是一些有用提示的良好链接:

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