【问题标题】:sql unique and setting constraints on insertssql 唯一性和对插入的设置约束
【发布时间】:2009-08-23 10:06:32
【问题描述】:

我有一个数据库,我需要在其中避免插入重复项。要求是:

对于与第 1 列匹配的行的子集,不能有任何与第 2 列相同的行。

对于与第 1 列匹配的行的子集,不能有任何具有相同第 3 列和第 4 列的行。

我是 SQL 新手,所以有没有办法在创建数据库(创建表)时设置这些关系,或者我必须在插入表之前进行选择并手动进行这些检查?

【问题讨论】:

    标签: sql database sqlite


    【解决方案1】:

    实际上,您需要第 1 列和第 2 列是唯一的,并且第 1,3 和 4 列也是唯一的。所以当你创建表时,你可以使用两个 UNIQUE 常量:

    CREATE TABLE tbl (
      col1 varchar(255),
      col2 varchar(255),
      col3 varchar(255),
      col4 varchar(255),
      CONSTRAINT uc_first UNIQUE(col1, col2),
      CONSTRAINT uc_second UNIQUE(col1, col3, col4)
    )
    

    【讨论】:

    • 谢谢。一件事,有没有办法知道在sqlite中触发了哪个约束?谷歌显示一些人抱怨他们需要进行字符串比较(.IsSameAs("SQLITE_CONSTRAINT[19]: columns 1, 3, 4, are not unique"))。看起来很笨拙。
    【解决方案2】:

    只是为了让球滚动......

    你能在插入和删除重复行之后立即返回吗?

    【讨论】:

    • 呃……客气点。是的你可以;但是不,这样做效率会非常低。
    • 很公平。我从 Todd Owen 的回答中了解到 CONSTRAINT 在创建表时是必需的。我想它可以在创建后更改。回到手册...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-10
    • 1970-01-01
    • 2014-11-18
    • 2013-04-30
    • 1970-01-01
    • 2011-02-17
    • 1970-01-01
    相关资源
    最近更新 更多