【发布时间】:2015-02-28 18:19:13
【问题描述】:
我有 2 张桌子:
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,同时在CUSTOMER 表中插入新值,REP_NUM 为 35,然后我将其删除来自REP 表:
DELETE FROM REP WHERE REP_NUM = '35';
我希望 CUSTOMER 表(外键)中的 REP_NUM 值现在为 00。
但是,当我运行此代码时,它不起作用。当我删除“35”时,我没有得到“00”,而是在CUSTOMER 表的REP_NUM 属性中得到一个“空白值”。
有什么建议吗?
谢谢!
【问题讨论】:
-
我没有看到在客户表中设置任何默认值。此外,我认为在这种情况下触发器是最好的选择。
-
我是否也需要在该表中设置默认值?我试过了,它给了我一个错误。它是为我的一门课程分配的,我们还没有涵盖触发器,所以我想我们不希望使用它
-
SET DEFAULT表示在其他表中使用 那些列 的默认值,而不是 引用 列的默认值。 -
@Gambit2007:您需要将
DEFAULT('00')放在您定义列REP_NUM的位置 - 而不是您定义外键的位置! -
@Gambit2007: 是的 - 它不起作用,因为您将
DEFAULT('00')添加到 FOREIGN KEY 定义中 - NOT 实际的列定义。尝试在表创建脚本的最后使用REP_NUM CHAR(2) DEFAULT('00')。
标签: sql postgresql default