我面前有一项任务。 (DB2数据库) 我需要创建一个将成为子表的表(它是在SQL中调用的吗?) 我需要它,以便它与我的另一个表有一个外键约束,所以当修改父表(删除记录)时,子表也会丢失该记录。
一旦我有了表格,我还需要用其他表格中的数据填充它(如果有一种简单的方法可以UPDATE
这个)。
如果你能指出我正确的方向,这将有很多帮助,因为我甚至不知道要寻找什么语法。
我所拥有的表格:
create table titleauthors (
au_id char(11),
title_id char(6),
au_ord integer,
royaltyshare decimal(5,2));
我正在创建的表格:
create table titles (
title_id char(6),
title varchar(80),
type varchar(12),
pub_id char(4),
price decimal(9,2),
advance decimal(9,2),
ytd_sales integer,
contract integer,
notes varchar(200),
pubdate date);
我需要将title_id与父表中的title_id匹配,并使用ON DELETE CASCADE语法删除该表的删除时间。
我的尝试:
CREATE TABLE BookTitles (
title_id char(6) NOT NULL CONSTRAINT BookTitles_title_id_pk REFERENCES titleauthors(title_id) ON DELETE CASCADE,
title varchar(80) NOT NULL,
type varchar(12),
pub_id char(4),
price decimal(9,2),
advance decimal(9,2),
ytd_sales integer,
contract integer,
notes varchar(200),
pubdate date)
;
答案 0 :(得分:1)
有几条评论,第一条:
父表必须具有主键或唯一键才能被外键引用。
您的帖子意味着您希望BookTitles成为子表(尽管这似乎对我不利)。从逻辑上讲,我认为您希望逻辑为:“如果您从BookTitles表中删除一本书,那么TitleAuthors表中的行也应该被删除” - 而不是相反。根据您对TitleAuthors表的描述,逻辑主键是(TITLE_ID,AU_ID)。这将排除它成为一个 父表到BookTitles,它不包含AU_ID。
创建表后添加约束要比在CREATE TABLE STATEMENT中尝试指定它更容易。
假设您希望您的父/子关系发生逆转(BookTitles作为父级,TitleAuthors作为子级):
CREATE TABLE BookTitles (
title_id char(6) NOT NULL,
title varchar(80) NOT NULL,
type varchar(12),
pub_id char(4),
price decimal(9,2),
advance decimal(9,2),
ytd_sales integer,
contract integer,
notes varchar(200),
pubdate date
);
alter table booktitles
add primary key (title_id);
alter table titleauthors
add constraint fk_booktitles
foreign key (title_id)
references booktitles (title_id)
on delete cascade;
如果从BookTitles中删除标题,这将导致TitleAuthors中的记录被删除。