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';
我有 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';