向填充的MYSQL表添加外键

向填充的MYSQL表添加外键,mysql,sql,foreign-keys,Mysql,Sql,Foreign Keys,我需要将外键添加到已填充数据的表中 CREATE TABLE `clientes` ( `id_cliente` int(11) NOT NULL, `id_cashback` int(11) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; CREATE TABLE `cashback00` ( `id` int(11) NOT NULL, `valor` decimal(

我需要将外键添加到已填充数据的表中

CREATE TABLE `clientes` (
  `id_cliente` int(11) NOT NULL,
  `id_cashback` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE `cashback00` (
  `id` int(11) NOT NULL,
  `valor` decimal(9,2) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

ALTER TABLE clientes ADD CONSTRAINT fk_cliente_cashback FOREIGN KEY (id_cashback) REFERENCES cashback(id)

ALTER TABLE仅在未填充父表(客户)时有效


如果已经有数据,如何继续,因为ALTER TABLE出现错误“错误号150”外键约束格式不正确”

问题不在于表格中填充了数据

问题是您所引用的列,
现金返还(id)
,不是该表的键

要生成外键,引用的列应该是被引用表的主键

所以我认为你必须首先这样做:

ALTER TABLE cashback00 ADD PRIMARY KEY (id);
但是,如果在
id
中有重复的值,则这将不起作用。主键必须是唯一的


此外,您的外键需要引用您使用的表名
cashback00
,而不是
cashback
。除非您还有一个名为
cashback
的表,您在问题中没有显示该表。

感谢大家的帮助,但我设法解决了这个问题:

SGBD完整性问题

请参见,如果要将外键添加到已填充的父表中,还必须填充该列,如下所示:

UPDATE clientes
SET id_cashback = '1'
WHERE id_cliente >= '1' AND id_cliente <= '3500'

INSERT INTO cashback00 (valor) VALUES (10.00)

ALTER TABLE clientes ADD CONSTRAINT fk_cliente_cashback FOREIGN KEY (id_cashback) REFERENCES cashback(id)

更新客户
集合id\u现金返还='1'

其中id_cliente>='1'和id_cliente我们无法看到现金返还表(引用现金返还(id)),或者您希望这样做:引用现金返还00(id)?如果外键引用有效,它可以正常工作:。@John,另外,回复帮助你回答和评论的人也是件好事……我现在理解了你的答案……没错@GordonLinoff谢谢大家的帮助谢谢大家的关注……事实上,我错放了你的子表名……对不起