Maison > développement back-end > tutoriel php > 用redis的list数据结构来批量执行sql语句

用redis的list数据结构来批量执行sql语句

WBOY
Libérer: 2016-09-01 00:20:16
original
2200 Les gens l'ont consulté

现在数据库中有3千多条这样的记录,每条记录中有地区中文名和地区英文名(如下图)

用redis的list数据结构来批量执行sql语句

我现在想用redis的队列lpush和rpop实现批量更新,sql语句我已经写好了(如下图)

用redis的list数据结构来批量执行sql语句

代码我是这样写的(如下图),我把3千多条sql语句存进list中(lpush),准备每次取出来一条执行(rpop),逐条执行,接下来不知道怎么写了,请教大家接下来怎么写,现在已经把sql语句放到了list中;还有我cli下查看list的值,中文好像有乱码(如下图),我启动cli时加了 --raw,请大家解答一下

用redis的list数据结构来批量执行sql语句

用redis的list数据结构来批量执行sql语句

谢谢大家~

回复内容:

现在数据库中有3千多条这样的记录,每条记录中有地区中文名和地区英文名(如下图)

用redis的list数据结构来批量执行sql语句

我现在想用redis的队列lpush和rpop实现批量更新,sql语句我已经写好了(如下图)

用redis的list数据结构来批量执行sql语句

代码我是这样写的(如下图),我把3千多条sql语句存进list中(lpush),准备每次取出来一条执行(rpop),逐条执行,接下来不知道怎么写了,请教大家接下来怎么写,现在已经把sql语句放到了list中;还有我cli下查看list的值,中文好像有乱码(如下图),我启动cli时加了 --raw,请大家解答一下

用redis的list数据结构来批量执行sql语句

用redis的list数据结构来批量执行sql语句

谢谢大家~

谢邀
其实不用redis就可以, 你把所有的SQL放在一个文件中, 读一条执行一条, 不就行了?

<code class="php">function getSql()
{
    $fp = fopen('sql.txt', 'r');
    while (!feof($fp)) {
        yield fgets($fp);
    }
}

foreach (getSql() as $sql) {
    executeSql($sql);
}

function executeSql()
{
    //执行语句
}</code>
Copier après la connexion

<code>insert into base_region(region_name, en_name) values('中国','Zhongguo'), ('北京', 'Beijing'),...,('上海', 'Shanghai') on duplicate key update en_name = values(en_name);</code>
Copier après la connexion

一句开销极小的sql就搞定(一个数据库连接,性能跟批量insert into数据差不多)。

需要注意两点:

  1. values(),(),(),() 中()的值需要你用for循环拼接好

  2. region_name 必须是唯一索引,你可以临时先对这个字段添加一个唯一索引,然后这个sql执行结束后,drop掉

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal