現在資料庫中有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放在一個檔案中, 讀一條執行一條, 不就行了?
function getSql(){ $fp = fopen('sql.txt', 'r'); while (!feof($fp)) { yield fgets($fp); }}foreach (getSql() as $sql) { executeSql($sql);}function executeSql(){ //執行語句}
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掉