在INSERT / UPDATE期间,除了触发器之外是否有任何实际的方法可以忽略查询给定值而支持默认值?
这是我想要存档的行为:
CREATE TABLE foo (id serial, data text);
INSERT INTO foo (data) VALUES('bar1');
INSERT INTO foo (id, data) VALUES(50, 'bar2');
INSERT INTO foo (id, data) VALUES(-34, 'bar3');
INSERT INTO foo (id, data) VALUES(80.34, 'bar4');
INSERT INTO foo (id, data) VALUES('foo5', 'bar5');
INSERT INTO foo (data) VALUES('bar6');
UPDATE foo SET id=200, data='BARn' WHERE íd=6;
SELECT * FROM foo;
+----+------+
| id | data |
+----+------+
| 1 | bar1 |
| 2 | bar2 |
| 3 | bar3 |
| 4 | bar4 |
| 5 | bar5 |
| 6 | BARn |
+----+------+
谢谢!
并不是的。一个触发器是去这里的方式。
好吧,你也可以使用条件rule。但我不会。 使用check constraints,您只能限制您不想要的值或其组合,但这会引发异常并完全跳过操作。
你真的不应该这样做。
您应该以这样的方式编程,使您的代码不会表现得很奇怪。向数据库插入内容后,应插入此数据或引发错误。
您可以通过以下方式强制执行serial
始终如一:
NEW.id=curval('foo_id_seq')
和更新后触发器是否检查NEW.id=OLD.id
并在此检查失败时引发错误,但是由于某些奇怪的原因排除了触发器;