【问题标题】:How to add new column in table as primary key?如何在表中添加新列作为主键?
【发布时间】:2019-10-09 07:14:45
【问题描述】:

我想知道如何在现有表中添加新列(设置为主键并设置默认值)?我试过了

ALTER TABLE table_name ADD ( column_name VARCHAR (10));
ALTER TABLE table_name  ALTER COLUMN column_name SET DEFAULT 'value1';
ALTER TABLE table_name ADD PRIMARY KEY(column_name);
>> ERROR 1138 (22004): Invalid use of NULL value

我看到了几篇帖子,但它需要删除表中我不想删除的所有现有数据。有没有其他方法可以添加新列作为主键而不删除表中的数据?

我的当前表:

我要创建的新表:

谢谢

【问题讨论】:

  • 请标记您正在使用的数据库。只有当表为空时,您的代码才能工作,因为任何现有行都会为 column_name 获得 NULL 值,这将违反主键约束。
  • 创建一个不同的表并在那里插入你所有的数据。删除旧表。重命名新表。没有数据丢失。
  • @GordonLinoff 嗨,我正在使用 mysql,我编辑了我的问题 :( 而且我不允许清空表格

标签: mysql sql ddl


【解决方案1】:

这样做会产生错误,因为每当您在已经有 1 行或更多行的表中添加新列时,新列将在其所有元组中获得 NULL 值,这与 PRIMARY KEY CAN NOT CONTAIN 的规则相矛盾空。

此外,如果您提供 DEFAULT 值,则主键中也不允许重复条目!

所以仅仅通过在一个非空表中添加一个新列,同时给出默认值并声明它的主键是行不通的。

现在 AUTO_INCREMENT 来拯救,通过递增添加列并将其声明为主键:

ALTER TABLE table_name ADD COLUMN new_column INT AUTO_INCREMENT PRIMARY 关键;

现在可以正常使用了...

感谢您的提问。

【讨论】:

  • :(哦,我发现它使我现有的主键变成了多个键
  • 我添加了我的桌子的样子
  • 首先 DROP PRIMARY KEYS,然后我们将任务分为 3 个步骤:首先,使用 auto_increment 添加列,然后将新列更改为 varchar 删除 auto_increment,然后第三删除主键,然后最后用你想要的列添加主键。---> ALTER TABLE table_name DROP PRIMARY KEY; ---> ALTER TABLE table_name ADD COLUMN newData6 INT AUTO_INCREMENT PRIMARY KEY ; ---> ALTER TABLE table_name 更改 newData6 newData6 VARCHAR(50); ----> ALTER TABLE table_name DROP PRIMARY KEY;---->ALTER TABLE table_name ADD PRIMARY KEY(Data3, Data4, newData6);
【解决方案2】:

您的列中可能包含 Null 值,如果有,请先尝试删除主键约束。

试试这个 DDL:

ALTER TABLE table_name ADD ( column_name VARCHAR (10) SET DEFAULT 'value1');
ALTER TABLE table_name ADD PRIMARY KEY(column_name);

【讨论】:

【解决方案3】:

您的列可能包含空值 如果您的表没有主键并且想要添加一个新列并将其作为主键,请使用以下查询并使用自动增量,以便它是唯一的

ALTER TABLE old_table ADD pk_column INT AUTO_INCREMENT PRIMARY KEY;

【讨论】:

  • 我的表里已经有主键了,这是一个额外的主键
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-04
  • 1970-01-01
  • 1970-01-01
  • 2011-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多