現在資料庫中有3千多筆這樣的記錄,每筆記錄中有地區中文名和地區英文名(如下圖)
我現在想用redis的佇列lpush和rpop實作批次更新,sql語句我已經寫好了(如下圖)
程式碼我是這樣寫的(如下圖),我把3千多條sql語句存進list中(lpush),準備每次取出來一條執行(rpop),逐條執行,接下來不知道怎麼寫了,請教大家接下來怎麼寫,現在已經把sql語句放到list中了;還有我cli下查看list的值,中文好像有亂碼(如下圖),我啟動cli時加了--raw,請大家解答一下
謝謝大家~
現在資料庫中有3千多筆這樣的記錄,每筆記錄中有地區中文名和地區英文名(如下圖)
我現在想用redis的佇列lpush和rpop實作批次更新,sql語句我已經寫好了(如下圖)
程式碼我是這樣寫的(如下圖),我把3千多條sql語句存進list中(lpush),準備每次取出來一條執行(rpop),逐條執行,接下來不知道怎麼寫了,請教大家接下來怎麼寫,現在已經把sql語句放到list中了;還有我cli下查看list的值,中文好像有亂碼(如下圖),我啟動cli時加了--raw,請大家解答一下
謝謝大家~
謝邀
其實不用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>
<code>insert into base_region(region_name, en_name) values('中国','Zhongguo'), ('北京', 'Beijing'),...,('上海', 'Shanghai') on duplicate key update en_name = values(en_name);</code>
一句開銷極小的sql就搞定(一個資料庫連接,效能跟批量insert into資料差不多)。
要注意兩點:
values(),(),(),() 中()的值需要你用for迴圈拼接好
region_name 必須是唯一索引,你可以暫時先對這個欄位加上一個唯一索引,然後這個sql執行結束後,drop掉