本文目錄一覽:
- 1、mysql批量插入數據
- 2、如何向mysql數據庫中導入大批量數據?
- 3、mysql數據庫中怎麼批量插入數據
- 4、MYSQL批量插入數據庫實現語句性能分析
- 5、mysql數據庫如何批量插入數據,如有表A 字段id name password email 如何插入大批量會員
- 6、如何把csv文件批量導入到mysql數據庫
mysql批量插入數據
不用INSERT INTO 難不成用UPDATE,數據導入3000條貌似不多吧
你要這麼一說,還真有點難度了,因為數據類型不一樣,還不能用數組,貌似沒有什麼絕竅
不過你可以直接用EXCEL中的CONCATENATE()函數把你的數據轉換成SQL輸入語句
然後把這個輸入語句腳本放到一個文件中,如Iinsert.sql
接着用類似下面的代碼把這個腳本導入MYSQL執行
!$db-select_db(‘databasename’)exit($db-error()); //選擇當前數據庫
if(!file_exists(“./insert.sql”))exit(“載入\”insert.sql\”失敗!”);
$import_sql=file_get_contents(“pms.sql”,dirname(__FILE__)); //打開SQL文件並讀取
$explode = explode(“;”,$import_sql);
$cnt = count($explode);
for($i=0;$i$cnt ;$i++){
!$db-query($explode[$i])exit(“導入數據表失敗!”);
}
echo “已建立數據表…brbr\n”;
如何向mysql數據庫中導入大批量數據?
導入時把生成索引給關掉,應該能快一點.
不要一邊導入一邊建立索引.
8G數據,應該也不那麼慢了.
把sql語句文件讀取出一部分看看,建表語句中,應當有建立索引的部分,刪掉它!
只做建表和插入數據兩件事.
還有,看看數據庫有沒有外鍵?
盡量在插入數據過程中去掉外鍵關聯.
等數據插入完成之後再加索引和外鍵,應該能提高很多讀寫性能.
截取一部分數據,例如100Mb.
插入一下試試,可以預先對整體時間有一個預期.
還有,真的要弄台好點的電腦,或者去借一台,等把數據導入完成之後,把msyql的庫文件直接複製出來放自己機器上跑就好.
emm..
再追加點信息,要先搞明白,sql原文件里,到底都執行了哪幾類操作?
可能需要你用c之類寫點小工具,或者別的什麼語言,分塊讀取並處理文件.
8G..
嗯,還好.
現在內存都夠大,否則你都沒法直接用軟件打開了.
只有8G也可以直接用軟件打開看.
停掉索引真的可以大幅度加快插入數據的速度.
建議試一試!
mysql數據庫中怎麼批量插入數據
常見的insert語句,向數據庫中,一條語句只能插入一條數據:
insert into persons
(id_p, lastname , firstName, city )
values(204,’haha’ , ‘deng’ , ‘shenzhen’);
(如上,僅插入了一條記錄)
怎樣一次insert插入多條記錄呢?
使用示例:
insert into persons
(id_p, lastname , firstName, city )
values
(200,’haha’ , ‘deng’ , ‘shenzhen’),
(201,’haha2′ , ‘deng’ , ‘GD’),
(202,’haha3′ , ‘deng’ , ‘Beijing’);
這樣就批量插入數據了, 遵循這樣的語法,就可以批量插入數據了。
執行成功,截圖:
據說,在程序開發中,一次插入多條數據,比逐次一條一條的插入數據,效率高很多
所以在程序開發的時候,使用此批量插入,也是比較不錯的。
此語句在MySQL 5, postgreSQL 9.3執行通過。
MYSQL批量插入數據庫實現語句性能分析
假定我們的表結構如下
代碼如下
CREATE
TABLE
example
(
example_id
INT
NOT
NULL,
name
VARCHAR(
50
)
NOT
NULL,
value
VARCHAR(
50
)
NOT
NULL,
other_value
VARCHAR(
50
)
NOT
NULL
)
通常情況下單條插入的sql語句我們會這麼寫:
代碼如下
INSERT
INTO
example
(example_id,
name,
value,
other_value)
VALUES
(100,
‘Name
1′,
‘Value
1′,
‘Other
1′);
mysql允許我們在一條sql語句中批量插入數據,如下sql語句:
代碼如下
INSERT
INTO
example
(example_id,
name,
value,
other_value)
VALUES
(100,
‘Name
1′,
‘Value
1′,
‘Other
1′),
(101,
‘Name
2′,
‘Value
2′,
‘Other
2′),
(102,
‘Name
3′,
‘Value
3′,
‘Other
3′),
(103,
‘Name
4′,
‘Value
4′,
‘Other
4′);
如果我們插入列的順序和表中列的順序一致的話,還可以省去列名的定義,如下sql
代碼如下
INSERT
INTO
example
VALUES
(100,
‘Name
1′,
‘Value
1′,
‘Other
1′),
(101,
‘Name
2′,
‘Value
2′,
‘Other
2′),
(102,
‘Name
3′,
‘Value
3′,
‘Other
3′),
(103,
‘Name
4′,
‘Value
4′,
‘Other
4′);
上面看上去沒什麼問題,下面我來使用sql語句優化的小技巧,下面會分別進行測試,目標是插入一個空的數據表200W條數據
第一種方法:使用insert
into
插入,代碼如下:
代碼如下
$params
=
array(‘value’=’50’);
set_time_limit(0);
echo
date(“H:i:s”);
for($i=0;$i2000000;$i++){
$connect_mysql-insert($params);
};
echo
date(“H:i:s”);
最後顯示為:23:25:05
01:32:05
也就是花了2個小時多!
第二種方法:使用事務提交,批量插入數據庫(每隔10W條提交下)最後顯示消耗的時間為:22:56:13
23:04:00
,一共8分13秒
,代碼如下:
代碼如下
echo
date(“H:i:s”);
$connect_mysql-query(‘BEGIN’);
$params
=
array(‘value’=’50’);
for($i=0;$i2000000;$i++){
$connect_mysql-insert($params);
if($i%100000==0){
$connect_mysql-query(‘COMMIT’);
$connect_mysql-query(‘BEGIN’);
}
}
$connect_mysql-query(‘COMMIT’);
echo
date(“H:i:s”);
第三種方法:使用優化SQL語句:將SQL語句進行拼接,使用
insert
into
table
()
values
(),(),(),()然後再一次性插入,如果字符串太長,
則需要配置下MYSQL,在mysql
命令行中運行
:set
global
max_allowed_packet
=
2*1024*1024*10;消耗時間為:11:24:06
11:25:06;
插入200W條測試數據僅僅用了1分鐘!代碼如下:
代碼如下
$sql=
“insert
into
twenty_million
(value)
values”;
for($i=0;$i2000000;$i++){
$sql.=”(’50’),”;
};
$sql
=
substr($sql,0,strlen($sql)-1);
$connect_mysql-query($sql);
最後總結下,在插入大批量數據時,第一種方法無疑是最差勁的,而第二種方法在實際應用中就比較廣泛,第三種方法在插入測試數據或者其他低要求時比較合適,速度確實快。
mysql數據庫如何批量插入數據,如有表A 字段id name password email 如何插入大批量會員
1.首先在命令行控制台中打開mysql教程
或許命令的如下:
mysql
-u
root
-p
database_name
然後或許會提示輸入對應的密碼
2.下面這條命令或許對你有用,當你想更換一個數據庫教程的時候
mysqluse
database_name
然後使用下面這個命令
mysqlsource
d:datafilename.sql
當然你需要將文件所在的路徑搞清楚,並且正確地使用了他
進入mysql
安裝所在的目錄的子目錄bin.
輸入執行導入sql的命令.
例如:
你的mysql
安裝在
d:mysql
步驟如下:
開始
–
運行
–
輸入CMD
D:
cd
mysqlbin
mysql
-u
root
-p123456
test
評論
加載更多
如何把csv文件批量導入到mysql數據庫
通過命令行導入(要求列與列之間以 英文逗號 分割,若字段中含有 , 則以 ” 包裹)
load data infile ‘D:/mysql-5.7.29-winx64/files/ratings_5.csv’ into table ratings fields terminated by ‘,’ optionally enclosed by ‘”‘ escaped by ‘”‘ lines terminated by ‘\r\n’;
踩坑一:文件路徑用 \ 分割會報錯,用 / 可(用 \\ 應該也可)
踩坑二:load data 命令報錯
ERROR 1290 (HY000): The MySQL server is running with the –secure-file-priv option so it cannot execute this statement
在 my.ini 中加入(空字符串代表允許從一切目錄導入)
[mysqld]
secure-file-priv=”
然後再 Windows 的服務中重新啟動 mysql
踩坑三:csv 文件中第一行是諸如 userId 這樣的列名
如果你的 csv 文件不大,直接使用 notepad++ 打開後刪除第一行即可
但在我們這裡,千萬級別的文件 notepad++ 無法打開,這時可以考慮兩種方法
1. 將 csv 文件傳入 Linux 服務器刪去第一行
由於不知道如何在 Win 10 中做這個操作,只能通過 Linux 中轉執行
sed -i ‘1d’ ratings.csv
檢驗是否成功,可以打印出第一行觀察
cat ratings.csv | head -n 1
2. 通過工具把大的 csv 分成多個 notepad 能夠打開的較小文件,對第一個文件刪除第一行並依次導入
工具:splitcsv
親測 5000000 條數據的 csv 文件可以在 notepad++ 中打開(只能同時打開 3 個)
這個工具還有個小坑:ratings_0.csv 的最後一行和 ratings_1.csv 的第一行是重複的,請手動刪除
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/185758.html