【问题标题】:I don't know what is wrong with this code problem is syntax error foreign key on delete and on update我不知道这个代码问题有什么问题是删除和更新时的语法错误外键
【发布时间】:2021-11-24 04:36:53
【问题描述】:
CREATE TABLE STUDENT
(
    stu_id CHAR(5) PRIMARY KEY,
    stu_lname VARCHAR(15) NOT NULL,
    stu_minit CHAR,
    stu_fname VARCHAR(15) NOT NULL,
    department VARCHAR(15)
);

CREATE TABLE FGKMKJWEKJH
(
    stu_id CHAR(5),
    crs_id CHAR(8),
    sem_id CHAR(5),
    Grade CHAR(2),
    Mark DECIMAL(4, 2) CHECK (Mark BETWEEN 0.00 AND 100.00),

    CONSTRAINT fk_inv_product_id 
        FOREIGN KEY (stu_id) REFERENCES STUDENT(stu_id)
             ON DELETE SET NULL ON UPDATE CASCADE,
    CONSTRAINT pkVW 
        PRIMARY KEY (stu_id, crs_id, sem_id)
);

【问题讨论】:

  • 您能否发布您收到的完整且准确的错误消息?另外:这适用于 SQL Server 的哪个版本??
  • FGKMKJWEKJH 表中的 stu_idprimary key 的一部分,并且您在删除时将 FK 行为设置为 SET NULL。 null 的值将违反primary key 约束,因此这是无效的。您需要删除SET NULL 行为或从primary key 约束中删除该列...PRIMARY KEY (stu_id, crs_id, sem_id)CASCADE 将是一个有效的 FK 约束选项,但不是 SET NULL
  • 如果你真的阅读它产生的错误它告诉你确切地问题because one or more referencing columns are not nullable.

标签: sql sql-server syntax foreign-keys key


【解决方案1】:

错误的原因是stu_idFGKMKJWEKJHprimary key约束的一部分,这意味着stu_id必须是NOT NULL

这是一个有效的选项。代替SET NULL,使用ON DELETE CASCADE

CREATE TABLE FGKMKJWEKJH
(
    stu_id CHAR(5),
    crs_id CHAR(8),
    sem_id CHAR(5),
    Grade CHAR(2),
    Mark DECIMAL(4, 2) CHECK (Mark BETWEEN 0.00 AND 100.00),
    CONSTRAINT fk_inv_product_id 
        FOREIGN KEY (stu_id) REFERENCES STUDENT(stu_id)
            ON DELETE CASCADE ON UPDATE CASCADE,
    CONSTRAINT pkVW 
        PRIMARY KEY (stu_id, crs_id, sem_id)
);

还有小提琴:

Fiddle showing the old and new behavior

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 2018-08-19
    • 1970-01-01
    相关资源
    最近更新 更多