用redis的list数据结构来批量执行sql语句
高洛峰
高洛峰 2016-11-11 11:23:56
0
2
1372

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

bVFkzX.png

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

bVFkzX.png

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

bVFkzX.png

bVFkzX.png

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

모든 응답 (2)
学霸
insert into base_region(region_name, en_name) values('中国','Zhongguo'), ('北京', 'Beijing'),...,('上海', 'Shanghai') on duplicate key update en_name = values(en_name);

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

需要注意两点:

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

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


    三叔

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

    function getSql() { $fp = fopen('sql.txt', 'r'); while (!feof($fp)) { yield fgets($fp); } } foreach (getSql() as $sql) { executeSql($sql); } function executeSql() { //执行语句 }


      최신 다운로드
      더>
      웹 효과
      웹사이트 소스 코드
      웹사이트 자료
      프론트엔드 템플릿
      회사 소개 부인 성명 Sitemap
      PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!