create table auth_group ( groupid varchar(40), userid varchar(40) references auth_user(userid) on delete cascade, lock integer default 1, primary key (groupid, userid) );
CREATE TABLE時にCONSTRAINTを指定すると、制約を付けることができる。
親テーブルのある行が削除されたら、それを参照している子テーブルの行も削除される等。
なお、両方のテーブル共に行をユニークに識別できる(プライマリ)キーが設定されている必要がある。
--削除は子から DROP TABLE child; DROP TABLE parent; --親テーブル CREATE TABLE parent ( id int8 not null, PRIMARY KEY (id) ); --子テーブル CREATE TABLE child ( id int8 not null, data text, CONSTRAINT child_fk FOREIGN KEY(id) REFERENCES parent(id) ON DELETE CASCADE ON UPDATE CASCADE, PRIMARY KEY (id) ); --データ投入 insert into parent select 1; insert into parent select 2; insert into parent select 3; insert into child select 1, 'data1'; insert into child select 2, 'data2'; insert into child select 3, 'data3'; -- 親にデータが無いのでエラー insert into child select 4, 'data4'; -- ERROR: child_fk referential integrity violation - key referenced from child not found in parent --親を消すと子も消える delete from parent where id = 2; -- scott=# select * from child; -- id | data -- ----+------- -- 1 | data1 -- 3 | data3 --親のIDを更新すると、子のIDも更新される update parent set id = 2 where id = 3; -- scott=# select * from child; -- id | data -- ----+------- -- 1 | data1 -- 2 | data3