SQL - SET DEFAULT 在删除值时不起作用

SQL - SET DEFAULT doesn't work when deleting a value

我有 2 个 tables:

CREATE TABLE REP
(
      PRIMARY KEY REP_NUM CHAR(2) DEFAULT ('00'),
      LAST_NAME CHAR(15),
      FIRST_NAME CHAR(15),
      STREET CHAR(15),
      CITY CHAR(15),
      PROVINCE CHAR(3),
      ZIP CHAR(5),
      COMMISSION DECIMAL(7,2),
      RATE DECIMAL(3,2) 
);

并且:

CREATE TABLE CUSTOMER
(
    CUSTOMER_NUM CHAR(3) PRIMARY KEY,
    FOREIGN KEY (REP_NUM) REFERENCES REP ON DELETE SET DEFAULT,
    CUSTOMER_NAME CHAR(35) NOT NULL,
    STREET CHAR(15),
    CITY CHAR(15),
    PROVINCE CHAR(3),
    ZIP CHAR(5),
    BALANCE DECIMAL(8,2),
    CREDIT_LIMIT DECIMAL(8,2),
    REP_NUM CHAR(2) 
);

如您所见,REP_NUM 列是 REP table 中的主键和 CUSTOMER table 中的外键。

例如,如果我在 REP table 中输入新值,REP_NUM 的值为 35,并且还向 CUSTOMER table REP_NUM 为 35,然后我将其从 REP table:

中删除
DELETE FROM REP WHERE REP_NUM = '35';

我希望 CUSTOMER table(外键)中的 REP_NUM 值现在为 00。

但是,当我运行这段代码时,它不起作用。当我删除“35”时,我没有得到“00”,而是在 CUSTOMER table.

REP_NUM 属性中得到一个 "blank value"

有什么建议吗?

谢谢!

您有几个问题: REP-table:

  • 主键的默认值没有意义,它将在第二次失败 你使用它的时间

客户-table

  • 你没有默认 REP_NUM,你在这个主题中的主要问题
  • 您的外键引用 table REP,但在哪一列?

两个 tables:

  • 使用缩写 "number" 的 CHAR() 字段没有意义。 CHAR(2) 的选项数量也非常有限。

这个有效:

CREATE TABLE REP
(
      REP_NUM CHAR(2) PRIMARY KEY -- No default, doesn't make sence, it will FAIL the 2nd time you use it.
    -- other columns
);

CREATE TABLE CUSTOMER
(
    CUSTOMER_NUM CHAR(3) PRIMARY KEY,
    FOREIGN KEY (REP_NUM) REFERENCES REP(REP_NUM) ON DELETE SET DEFAULT, -- mention the column as well!
    REP_NUM CHAR(2) DEFAULT '00'
    -- other columns
);

INSERT INTO rep(rep_num) VALUES('00');
INSERT INTO rep(rep_num) VALUES('35');

INSERT INTO customer(CUSTOMER_NUM, rep_num) VALUES('x', default); -- results in 'a'
INSERT INTO customer(CUSTOMER_NUM, rep_num) VALUES('y', '35');

DELETE FROM rep WHERE rep_num = '35';