1

私はこの方法で主キーをリセットできることを知っています:

ALTER TABLE `users` DROP `id`;
ALTER TABLE `users` AUTO_INCREMENT = 1;
ALTER TABLE `users` ADD `id` int UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST;

しかし、タイムスタンプ列のタイムスタンプに従って主キーを適用するようにこれをどのように適応させることができるのか疑問に思っています。つまり、タイムスタンプが最も古い行が値1、次に古い、値2などを取得します。

SHOWCREATETABLEの出力

CREATE TABLE `tracks` (
 `id` int(10) unsigned NOT NULL auto_increment,
 `timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP,
 `from_user` varchar(50) NOT NULL,
 `source_filename` varchar(80) NOT NULL,
 `uploaded_page` varchar(50) NOT NULL,
 `operating_system` varchar(50) NOT NULL,
 `browser` varchar(50) NOT NULL,
 `os_browser_version` varchar(200) NOT NULL,
 `title` varchar(100) NOT NULL,
 `artist` varchar(60) NOT NULL,
 `album` varchar(120) NOT NULL,
 `genre` varchar(120) NOT NULL,
 `format` varchar(10) NOT NULL,
 `bitrate` mediumint(9) NOT NULL,
 `conversion_needed` tinyint(1) NOT NULL COMMENT 'if not mp3, or higher than 192kbps',
 `conversion_successful` tinyint(1) NOT NULL,
 `art_extracted` tinyint(1) NOT NULL,
 `art_location` varchar(200) NOT NULL,
 `file_location` varchar(200) NOT NULL,
 `status` varchar(500) NOT NULL,
 PRIMARY KEY  (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=96 DEFAULT CHARSET=utf8
4

2 に答える 2

3

users2次と同じ構造を持つという新しいテーブルを作成しますusers

CREATE TABLE users2 LIKE users;

次に、次のステートメントを実行します。

INSERT INTO users2
(col1, col2, ... coln)
SELECT col1, col2, ... coln
FROM users
ORDER BY your_timestamp

特定のテーブルの場合:

INSERT INTO tracks2
(`timestamp`,`from_user`,`source_filename`,`uploaded_page`,`operating_system`,`browser`,`os_browser_version`,`title`,`artist`,`album`,`genre`,`format`,`bitrate`,`conversion_needed`,`conversion_successful`,`art_extracted`,`art_location`,`file_location`,`status`)
SELECT `timestamp`,`from_user`,`source_filename`,`uploaded_page`,`operating_system`,`browser`,`os_browser_version`,`title`,`artist`,`album`,`genre`,`format`,`bitrate`,`conversion_needed`,`conversion_successful`,`art_extracted`,`art_location`,`file_location`,`status`
FROM tracks
ORDER BY timestamp
于 2012-07-24T23:04:34.507 に答える
2

あなたがすでに答えを受け入れていることは知っていますが、後世のために、もっと簡単な解決策でチャイムを鳴らしたいと思います。MySQLでは、を使用してテーブルの行を並べ替えることができるため、元の例にもう1つのステートメントをALTER TABLE...ORDER BY...追加することで、これを簡単に行うことができます。ALTER TABLE

ALTER TABLE `users` DROP COLUMN `id`;
ALTER TABLE `users` ORDER BY `timestamp`;
ALTER TABLE `users` AUTO_INCREMENT = 1;
ALTER TABLE `users` ADD COLUMN `id` int UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST;
于 2012-07-24T23:48:55.070 に答える