我有一个简单的MySQL表,主索引(id)没有逐个编号(1,31,35,100等)。我想让它们编号为(1,2,3,4)。请告诉我怎么做。我还想指出,我知道手术的可能后果,但我只是想整理一下。
答案 0 :(得分:42)
我同意其他方法可行,但我只是提出了不同的想法。这将没有任何临时表创建要求::
SET @i=0;
UPDATE table_name SET column_name=(@i:=@i+1);
答案 1 :(得分:15)
尝试重新编号dalmp(DALMP Database Abstraction Layer for MySQL using PHP.)
的方法$db->renumber('table','uid');
基本上它是这样做的:
SET @var_name = 0;
UPDATE Tablename SET ID = (@var_name := @var_name +1);
ALTER TABLE tablename AUTO_INCREMENT = 1
答案 2 :(得分:4)
最简单的解决方案是:
如果您使用外键,这将破坏您的所有数据,我强烈建议您保留原有的ID。数据库不是不整洁,因为主键不是顺序的,如果数据库的参照完整性(指向其他表中错误或不存在的行的id值)被破坏,则数据库是不整洁的。
答案 3 :(得分:2)
CREATE TABLE newtable
LIKE oldtable
SELECT NULL, col1, col2, col3, etc FROM oldtable;
不包括select中的主键列,而是包括所有其他列。
主键列应该在表格的第一列,或者您需要将NULL
设置为主键列的位置。该列应具有“NOT NULL”设置。否则它将被设置为null,这是毫无意义的。
这样做的原因是因为MySQL喜欢忽略auto_increments上的NULL插入,而是为它创建一个新数字(假设null不是该列上的有效值)。
答案 4 :(得分:2)
后来感谢评论。
答案 5 :(得分:0)