将外键添加到已填充的MYSQL表中



我需要向已经填充了数据的表添加外键。。。

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";外键约束形式不正确";

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

问题是您引用的列cashback(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)

相关内容

  • 没有找到相关文章

最新更新