繁体   English   中英

如何将 auto_increment 字段添加到具有大量数据的表中?

[英]How to add auto_increment field to a table with huge data?

假设有一个表table_test ,表中有大约 10M 行数据。 我想添加一个像key这样的 auto_increment 字段来做一些分页工作。 使它工作的最佳方法是什么?

表结构如下:

# table_test

+---------------------------------------+--------------+------+-----+---------+-------+
| Field                                 | Type         | Null | Key | Default | Extra |
+---------------------------------------+--------------+------+-----+---------+-------+
| ad_id                                 | int(64)      | NO   | PRI | NULL    |       |
| account_id                            | varchar(64)  | YES  | MUL | NULL    |       |
| country                               | varchar(64)  | NO   | PRI | NULL    |       |
| image_hash                            | varchar(64)  | YES  |     | NULL    |       |
+---------------------------------------+--------------+------+-----+---------+-------+



| table_test | CREATE TABLE `table_test` (
  `ad_id` int(11) NOT NULL,
  `account_id` varchar(64) DEFAULT NULL,
  `country` varchar(64) NOT NULL,
  `image_hash` varchar(64) DEFAULT NULL,
  PRIMARY KEY (`id`,`country`),
  KEY `account_id` (`account_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 |

更新:

id更改为ad_id ,这里的ad_id是与字段country聚集的唯一键,因此ad_id本身可能会重复。

我会去:

-- drop PK as AUTO increment demands being the PK
ALTER TABLE table_test DROP PRIMARY KEY;
-- add Id as PK and the first column
ALTER TABLE table_test ADD Id INT AUTO_INCREMENT PRIMARY KEY FIRST;
-- make sure the old PK is unique
ALTER TABLE table_test ADD CONSTRAINT table_test_uk UNIQUE (ad_id, country);

也许:

CREATE TABLE table_test2 LIKE table_test;
ALTER TABLE table_test2 DROP PRIMARY KEY;
-- add Id as PK and the first column
ALTER TABLE table_test2 ADD Id INT AUTO_INCREMENT PRIMARY KEY FIRST;
-- make sure the old PK is unique
ALTER TABLE table_test2 ADD CONSTRAINT table_test2_uk UNIQUE (ad_id, country);
INSERT INTO table_test2(ad_id, account_id, country, image_hash)
SELECT ad_id, account_id, country, image_hash FROM table_test;
DROP TABLE table_test;
RENAME TABLE table_test2 TO table_test;

只是改变你的桌子

ALTER TABLE table_test CHANGE id id INT(11) NOT NULL AUTO_INCREMENT;

您已经可以使用 'id' 列作为自动增量(除非您使用 UUID 或其他一些策略)。

您可以查看以下有关如何更改表以向表添加自动增量的答案: ALTER table - added AUTOINCREMENT in MySQL

编辑:如果您希望添加一个将自动递增的新列,您可以使用以下内容:ALTER TABLE table_test ADD id INT AUTO_INCREMENT;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM