我需要向已经填充了数据的表添加外键。。。
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)