我有一个简单的表,其中包含以下方案:
CREATE TABLE dateien(
id int PRIMARY KEY UNIQUE DEFAULT NEXTVAL('dateien_id_seq'),
name varchar(64),
zeit timestamp DEFAULT now(),
groesse float,
dateityp_id int references dateitypen(id),
benutzer_id int references benutzer(id)
);
当尝试通过phppgadmin删除一行时,我总是收到消息:
No unique identifier for this row.
同样通过纯SQL,delete语句后没有效果。 你能告诉我这是什么问题吗?
答案 0 :(得分:1)
CREATE TRIGGER update_quota BEFORE INSERT OR UPDATE OR DELETE
ON dateien
FOR EACH ROW
EXECUTE PROCEDURE f_update_quota();
但是当删除时我返回了一些错误的内容。这就是它无法正常工作的原因。
答案 1 :(得分:0)
我看不到如何创建引用的表。
dateityp_id int references dateitypen(id),
benutzer_id int references benutzer(id)
因此我只能猜测...,作为一个例子。表产品,订单,日期。
如果在创建引用该订单的订单后删除了该产品,该怎么办? SQL允许您指定它。直观地说,我们有几个选择:
当有人想要删除仍然被订单引用的产品时(通过dateien),我们不允许。如果有人删除了订单,也会删除dateien。
product_no integer REFERENCES products ON DELETE RESTRICT,
order_id integer REFERENCES orders ON DELETE CASCADE,
限制和级联删除是两种最常见的选项。 RESTRICT也可以写为NO ACTION,如果你没有指定任何内容,也是默认值。当删除主键时,还有两个其他选项可用于外键列:SET NULL和SET DEFAULT。请注意,这些不能免除您观察任何约束。例如,如果操作指定SET DEFAULT但默认值不满足外键,则删除主键将失败。
更多信息:http://www.postgresql.org/docs/7.4/static/ddl-constraints.html