假如有一个数据表A:
id | name | title | addtime |
如果需要插入n条数据 :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
$time
= time();
$data
=
array
(
array
(
'name'
=>
'name1'
,
'title'
=>
'title1'
,
'addtime'
=>
$time
;
),
array
(
'name'
=>
'name2'
,
'title'
=>
'title2'
,
'addtime'
=>
$time
;
),
array
(
'name'
=>
'name3'
,
'title'
=>
'title3'
,
'addtime'
=>
$time
;
),
...
array
(
'name'
=>
'nameN'
,
'title'
=>
'titleN'
,
'addtime'
=>
$time
;
),
);
|
之前我的想法会是,通过数据构造多条插入语句,循环调用 。如:
1
2
3
4
|
$sql1
=
"INSERT INTO `A`(`name`,`title`,`addtime`)VALUES ('name1','title1','"
.
$time
.
"')"
;
$sql2
=
"INSERT INTO `A`(`name`,`title`,`addtime`)VALUES ('name2','title2','"
.
$time
.
"')"
;
......
$sqlN
=
"INSERT INTO `A`(`name`,`title`,`addtime`)VALUES ('nameN','titleN','"
.
$time
.
"')"
;
|
之后发现了sql的insert语句可以一次插入多条:
1
2
3
4
5
|
$sql
=
"INSERT INTO `A`(`name`,`title`,`addtime`)VALUES ('name1','title1','"
.
$time
.
"'),"
;
$sql
.=
"('name2','title2','"
.
$time
.
"'),"
;
$sql
.=
"('name3','title3','"
.
$time
.
"'),"
;
.....
$sql
.=
"('nameN','titleN','"
.
$time
.
"')"
;
|
通过","号将多个数据分隔开来,就可以能过一条sql操作来解决多个数据的插入,之前试验时,在插入数据条数为30的情况下,一次插入与多次插入同样数据的速度相比,一次插入快了近9倍。同时,因为插入操作只有一次,所以也类似事务操作,插入失败则全失败,插入成功则全成功,使数据的管理更加方便。所以,如果有多条数据需要插入同一个表的,尽量用这种方式。