【发布时间】:2012-01-18 20:33:08
【问题描述】:
我刚刚发现我的生产服务器上的一个表(包含大约 35K 条记录)在具有 AUTO_INCREMENT 的 INT(11) 列中包含 588 个重复条目。 该列上缺少 UNIQUE 键,因此这可能是原因。
关于如何为所有重复条目提供唯一 ID,然后将 UNIQUE 键添加到列中以防止再次发生这种情况的任何想法?
表架构:
CREATE TABLE `items` (
`item_ID` int(11) unsigned NOT NULL auto_increment,
`u_ID` int(10) NOT NULL default '0',
`user_ID` int(11) NOT NULL default '0',
`p_ID` tinyint(4) NOT NULL default '0',
`url` varchar(255) NOT NULL,
`used` int(10) unsigned NOT NULL,
`sort` tinyint(4) NOT NULL,
`last_checked` int(11) NOT NULL,
`unixtime` int(11) NOT NULL,
`switched` int(11) NOT NULL,
`active` tinyint(1) NOT NULL default '0',
UNIQUE KEY `unique` (`p_ID`,`url`),
KEY `index` (`u_ID`,`item_ID`,`sort`,`active`),
KEY `index2` (`u_ID`,`switched`,`active`),
KEY `item_ID` (`item_ID`),
KEY `p_ID` (`p_ID`),
KEY `u_ID` (`u_ID`)
) ENGINE=MyISAM AUTO_INCREMENT=42755 DEFAULT CHARSET=utf8
【问题讨论】:
-
您不需要 auto_increment 列上的唯一键,它必须在
show create table中被标识为主键。您可以发布您的架构吗? -
不确定如何获得一个好的架构
DESC tablename在 PHPMyAdmin 中不能很好地输出它 -
您有权访问服务器?您可以从 mysql cli 发出命令:
show create table。我很想知道您如何能够将 auto_increment 添加到列而不将其标识为PRIMARY KEY (id) -
你可以有一个不是主键的 auto_increment。它所需要的只是一个简单的索引。
-
如果
item_id没有在其他表中用作外键,您可以简单地删除该列并将其重新创建为AUTO_INCREMENT PRIMARY KEY
标签: mysql auto-increment unique-index