检查表定义中的条件

时间:2016-02-11 09:49:24

标签: sql postgresql

我有如下表格(Postgresql 9.3):

CREATE TABLE tab
(
  id integer NOT NULL;
  name citext NOT NULL,
  isdefault boolean default false
);

我想添加checkisdefault = True不接受多条记录triggers。我知道我可以用Check Constraints来做,但我读到了 <div class="row" > <div class="aboutanimate"> <div id="about" class="section scrollspy"> <div class="container"> <h2 class="wow animated shake" style="text-decoration:underline;text-align:center;font-weight:bold;font-family:Comic Sans MS">About Us</h2><br><br> <div class="quot animated shake"> <h5 style="color:#446CB3;padding-top:30px;text-decoration:underline;font-weight:bold;font-size:35px;font-family:Comic Sans MS">Vision</h5> <p id="vision">"Lorem ipsem Lorem ipsemLorem ipsemLorem ipsemLorem ipsemLorem ipsem</p> <h5 style="color:#446CB3;text-decoration:underline;font-weight:bold;font-size:35px;font-family:Comic Sans MS">Mission</h5> <p id="vision">"Lorem ipsemLorem ipsemLorem ipsemLorem ipsemLorem ipsemLorem ipsem"</p> <h5 style="color:#446CB3;text-decoration:underline;font-weight:bold;font-size:35px;font-family:Comic Sans MS">Objectives</h5> <p id="vision">"Lorem ipsemLorem ipsemLorem ipsemLorem ipsemLorem ipsemLorem ipsemLorem ipsem"</p><br><br><br> </div> </div> </div> </div><br><br> ,并想知道是否可以用它完成。

2 个答案:

答案 0 :(得分:3)

使用部分唯一索引:

create unique index on tab (isdefault)
where isdefault ;

这样您也可以在该列中存储false。我个人更喜欢将boolean列设置为not null,这样我就不必在布尔表达式中处理null值,而只需处理truefalse。< / p>

where子句导致仅使用isdefault = true索引 行。 isdefault = false(或null)的行未编入索引。因此索引永远不会包含多行。

索引列在这里并不重要。如果您经常查询名称列(对于该单行),您可能希望在该列上创建索引,以便查询可以从索引中获取所有内容。

答案 1 :(得分:0)

添加UNIQUE约束。 (有一个TRUE值,其余为NULL。)

{{1}}

检查约束只是为了确保isdefault为TRUE(一行)或NULL。