代码之家  ›  专栏  ›  技术社区  ›  DeRagan

更改表的唯一字段

  •  3
  • DeRagan  · 技术社区  · 14 年前

    CREATE TABLE testtable(test1 TEXT, test2 TEXT, test3 TEXT, test4 TEXT DEFAULT FALSE,UNIQUE (test1,test2))

    我已经用数据填充了这个表,不想在下一个版本中删除并重新创建这个表。是否有方法更改表的唯一字段。我没有为我的表设置限制。

    我希望我的数据库架构在更新后是这样的。

    CREATE TABLE testtable(test1 TEXT, test2 TEXT, test3 TEXT, test4 TEXT DEFAULT FALSE,UNIQUE (test1))

    1 回复  |  直到 4 年前
        1
  •  7
  •   Daniel Vassallo    14 年前

    在其他DBMSes中,您会使用 ALTER TABLE DROP CONSTRAINT ... RENAME TABLE ADD COLUMN ALTER TABLE 命令( Source

    因此,恐怕您必须创建一个新表:

    CREATE TABLE testtable2(
       test1 TEXT, test2 TEXT, test3 TEXT, test4 TEXT DEFAULT FALSE,
       UNIQUE (test1)
    );
    

    然后将旧表中的数据插入新表:

    INSERT INTO testtable2 SELECT * FROM testtable;
    

    然后您可以删除旧表:

    DROP TABLE testtable;
    

    最后将新表重命名为原始名称:

    ALTER TABLE testtable2 RENAME TO testtable;
    

    小心,你的新约束将不那么宽容。例如,如果原始表中有以下行:

    test1       test2       test3       test4     
    ----------  ----------  ----------  ----------
    a           a           100         1         
    a           b           200         2         
    a           c           300         3         
    

    INSERT INTO testtable2 SELECT * FROM testtable; 会失败因为 test1 不是唯一的:

    SQL error: column test1 is not unique