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

标签 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

谢谢

最佳答案

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

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

因此,仅通过提供默认值并同时声明其主键来在非空表中添加一个新列是行不通的。

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

ALTER TABLE table_name ADD COLUMN new_column INT AUTO_INCREMENT PRIMARY KEY ;

这现在工作正常......

感谢您的提问。

关于mysql - 如何在表中添加新列作为主键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56262917/

相关文章:

Java - 如何从数据库中获取所有行数据

mysql - 依靠 SQL

sql - 通过高事务隔离级别防止更新丢失 : Is this a common misconception?

bool 值更改时删除 MySQL 外部约束

JPA/EclipseLink - 使用一条 SQL 语句创建多行脚本源

sql - MacOS 的 DB 素描器?

mysql - 在 MySql 中创建表问题

mysql - 使用 MySQL 创建简单修订系统的最佳方法是什么?

mysql - 如何在 WebService 调用中使用 %20 而不在 UITextField 中显示它

sql - 如何在 SQL Server 中使 WHERE CLAUSE 区分大小写