编辑:不确定为什么将其标记为重复。我得到的错误是不同的
我正在尝试删除主键定义但由于某种原因收到错误。
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)
答案 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."
如果UNIQUE索引不能包含NULL值并且表中没有PRIMARY KEY,则它可能显示为PRI。如果多个列形成复合UNIQUE索引,则UNIQUE索引可以显示为MUL;虽然列的组合是唯一的,但每列仍然可以保存给定值的多次出现。
在您的情况下,code
列是NOT NULL
,并且是UNIQUE
键中的唯一列,因此DESC
将其显示为PRI
。由于这类问题,最好使用SHOW INDEX
来查找表格上的键类型。