2016-03-08 128 views
0

我拥有超过1600万行的MySQL表,并且没有主键。每当我尝试添加一个,我的连接崩溃。我曾尝试在PHPMyAdmin和命令行中添加一个自动增量,但连接总是在大约10分钟后丢失。使用PHP/MySQL循环更新当前行

我想要做的是循环遍历PHP中的表格行,这样我可以限制结果的数量,每个返回的行添加一个自动递增的ID号。由于减少MySQL查询的负载可以减少受影响的行数,所以我不会失去连接。

我要像做

SELECT * FROM MYTABLE LIMIT 1000001, 2000000; 

然后,在循环中,更新当前行

UPDATE (current row) SET ID='$i++' 

我该怎么办呢?

我也对MySQL解决方案开放。我只需要一个不会导致我失去MySQL连接的进程

注意:原始数据作为txt文件提供给我。我不知道是否有重复,但我不能消除任何行。另外,不会添加行。此表将仅用于查询目的。但是,当我添加索引时,没有问题。

回答

0

这是比较容易

ALTER TABLE table_name MODIFY COLUMN id INT NOT NULL AUTO_INCREMENT PRIMARY KEY

如果你想删除的修改后的主键

ALTER TABLE table_name MODIFY COLUMN id INT

+0

我试过,但 – tcam27

0

我会避免手动设置主键。让MySQL做到这一点更安全。您可以临时增加超时在配置文件中:

wait_timeout = 28800 
interactive_timeout = 28800 
+0

我没有访问根据您的设置配置文件 – tcam27

+0

我的连接会约10分钟后消失,您可以使用SQL命令更改配置设置。请参阅MySQL网站获取文档。 – LambethWalk