尝试从MySQL表中删除主键

时间:2014-07-09 16:25:21

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

我在这里做错了吗?我只想在这个表中不再需要主键。

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)

1 个答案:

答案 0 :(得分:2)

你没有PRIMARY KEY;你有一个UNIQUE密钥。所以,你不能这样做:

ALTER TABLE `aux_sponsors` DROP PRIMARY KEY

相反,只需做

ALTER TABLE `aux_sponsors` DROP KEY `code`

DESC(a / k / a DESCRIBE)不是真正的MySQL功能; according to the docs, "The DESCRIBE statement is provided for compatibility with Oracle."

More from the documentation:

  

如果UNIQUE索引不能包含NULL值并且表中没有PRIMARY KEY,则它可能显示为PRI。如果多个列形成复合UNIQUE索引,则UNIQUE索引可以显示为MUL;虽然列的组合是唯一的,但每列仍然可以保存给定值的多次出现。

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