更改表以提供外键约束

luc*_*ter 11 mysql mysql-error-1064

我有一个表有两列,我从两个不同的表复制.我现在要做的是给下面显示的列名email和id一个外键约束.

ALTER TABLE users_role_map
ADD CONSTRAINT FK_users_role_map
FOREIGN KEY (email) REFERENCES usert(email),
FOREIGN KEY (id) REFERENCES rolet(id)
ON UPDATE CASCADE
ON DELETE CASCADE;
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use near 'FOREI
GN KEY (id) REFERENCES rolet(id)
ON UPDATE CASCADE
ON DELETE CASCADE' at line 4
Run Code Online (Sandbox Code Playgroud)

And*_*y M 33

你是不是在这个声明中加入一个约束,要添加约束小号:每两个foreign key子句意味着一个单独的约束.但是,根据手册,您应该能够根据需要在单个ALTER TABLE语句中添加任意数量的外键约束.您只需要ADD在每个约束之前包含.

请注意,约束名称单独应用于要添加的约束,因此如果希望第二个外键具有特定名称,则可能需要指定第二个外键.同样:它们适用于直接位于它们之前的外键.CONSTRAINT nameON UPDATE/ON DELETE

因此,更正的语句可能如下所示:

ALTER TABLE users_role_map

ADD CONSTRAINT FK_users_role_map1
FOREIGN KEY (email) REFERENCES usert(email)
ON UPDATE CASCADE
ON DELETE CASCADE,

ADD CONSTRAINT FK_users_role_map2
FOREIGN KEY (id) REFERENCES rolet(id)
ON UPDATE CASCADE
ON DELETE CASCADE;
Run Code Online (Sandbox Code Playgroud)

  • 我收到了错误.ERROR 1005(HY000):无法创建表'acsuserdatabase_dbo.#sql-984_10e'(错误号:150) (2认同)
  • @MikePurcell:我倾向于为外键选择一个名称,这样就可以看到外键随时随地引用它的名称.例如,如果出现外键冲突错误,则会在错误消息中显示违规密钥的名称.此外,我可以通过查看其外键列表来判断是否已在表上定义了特定的外键.当我需要删除现有密钥时,通常很容易使用已建立的命名规则来确定其名称. (2认同)