向填充的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谢谢大家的帮助谢谢大家的关注……事实上,我错放了你的子表名……对不起