【问题标题】:Add a Foreign Key to a Populated MYSQL table向填充的 MYSQL 表添加外键
【发布时间】:2020-11-30 18:55:00
【问题描述】:

我需要向已填充数据的表添加外键...

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出现错误“error no. 150”外键约束格式不正确,如何处理

【问题讨论】:

  • 我们看不到返现表(REFERENCES cashback(id)) 或者你想这样做:REFERENCES cashback00(id) ?
  • 如果外键引用有效,则可以正常工作:dbfiddle.uk/….
  • @John,另外,很高兴回复那些帮助你回答和 cmets 的人......
  • 我现在明白你的回答了……没错@GordonLinoff 谢谢大家的帮助

标签: mysql sql foreign-keys


【解决方案1】:

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

问题是您引用的列cashback(id) 不是该表的键。

要制作外键,你引用的列应该是被引用表的主键。

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

ALTER TABLE cashback00 ADD PRIMARY KEY (id);

但如果您在 id 中有重复值,这将不起作用。主键必须是唯一的。

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

【讨论】:

  • 感谢您的关注...实际上我为您放错了子表名称..抱歉
【解决方案2】:

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

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)

【讨论】:

    猜你喜欢
    • 2014-11-25
    • 1970-01-01
    • 2017-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 2013-01-29
    相关资源
    最近更新 更多