【问题标题】:How to build unique constraints in SQLite如何在 SQLite 中构建唯一约束
【发布时间】:2016-11-19 10:22:51
【问题描述】:

我一直在尝试关注this 示例,了解如何在 SQLite 中构建约束。

我创建了一个表:

CREATE TABLE `users` (
    `user_id`   INTEGER NOT NULL DEFAULT 1 PRIMARY KEY AUTOINCREMENT,
    `row_id`    INTEGER NOT NULL,
    unique (user_id, row_id)
)

比我一直试图插入:

  • insert into users(user_id, row_id) values(1, 13)
  • insert into users(user_id, row_id) values(2, 13)

在第二次插入查询中失败并显示下一条消息:

UNIQUE 约束失败:users.user_id:插入用户(user_id, row_id) 值(2, 13)

我想允许下一行:

1,13
2,13
1,5

并禁止那些

1,13
1,13

【问题讨论】:

    标签: sqlite constraints


    【解决方案1】:

    PRIMARY KEY 设计为 UNIQUENOT NULL 所以 user_id 必须是 UNIQUE

    那么你在user_idrow_id 列上有UNIQUE 约束。


    你可以使用组合PRIMARY KEY:

    CREATE TABLE `users` (
        `user_id`   INTEGER NOT NULL,
        `row_id`    INTEGER NOT NULL,
        PRIMARY KEY (user_id, row_id)
    );
    
    INSERT INTO users(user_id, row_id) VALUES(1, 13);
    INSERT INTO users(user_id, row_id) VALUES(2, 13);
    INSERT INTO users(user_id, row_id) VALUES(1, 5);
    
    INSERT INTO users(user_id, row_id) VALUES(1, 13);
    -- Error: UNIQUE constraint failed: users.user_id, users.row_id
    

    SqlFiddleDemo

    【讨论】:

      【解决方案2】:

      主键导致问题,一旦列被定义为主键,它就不能被复制。请尝试删除主键。

      CREATE TABLE `users` (
      `user_id`   INTEGER AUTO INCREMENT NOT NULL DEFAULT 1,
      `row_id`    INTEGER NOT NULL,
      unique (user_id, row_id)
      

      )

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-07-12
        • 1970-01-01
        • 1970-01-01
        • 2013-03-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-11
        相关资源
        最近更新 更多