【问题标题】:Alter Table Primary key - Crate DB更改表主键 - Crate DB
【发布时间】:2017-12-14 01:44:52
【问题描述】:

我想更改我的 Crate DB 中的表以更改主键约束以将一列添加到现有的。如果我需要删除约束并创建一个新约束,那么相同的 SQL 语法是什么。我一直在尝试传统的 SQL 语法,但它似乎不起作用:

alter table my_data_table drop primary key; 

上面的命令报错:

SQLActionException[SQLParseException: line 1:34: no viable alternative at input 'alter table my_data_table drop']

我检查了 Alter table SQL 参考,只能找到添加列的方法,但对更改约束一无所知。因此,如果您知道如何执行此操作,请告诉我。
干杯!

【问题讨论】:

  • 你用的是什么数据库?
  • 它是一个 Crate DB crate.io

标签: cratedb


【解决方案1】:

一旦创建表,就无法更改主键。您需要创建一个具有您想要的架构的新表,然后使用COPY TOCOPY FROMinsert into to_table (i) (select ... from t) 移动数据。使用 CrateDB > 2.0 还可以重命名表,因此您仍然可以使用原始表名。

【讨论】:

    【解决方案2】:

    首先使用以下代码sn-ps查找约束

    SELECT Col.Column_Name from 
        INFORMATION_SCHEMA.TABLE_CONSTRAINTS Tab, 
        INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE Col WHERE 
           Col.Constraint_Name = Tab.Constraint_Name
           AND Col.Table_Name = Tab.Table_Name
           AND Constraint_Type = 'PRIMARY KEY'
           AND Col.Table_Name = '<your table name>'
    

    然后使用它来删除约束

    ALTER TABLE Customer DROP CONSTRAINT Constraint_Name;
    

    P.S:考虑到您使用的是 SQL SERVER

    【讨论】:

    • 谢谢,但我使用的是 Crate DB 而不是 SQL Server,这将无法正常工作。
    • 来自documentaion,“只有在表为空时才能添加主键列。”如果您的表尚不包含任何数据,您可以轻松更新表创建命令。如果表格有内容,那么很抱歉您不能更改主键(但可以添加另一列 (using alter table))。
    猜你喜欢
    • 2021-11-10
    • 2022-11-21
    • 1970-01-01
    • 2016-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-04
    相关资源
    最近更新 更多