尝试从MySQL表中删除主键

Com*_*cus 6 mysql sql

编辑:不确定为什么将其标记为重复项。我得到的错误是不同的

我试图删除主键定义,但由于某种原因收到错误。

mysql> ALTER TABLE `aux_sponsors` DROP PRIMARY KEY;
ERROR 1091 (42000): Can't DROP 'PRIMARY'; check that column/key exists
mysql> desc aux_sponsors;
+-------------+--------------+------+-----+---------+-------+
| Field       | Type         | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------+-------+
| unit        | varchar(8)   | NO   |     | MF      |       |
| code        | varchar(32)  | NO   | PRI | NULL    |       |
| userid      | varchar(32)  | NO   |     |         |       |
| fullName    | varchar(64)  | NO   |     |         |       |
| department  | varchar(255) | NO   |     |         |       |
| description | varchar(255) | NO   |     | NULL    |       |
+-------------+--------------+------+-----+---------+-------+
6 rows in set (0.01 sec)
Run Code Online (Sandbox Code Playgroud)

我在这里做错什么了吗?我只希望该表中不再有主键。

mysql> SHOW CREATE TABLE aux_sponsors;
+--------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table        | Create Table                                                                                                                                                                                                                                                                                                                                                |
+--------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| aux_sponsors | CREATE TABLE `aux_sponsors` (
  `unit` varchar(8) NOT NULL DEFAULT 'MF',
  `code` varchar(32) NOT NULL,
  `userid` varchar(32) NOT NULL DEFAULT '',
  `fullName` varchar(64) NOT NULL DEFAULT '',
  `department` varchar(255) NOT NULL DEFAULT '',
  `description` varchar(255) NOT NULL,
  UNIQUE KEY `code` (`code`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 |
+--------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)

eli*_*ide 5

你没有PRIMARY KEY; 你有一把UNIQUE钥匙。因此,您不能执行以下操作:

ALTER TABLE `aux_sponsors` DROP PRIMARY KEY
Run Code Online (Sandbox Code Playgroud)

相反,只要做

ALTER TABLE `aux_sponsors` DROP KEY `code`
Run Code Online (Sandbox Code Playgroud)

DESC(a / k / a DESCRIBE)不是真正的MySQL功能;根据文档,“提供DESCRIBE语句是为了与Oracle兼容。”

文档中的更多内容:

如果UNIQUE索引不能包含NULL值并且表中没有PRIMARY KEY,则可能显示为PRI。如果几列构成一个复合UNIQUE索引,则UNIQUE索引可能显示为MUL;否则,可能会显示为MUL。尽管各列的组合是唯一的,但各列仍可以容纳多次出现的给定值。

在您的情况下,该列codeNOT NULL并且是UNIQUE键中的唯一列,因此DESC将其显示为PRI。由于这种类型的问题,最好使用它SHOW INDEX来查找表上键的类型。

  • 对于MySQL而言,这似乎是一个非常糟糕的主意-正是由于它使得难以理解表的实际定义的原因。 (2认同)