删除MySQL中的主键

17 浏览
0 Comments

删除MySQL中的主键

我有以下的表结构,它将用户与权限在一个实时的MySQL数据库上进行了映射:

mysql> describe user_customer_permission;
+------------------+---------+------+-----+---------+----------------+
| Field            | Type    | Null | Key | Default | Extra          |
+------------------+---------+------+-----+---------+----------------+
| id               | int(11) | NO   | PRI | NULL    | auto_increment |
| user_customer_id | int(11) | NO   | PRI | NULL    |                |
| permission_id    | int(11) | NO   | PRI | NULL    |                |
+------------------+---------+------+-----+---------+----------------+
3 rows in set (0.00 sec)

我想要删除user_customer_id和permission_id的主键,并保留id的主键。

当我运行以下命令时:

alter table user_customer_permission drop primary key;

我得到以下错误:

ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key

如何删除一个列的主键?

0
0 Comments

从上面的内容可以得出以下结论:

问题的原因是用户错误地认为他在每个字段上都有三个主键,但实际上只能有一个主键。用户可以通过删除现有的三列主键并在一列上创建新的主键来解决这个问题。

解决方法如下:

1. 删除现有的主键:

ALTER TABLE 表名 DROP PRIMARY KEY;

2. 创建新的主键:

ALTER TABLE 表名 ADD PRIMARY KEY (列名);

通过执行上述两个语句,用户可以成功删除现有的主键,并在单个列上创建新的主键。

0
0 Comments

问题出现的原因是,没有索引的情况下,维护自增列会变得非常昂贵,这就是为什么MySQL要求自增列是索引的最左边部分。

解决方法是,在删除主键之前,先移除自增属性:

ALTER TABLE user_customer_permission MODIFY id INT NOT NULL;
ALTER TABLE user_customer_permission DROP PRIMARY KEY;

请注意,您有一个覆盖了所有三个列的复合主键,并且id不能保证是唯一的。

如果id确实是唯一的,您可以将其重新设置为主键和自增列:

ALTER TABLE user_customer_permission MODIFY id INT NOT NULL PRIMARY KEY AUTO_INCREMENT;

如果您恢复了主键,那么您可以将其还原为自增列。

"autoincrement column to be a leftmost part of the PRIMARY KEY." 是什么意思?

这是指在InnoDB表中使用AUTO_INCREMENT机制时,必须将AUTO_INCREMENT列定义为索引的一部分,以便可以执行类似于索引查找的SELECT MAX(ai_col)操作来获取最大列值。通常,可以通过将该列作为某个表索引的第一列来实现这一点。

"PRIMARY is not defined. Why this occurs? So I had to delete and add again the ID column without specifying primary key" 的意思是什么?

这是指主键未定义。为什么会出现这种情况,我不知道。可能需要提供更多细节才能解决问题。

0
0 Comments

问题出现的原因:删除MySQL中的主键。解决方法:使用ALTER TABLE命令删除主键并重新添加主键。这种方法不会丢失自增属性,并且不需要重新添加自增属性可能导致的副作用。这种方法还可以在被修改的表上存在外键约束的情况下进行修改。对于一些情况下直接删除主键无效的情况,这种解决方法是有效的。

0