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

时间:2019-05-22 18:28:38

标签: mysql sql ddl

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

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

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

我当前的表格:

Current table

我要创建的新表:

new table

谢谢

3 个答案:

答案 0 :(得分:1)

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

此外,如果您提供DEFAULT值,那么主键中也不允许重复输入!

因此,仅通过在非空表中添加默认值并同时声明其主键,就无法正常工作。

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

  

ALTER TABLE table_name添加列new_column INT AUTO_INCREMENT PRIMARY   密钥;

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

感谢您的提问。

答案 1 :(得分:0)

您的列中可能有Null值,并且如果有的话,也尝试首先删除主键约束。

尝试此DDL:

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

答案 2 :(得分:0)

您的列可能具有空值 如果您的表没有主键,并且想添加一个新列并将其用作主键,请使用以下查询并使用自动递增,使其唯一。

ALTER TABLE old_table ADD pk_column INT AUTO_INCREMENT PRIMARY KEY;