更新级联上的SQL-复合键

更新级联上的SQL-复合键,sql,foreign-keys,Sql,Foreign Keys,我有两张桌子 Table1(PKFK1, PKFK2) Table2(PKFK1, PKFK2, PKFK3) 我想在表2中执行一个更新级联,这样每次在表1中更新pkfk2时,表2中的操作都是相同的。我尝试了以下方法: alter table Table2 ADD CONSTRAINT fk_cascadeUP FOREIGN KEY (PKFK1) REFERENCES Table1(PKFK1) ON UPDATE CASCADE, ADD CONSTRAINT fk_cascadeUP2

我有两张桌子

Table1(PKFK1, PKFK2)
Table2(PKFK1, PKFK2, PKFK3)
我想在表2中执行一个更新级联,这样每次在表1中更新pkfk2时,表2中的操作都是相同的。我尝试了以下方法:

alter table Table2
ADD CONSTRAINT fk_cascadeUP FOREIGN KEY (PKFK1) REFERENCES Table1(PKFK1) ON UPDATE CASCADE,
ADD CONSTRAINT fk_cascadeUP2 FOREIGN KEY (PKFK2) REFERENCES Table1 (PKFK2) ON UPDATE CASCADE;

这是一个错误。如何执行更新级联?

每个
ALTER TABLE
都需要自己的语句。试试这个:

alter table Table2
ADD CONSTRAINT fk_cascadeUP FOREIGN KEY (PKFK1) REFERENCES Table1(PKFK1) ON UPDATE CASCADE

alter table Table2
ADD CONSTRAINT fk_cascadeUP2 FOREIGN KEY (PKFK2) REFERENCES Table1 (PKFK2) ON UPDATE CASCADE

首先,您必须删除外键,然后根据需要添加外键。从表中删除外键,然后添加带有“更新级联”的外键
这有点像:

ALTER TABLE Table2
DROP FOREIGN KEY [foreign key name]
ADD CONSTRAINT fk_cascadeup2 FOREIGN KEY (PKFK2) REFERENCES Table1 (PKFK2) ON UPDATE 
CASCADE;

另一种方法是“设置外键检查=0”,更改外键后,可以将其设置回“1”。

错误是什么?请尝试为每个添加的fk设置一个
alter table
。您使用的支持SQL的服务器是
SQL server(MSSQL)
MySQL
PostgreSQL
或其他问题?请回答您的问题并添加您收到的完整错误消息。(您的问题未在注释中发布附加信息)此问题的标题不准确:问题中的示例表未使用复合外键,
Table1
的列不是复合主键,因为
Table2
的外键仅引用其中一个(SQL要求引用复合主键的所有组件列-唯一的解决方法是使用
唯一键
(即辅助键)是的,这是最有效的ANSI SQL标准答案,topicstarter将使用扩展的ALTER MySQL SQL语法,允许在ALTER语句中用逗号分隔语句。