加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

SQL:当列为特定值时的唯一约束

发布时间:2020-12-12 16:52:36 所属栏目:MsSql教程 来源:网络整理
导读:CREATE TABLE foo ( dt AS DATE NOT NULL,type AS TEXT NOT NULL,CONSTRAINT unique_dt_type UNIQUE(dt,type) -- check constraint(?)) 当只有一个特定的条件存在时,尝试思考正确的语法来创建一个唯一的约束时,有一个脑袋. 给定,类型可以具有值A-F,每个日期
CREATE TABLE foo (
   dt     AS DATE NOT NULL,type   AS TEXT NOT NULL,CONSTRAINT unique_dt_type UNIQUE(dt,type) -- check constraint(?)
)

当只有一个特定的条件存在时,尝试思考正确的语法来创建一个唯一的约束时,有一个脑袋.

给定,类型可以具有值A-F,每个日期只能有一个A,但可以有多个B-F.好表示例:

2010-01-02 | 'A'  -- only one
2010-01-02 | 'B'  -- can have multiple
2010-01-02 | 'B'
2010-01-02 | 'B'
2010-01-02 | 'C'  -- can have multiple
2013-01-02 | 'A'  -- only one
2010-01-02 | 'B'  -- can have multiple
2010-01-02 | 'B'
2013-01-02 | 'F'  -- can have multiple
2013-01-02 | 'F'

尝试阅读检查/唯一的语法,但没有任何例子. CHECK接近,但仅限于一个范围,并未与UNIQUE情景一起使用.也尝试搜索,但是我的搜索技能要么不符合标准,要么没有任何类似的问题.

解决方法

PostgreSQL可以通过它的“部分索引”功能来满足您的需求.实际上,这是通过在创建索引语句中添加一个where子句来实现的.

样品:

CREATE INDEX my_partial_ix ON my_sample_table (my_sample_field)
WHERE NOT (my_sample_field = 'duplicates ok');

看看这里:
http://www.postgresql.org/docs/current/interactive/indexes-partial.html

请特别注意示例11-3.建立部分独特指数.它给出了一个与您明确目标一致的例子.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读