【发布时间】:2020-11-25 01:11:41
【问题描述】:
我在 Postgresql 13 上。
如果我从“父表”的建筑物中删除,我想要一个假定默认值“1”的表(房间) 这是我的sql代码
DROP TABLE rooms;
DROP TABLE buildings;
CREATE TABLE buildings (
building_no INT default 1 primary key,
building_name VARCHAR(255),
address VARCHAR(255));
CREATE TABLE rooms (
room_no INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
room_name VARCHAR(255),
building_no INT default 1,
FOREIGN KEY (building_no) REFERENCES buildings (building_no) ON DELETE SET default );
我将值插入到表中
insert into buildings values (1,'Building1','Street 33');
insert into buildings values (2,'Build-B','Street 34');
insert into rooms values (1,'Room 1',1);
insert into rooms values (2,'Room 2',2);
然后我从建筑物中删除
delete from buildings;
当我从建筑物中删除而不是按照我的要求设置默认值 1 时,将值设置为 NULL。
test=> select * from rooms;
room_no | room_name | building_no
---------+-----------+-------------
1 | Room 1 |
2 | Room 2 |
我的 sql 代码有什么问题?
【问题讨论】:
-
我猜,但我不知道如何删除所有建筑物并期望 Table.building_no 更新为 1,因为没有具有此 ID 的建筑物(即设置默认值会违反外键)。也许尝试删除仅建设 2,看看会发生什么。
-
我无法重现此内容。我得到了预期的
ERROR: update or delete on table "buildings" violates foreign key constraint "rooms_building_no_fkey" on table "rooms"和DETAIL: Key (building_no)=(1) is still referenced from table "rooms".。你用的是什么版本?这是标准的 PostgreSQL 吗? -
是的,是 Centos 7 上的标准 Postresql 13
标签: sql postgresql