SQL批量插入資料

2021-08-30 17:36:13 字數 2670 閱讀 4673

select * frompersonsp

– 批量插入

insert intopersonsvalues(『bx9』,『z』,『上海』,『松江』,『2』)

,(『bx1』,『z』,『上海』,『松江』,『2』)

,(『bx2』,『z』,『上海』,『松江』,『2』)

,(『bx3』,『z』,『上海』,『松江』,『2』)

,(『bx4』,『z』,『上海』,『松江』,『2』)

,(『bx5』,『z』,『上海』,『松江』,『2』)

,(『bx6』,『z』,『上海』,『松江』,『2』)

,(『bx7』,『z』,『上海』,『松江』,『2』)

,(『bx8』,『z』,『上海』,『松江』,『2』);

– 批量修改

第一種方法:使用insert into 插入,**如下:

**如下

p ar

ams=

arra

y(′v

alue

′=

>′5

0′);

sett

imel

imit

(0);

echo

date

("h:

i:s"

);fo

r(

params = array('value'=>'50'); set_time_limit(0); echo date("h:i:s"); for(

params

=arr

ay(′

valu

e′=>′5

0′);

sett

​ime

l​im

it(0

);ec

hoda

te("

h:i:

s");

for(

i=0;i

<

2000000

;i<2000000;

i<20

0000

0;i++);

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』);

p ar

ams=

arra

y(′v

alue

′=

>′5

0′);

for(

params = array('value'=>'50'); for(

params

=arr

ay(′

valu

e′=>′5

0′);

for(

i=0;i

<

2000000

;i<2000000;

i<20

0000

0;i++)

}$connect_mysql->query(『commit』);

echo date(「h:i:s」);

第三種方法:使用優化sql語句:將sql語句進行拼接,使用 insert into table () values (),(),(),()然後再一次性插入,如果字串太長,

則需要配置下mysql,在mysql 命令列中執行 :set global max_allowed_packet = 210241024*10;消耗時間為:11:24:06 11:25:06;

插入200w條測試資料僅僅用了1分鐘!**如下:

**如下

s ql

="in

sert

into

twen

tymi

llio

n(va

lue)

valu

es";

for(

sql= "insert into twenty_million (value) values"; for(

sql="i

nser

tint

otwe

ntym

​ill

ion(

valu

e)va

lues

";fo

r(i=0;i

<

2000000

;i<2000000;

i<20

0000

0;i++);

s ql

=sub

str(

sql = substr(

sql=su

bstr

(sql,0,strlen($sql)-1);

c on

nect

mysq

l−

>qu

ery(

connect_mysql->query(

connec

tm​y

sql−

>qu

ery(

sql);

批量插入SQL

sql語句是有長度限制,在進行資料合併在同一sql中務必不能超過sql長度限制,通過max allowed packet配置可以修改,預設是1m,測試時修改為8m。事務需要控制大小,事務太大可能會影響執行的效率。mysql有 innodb log buffer size 配置項,超過這個值會把inn...

sql批量插入

批量插入 第一種 insert into mytable id,name values 1,123 insert into mytable id,name values 2,456 insert into mytable id,name values 3,789 第二種方法,使用union all來...

sql 批量插入測試資料

declare istart int declare iend int declare i int declare icount int set istart 1 set iend 100000 set i istart while i iend begin insert into websites...