如何在 table 中添加新列作为主键?

How to add new column in table as primary key?

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

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

我看到了几篇帖子,但它要求删除 table 中的所有现有数据,我不想这样做。有没有其他方法可以在不删除 table 中的数据的情况下将新列添加为主键?

我现在的 table:

我要创建的新 table:

谢谢

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

试试这个 DDL:

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

这样做会产生错误,因为每当您在已经有 1 行或多行的 table 中添加新列时,新列的所有元组都会获得 NULL 值,这与以下规则相矛盾说 PRIMARY KEY CAN NOT CONTAIN NULL.

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

因此,仅在 non-empty table 中添加一个新列并同时声明其主键是行不通的。

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

ALTER TABLE table_name ADD COLUMN new_column INT AUTO_INCREMENT PRIMARY KEY ;

这现在工作正常...

谢谢提问。

您的列可能有空值 如果您的 table 没有主键并想添加一个新列并将其作为主键,请使用以下查询并使用自动递增,这样它将是唯一的

ALTER TABLE old_table ADD pk_column INT AUTO_INCREMENT 主键;