Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MySQL数据库中,如何添加新列并使其成为主键?_Mysql_Sql_Primary Key - Fatal编程技术网

在MySQL数据库中,如何添加新列并使其成为主键?

在MySQL数据库中,如何添加新列并使其成为主键?,mysql,sql,primary-key,Mysql,Sql,Primary Key,在MySQL数据库中,如何添加新列并使其成为主键?db已经有四列,其中一列是主键 alter table t1 add column col1 varchar(20); alter table t1 add primary key (columnname); 编辑: 如果您使用“show create table tablename”命令,您将看到包含PK的结构,如果您想删除它,您可以 alter table tablename删除主键,然后重新创建索引 另一种可能的解决方案是创建唯一索引,

在MySQL数据库中,如何添加新列并使其成为主键?db已经有四列,其中一列是主键

alter table t1 add column col1 varchar(20);

alter table t1 add primary key (columnname);
编辑:

如果您使用“
show create table tablename
”命令,您将看到包含PK的结构,如果您想删除它,您可以

alter table tablename删除主键
,然后重新创建索引

另一种可能的解决方案是创建唯一索引,它用作主键,只有唯一键允许您决定它是否为null,并且每个表可以有多个索引

alter table t1 add unique key (columnname);

如果您的表很大,最好在一个查询中运行此查询以加快速度。

我不需要更改上一个主键列吗?我得到了
错误1068(42000):定义了多个主键
这是因为您已经有了主键,并且您只有一个主键,我编辑了我的answetRight。这就是为什么我认为你上面给出的并不是一个真正的解决方案。我需要新列是主键,而不是唯一键。然后,您需要删除您已经拥有的实际PK,尝试使用我给您的命令“show create table tablename”,然后您将看到结构,请记住,每个table不能有多个PK。为了安全起见,我想添加新列。让它成为主键。然后删除上一个主键。并分别删除上一个主键列。+1似乎至少不会出现
错误1068(42000):定义了多个主键的问题。新列已添加。所以我会做
altertablefoo删除主键,添加主键(bar)?已添加新列。所以我只需要做
altertablefoo删除主键,添加主键(bar)
ALTER TABLE foo ADD COLUMN bar int, DROP PRIMARY KEY, ADD PRIMARY KEY(bar);