我有一个包含列ab和c的表,如果c为false,那么我只想允许插入,如果列a和b是唯一的,但如果c为true,则a和b不需要是唯一的.
示例:表中只能有一个(foo,bar,false),但没有限制可以有多少(foo,bar,true).
我试过像CONSTRAINT一样的UNIQUE(a,b)AND CHECK(C为TRUE),但我无法弄清楚正确的语法.
唯一约束适用于所有行,并且无法仅指定某些行.
检查约束仅适用于单行内的验证.
实现您的要求的唯一方法是执行以下任何操作:
1)创建一个存储过程,其中所有INSERT都来自.您可以在此验证所有逻辑.然而,流氓程序/用户可以避免使用它并打败你的逻辑.
2)创建一个触发器,验证您的逻辑并导致无效的插入/更新失败.应该写入一次处理一组行
3)创建一个检查约束,该约束调用用于执行验证检查的用户定义函数.这被认为是一种不好的做法,应该避免,因为它们非常慢并且可能无法进行多行更新.
我推荐选项#2,触发器,因为这正是触发器的设计目标.
| 归档时间: |
|
| 查看次数: |
6812 次 |
| 最近记录: |