Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在mysql中更新超过百万条记录的最佳方法_Php_Mysql_Sql Update_Rows_Records - Fatal编程技术网

Php 在mysql中更新超过百万条记录的最佳方法

Php 在mysql中更新超过百万条记录的最佳方法,php,mysql,sql-update,rows,records,Php,Mysql,Sql Update,Rows,Records,我有一个mysql表,有超过一百万行的用户信息。我想在该表中添加一列“password”,随机生成password并使用PHP更新所有记录。 执行此任务的最快方法是什么? 提前感谢。可能的情况 使用php脚本将所有密码生成到一个文件中 创建临时表,并使用该临时表是从文件导入数据以从密码文件加载数据的最快方法。 更改表并添加密码列 使用UPDATE with join从临时表更新原始表中的密码列 下降温度表 可能的情况 使用php脚本将所有密码生成到一个文件中 创建临时表,并使用该临时表是从文件导

我有一个mysql表,有超过一百万行的用户信息。我想在该表中添加一列“password”,随机生成password并使用PHP更新所有记录。 执行此任务的最快方法是什么? 提前感谢。

可能的情况

使用php脚本将所有密码生成到一个文件中 创建临时表,并使用该临时表是从文件导入数据以从密码文件加载数据的最快方法。 更改表并添加密码列 使用UPDATE with join从临时表更新原始表中的密码列 下降温度表 可能的情况

使用php脚本将所有密码生成到一个文件中 创建临时表,并使用该临时表是从文件导入数据以从密码文件加载数据的最快方法。 更改表并添加密码列 使用UPDATE with join从临时表更新原始表中的密码列 下降温度表
请记住,更改表格的操作可能需要很长时间,我建议将这两个步骤分开

1修改表,这里我建议使用伪代码执行以下步骤:

像旧表一样创建新表 alter new_表添加列密码 插入到新表列中,从旧表中选择* 将旧表重命名为旧表,将新表重命名为旧表 放下旧桌子 此时,您就有了包含新列的原始表

2现在,在更改结构后,可以使用php填充新列“password”。如果您使用InnoDB作为存储引擎,时间并不重要,因为您没有用更新锁定表。如果在事务中执行此操作,我建议将更新过程分解为较小的事务,而不是插入一个较大的批量


如果您不能将停机时间降至最低,我建议您查看pt online schema change,我们在主要数据库上使用此工具,在数据库运行时,我们无法在任何停机时间进行模式更改。它大致执行上述步骤1,并在触发器的帮助下确保在执行alter过程时插入到原始表中的数据也写入到修改后的表中

请记住,更改表格的操作可能需要很长时间,我建议将这两个步骤分开

1修改表,这里我建议使用伪代码执行以下步骤:

像旧表一样创建新表 alter new_表添加列密码 插入到新表列中,从旧表中选择* 将旧表重命名为旧表,将新表重命名为旧表 放下旧桌子 此时,您就有了包含新列的原始表

2现在,在更改结构后,可以使用php填充新列“password”。如果您使用InnoDB作为存储引擎,时间并不重要,因为您没有用更新锁定表。如果在事务中执行此操作,我建议将更新过程分解为较小的事务,而不是插入一个较大的批量


如果您不能将停机时间降至最低,我建议您查看pt online schema change,我们在主要数据库上使用此工具,在数据库运行时,我们无法在任何停机时间进行模式更改。它大致执行上述步骤1,并在触发器的帮助下确保在执行alter过程时插入到原始表中的数据也写入到修改后的表中

您将如何存储密码?如果您使用合理的散列函数,那么这肯定是需要最长时间的单个任务。我正在使用循环中的PHP rand生成密码。但是,作为替代方法,如果可以接受的话,此方法需要很长时间,请将密码列添加到表中,并在需要时为用户生成密码。这样,它将随着时间的推移而不是一次全部传播。您将如何存储密码?如果您使用合理的散列函数,那么这肯定是需要最长时间的单个任务。我正在使用循环中的PHP rand生成密码。但是,作为替代方法,如果可以接受的话,此方法需要很长时间,请将密码列添加到表中,并在需要时为用户生成密码。这样,它将随着时间的推移而不是一下子传播。亲爱的选民们,不要害羞。让我们听听反对票是怎么回事?亲爱的反对票不要害羞。让我们听听否决票是怎么回事?