通过按字母顺序排列的MySQL表

时间:2013-02-12 19:00:34

标签: mysql

我的表格包含应用程序的设置,其中包含以下列: id key value

id 列是自动递增的,但截至当前,我不使用它,也没有任何外键约束。我正在填充设置,并希望对其进行重组,因此它们是按字母顺序排列的,因为我没有按照这种方式设置设置,但按字母顺序重新排序有助于将相关设置组合在一起。

例如,如果我有以下设置:

ID     KEY             VALUE
======================================
1      App.Name        MyApplication
2      Text.Title      Title of My App
3      App.Version     0.1

我希望将所有App。*设置按顺序组合在一起,而不必每次都进行ORDER BY。无论如何,这就是解释。我有tried the following,似乎没有改变顺序:

CREATE TABLE mydb.Settings2 LIKE mydb.Settings;
INSERT INTO mydb.Settings2 SELECT `key`,`value` FROM mydb.Settings ORDER BY `key` ASC;
DROP TABLE mydb.Settings;
RENAME TABLE mydb.Settings2 TO mydb.Settings;

这将按建议复制表格,但不会重组数据。我在这里错过了什么?

2 个答案:

答案 0 :(得分:3)

重新排序表的简便方法是使用ALTER TABLE table ORDER BY column ASC。您尝试的查询看起来应该有效,但我知道ALTER TABLE查询有效;我经常使用它。

注意:重新排序表中的数据只适用于MyISAM表,并且有意义。 InnoDB始终以PRIMARY KEY顺序存储数据,因此无法重新排列。

答案 1 :(得分:2)

决定回答这个问题。

正如我在对初始答案的评论中所说,为了实现长期效果,您需要使用键列作为PRIMARY KEY重新创建设置表。因为G-Nugget正确地说'InnoDB总是以PRIMARY KEY顺序存储数据'。

你可以这样做

CREATE TABLE settings2
    (`id` int NULL, `key` varchar(64), `value` varchar(64), PRIMARY KEY(`key`));
INSERT INTO settings2 
SELECT id, `key`, `value` 
  FROM settings;
DROP TABLE settings;
RENAME TABLE settings2 TO settings;

这样,您可以在插入新记录后完成订单。

如果您不需要id表格中的初始settings列,那么现在是放弃它的好时机。

这是有效的sqlfiddle

免责声明:就我个人而言,我会使用ORDER BY