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

时间:2015-02-28 18:19:14

标签: sql postgresql default

我有两张桌子:

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表中的主键和CUSTOMER表中的外键。

例如,如果我在REP表中输入值为REP_NUM为35的新值,并使用CUSTOMERREP_NUM表中插入新值是35,然后我从REP表中删除它:

DELETE FROM REP WHERE REP_NUM = '35';

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

但是,当我运行此代码时,它不起作用。当我删除'35'时,我只是在REP_NUM表的CUSTOMER属性中得到一个“空白值”而不是'00'。

有什么建议吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

您有几个问题: REP-表:

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

客户表

  • 您在REP_NUM上没有默认值,这是您在本主题中的主要问题
  • 您的外键引用表REP,但在哪个列上?

两个表:

  • 使用缩写“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';