我有一些詞像["happy","bad","terrible","awesome","happy","happy","horrible",.....,"love"].
這些單詞數量很大,可能超過100 ~ 200
。我想同時保存到DB
。 我覺得每個詞都打電話給DB
連接太浪費了。將多行同時保存到數據庫的最佳方式是什麼?
什麼是最好的保存方式?
table structure
wordId userId word
我有一些詞像["happy","bad","terrible","awesome","happy","happy","horrible",.....,"love"].
這些單詞數量很大,可能超過100 ~ 200
。我想同時保存到DB
。 我覺得每個詞都打電話給DB
連接太浪費了。將多行同時保存到數據庫的最佳方式是什麼?
什麼是最好的保存方式?
table structure
wordId userId word
這將是有益知道你正在生成詞語列表,但你可以做 插入到表(列)值(字),(字詞);
沒有更多的信息是一樣多,我們可以幫助
您可以添加在任何需要的語言來遍歷列表添加它們的循環。
Spencer7593答案比較完整。 – happymacarts
非常感謝你~~~:D –
你是對的,執行重複的INSERT語句來一次插入一行,即在MySQL中處理RBAR(通過激怒行來處理行)可能很昂貴,而且極其慢。
假設你插入的字符串值(「字」)成列在一個表中,每個字將被插入在表中的新行......(這就是一大堆假設外,還有......)
例如,表是這樣的:
CREATE TABLE mytable (mycol VARCHAR(50) NOT NULL PRIMARY KEY) ENGINE=InnoDB
你是正確的,運行於各行的單獨的INSERT語句是昂貴的。 MySQL爲INSERT語句語法提供了一個擴展,允許插入多行。
例如,該序列:
INSERT IGNORE INTO mytable (mycol) VALUES ('happy');
INSERT IGNORE INTO mytable (mycol) VALUES ('bad');
INSERT IGNORE INTO mytable (mycol) VALUES ('terrible');
可與單INSERT語句
INSERT IGNORE INTO mytable (mycol) VALUES ('happy'),('bad'),('terrible');
每「行」將要插入被封閉在括號來模擬,只是因爲它是在常規INSERT語句。技巧是行之間的逗號分隔符。
當存在違反約束條件時會遇到麻煩;整個陳述成功或失敗。與單個插入不同,其中一個插入可能失敗,另外兩個插入成功。
另請注意,該語句的大小(以字節爲單位)不會超過max_allowed_packet
變量設置。
或者,LOAD DATA
語句是將行加載到表中的更快的方法。但是對於幾百行,這不會更快。 (如果你行裝載成千上萬的LOAD DATA語句可能會快很多
非常感謝!這對我很有幫助! –
接受這個答案 – happymacarts
看insert_batch或multi_query()函數 也:。HTTP://計算器。com/questions/779986/insert-multiple-rows-via-a-php-array-into-mysql – Sami