我无法使ON UPDATE CASCADE
正常运行,没有语法错误,但是每当更新tableA.a1时,tableB都没有变化,我不确定发生了什么。当显示tableA时,它已更新,但tableB没有更新。
这是我的代码:
CREATE TABLE tableA
(
a1 int NOT NULL,
a2 int NOT NULL,
a3 int NOT NULL,
a4 varchar(50) NOT NULL UNIQUE,
a5 TEXT,
a6 DECIMAL(38,2) NOT NULL,
CHECK (a6 > -99999.99 AND a6 < 99999.99),
CHECK (a3 >= 1 AND a3 <= 10),
PRIMARY KEY (a1,a2)
);
CREATE TABLE tableB
(
b1 int NOT NULL IDENTITY(1,1) PRIMARY KEY,
b2 int NOT NULL DEFAULT 1,
b3 int NOT NULL DEFAULT 1,
b4 char(10) NOT NULL,
b5 date,
);
INSERT INTO tableB (b4,b5)
VALUES (45, '1980-12-17');
INSERT INTO tableA (a1, a2, a3, a4, a5, a6)
VALUES (1, 2, 1, 4, 'hello', 38.32);
ALTER TABLE tableB WITH NOCHECK
ADD CONSTRAINT b2f
FOREIGN KEY (b2, b3) REFERENCES tableA(a1, a2)
ON DELETE SET DEFAULT
ON UPDATE CASCADE;
ALTER TABLE tableA WITH NOCHECK
ADD FOREIGN KEY (a3) REFERENCES tableB(b1);
UPDATE tableA
SET a1 = 5;
SELECT *
FROM tableA;
SELECT *
FROM tableB;
表中数据的输出
答案 0 :(得分:0)
因为当表a中外键为a3时您正在更新a1,因此如果更新a3表b则b1应该更改:
UPDATE tableA
SET a3 = 5;
select b1 from tableb
,如果对于此分配,您想要更改a1并将b2更新为a1 所以您需要像这样一一创建fk:
FOREIGN KEY (b2) REFERENCES tableA(a1)
FOREIGN KEY ( b3) REFERENCES tableA( a2)
不是这个:
FOREIGN KEY (b2, b3) REFERENCES tableA(a1, a2)
因为此行将两者都设为fk
答案 1 :(得分:0)
WITH NOCHECK
来禁用FK验证和维护WITH CHECK
选项-每个FK创建都会失败,并显示ALTER TABLE语句与FOREIGN KEY约束“ b2f”冲突。在数据库“ db_18_2ea6b”的表“ dbo.tableA”中发生了冲突。
FOREIGN KEY (b2, b3) REFERENCES tableA(a1, a2)
但是(a1=1, a2=2)
和(b2=(default)1, b3=(default)1)
-这将如何工作?这是一个残破的参考!
FOREIGN KEY (a3) REFERENCES tableB(b1)
但是(a3=4)
和(b1=(identity)1)
-这将如何工作?这是一个残破的参考!
WITH CHECK
)它将起作用
| a1 | a2 | a3 | a4 | a5 | a6 |
|----|----|----|----|-------|-------|
| 5 | 1 | 1 | 4 | hello | 38.32 |
| b1 | b2 | b3 | b4 | b5 |
|----|----|----|------------|------------|
| (*)| 5 | 1 | 45 | 1980-12-17 |