这篇文章主要介绍了在mysql中使用一条sql语句插入多条数据,效率非常高,但是原理其实很简单,希望对大家有所帮助

假如有一个数据表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倍。同时,因为插入操作只有一次,所以也类似事务操作,插入失败则全失败,插入成功则全成功,使数据的管理更加方便。所以,如果有多条数据需要插入同一个表的,尽量用这种方式。

以前插入多条数据库记录时,常这么写:

1
2
3
4
5
6
7
8
9
$b = 14;
 
for($a=0;$a<100;$a++){
 
   $sql = " INSERT INTO `roles` (`uid`,`rid`) VALUES (".$a.",".$b.")";
 
   mysql_query($sql);
 
}

但这种写法效率低下,需要多次执行sql语句。如果你用过phpmyadmin导入数据,其实你会发现,上面的语句其实可以这么写

1
2
INSERT INTO `roles` (`uid`,`rid`) VALUES
    (534,14),(535,14),(536,14),(537,14),(539,14)

所以原来的代码可以这么改写

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$b = 14;
 
for($a=0;$a<100;$a++){
 
  if($a==0)
 
     $sql = "INSERT INTO `roles` (`uid`,`rid`) VALUES (".$a.",".$b.")";
 
  else
 
    $sql. = ",(".$a.",".$b.")";
 
}
 
mysql_query($sql);

用一条mysql语句插入多条数据的更多相关文章

  1. mysql语句插入前判断数据是否重复

    在mysql中插入数据有时需要判断数据插入是否重复 语句编写:insert into 表(相应字段) select 相应字段 from dual where not exists (select 相应 ...

  2. SQL SERVER:一条SQL语句插入多条记录等

    在学习排名第二的mySql过程中,发现它的插入语句可以这样写: use test; create table fruits( fid char(10) not null ,s_id int null ...

  3. Mysql 一条SQL语句实现批量更新数据,update结合case、when和then的使用案例

    如何用一条sql语句实现批量更新?mysql并没有提供直接的方法来实现批量更新,但是可以用点小技巧来实现. 复制代码 代码如下: UPDATE mytable SET myfield = CASE i ...

  4. 【JDBC】Mysql海量数据插入——PreparedStatement加快数据插入

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/5861959.html 使用JDBC连接数据库时,如果插入的数据量大,一条一条地插入数据会变得非常缓慢.此时,我 ...

  5. mysql中插入多条记录-微软批处理

    当向mysql中插入大量数据时,可以使用微软的批处理方式.这样可以防止内存溢出又提高了效率.我写了一个mysql中插入多条记录的例子.赋值代码可以直接使用. 1.首先需要添加两个dll MySql.D ...

  6. mysql 一次性插入上万条数据测试专用

    无聊期间 记录下 mysql 一次性插入上万条数据 测试的时候可以用 首先 创建一个表 t3 create table t3(id int)ENGINE = MyISAM; \d //    表示吧m ...

  7. python连接mysql循环插入千万条数据脚本

    之前都是在mysql的存储过程中插入数据,毕竟mysql语法函数有限,很多都有限制.突然想到学了python正好可以练练手.首先需要安装pymysql模块包(模块包安装请自行百度) pip insta ...

  8. sql server inser相关处理(添加一条,一次添加多条,Bulk插入多条)

    1,insert语句 insert into 表一(字段一,字段二,字段三) value(值一,值二,值三) 2,sql 插入多条语句,其中完整值之间用逗号分割 insert into 表一(字段一, ...

  9. 如何将多条update语句合并为一条

    需求: 如何将多条update语句合并为一条update语句:如,update table1 set col='2012' where id='2014001'      update table1  ...

随机推荐

  1. vue轮播插件vue-awesome-swiper

    https://surmon-china.github.io/vue-awesome-swiper/ 第一步安装 npm install vue-awesome-swiper --save 第二部在m ...

  2. Oracle学习总结(5)—— SQL语句经典案例

    --0.所有员工信息 SELECT * FROM emp --1.选择部门30的所有员工 SELECT * FROM emp WHERE deptno=20 --2.列出所有办事员(CLERK)的姓名 ...

  3. 详解Cookie、LocalStorage、SessionStorage

    不管是笔试还是面试相信大家都会经常遇到问Cookie.LocalStorage.SessionStorage 这三个不同的,什么不说先上一波图先: 针对他们大小之分应用场景也有不同: 因为考虑到每个 ...

  4. 暑假集训D20总结

    刷题 今天是瞎XX切题的一天 我要是不写题解的话,我自己都不知道刷了多少专题 数学什么的= = 生活 也就那样吧,没啥特别的 这两天倒是特别鬼畜 先是我点了一下某喵的$cena$,然后他的$cena$ ...

  5. sgu 194 无源汇有上下界的最大流(最大流模板dinic加优化)

    模板类型的题具体参考国家集训队论文:http://wenku.baidu.com/view/0f3b691c59eef8c75fbfb35c.html 参考博客:http://blog.csdn.ne ...

  6. 《从零開始学Swift》学习笔记(Day60)——Core Foundation框架

    创文章,欢迎转载.转载请注明:关东升的博客   Core Foundation框架是苹果公司提供一套概念来源于Foundation框架,编程接口面向C语言风格的API.尽管在Swift中调用这样的C语 ...

  7. hdu 1050 Moving Tables(迷之贪心...)

    题意:有400间房间按题目中图片所给的方式排列,然后给出要移动的n张桌子所要移动的范围,每张桌子要移动的范围不能出现重叠的区域:问最少要多少次才能移动完所有的桌子. 题解思路:把题目转换下,就是有n个 ...

  8. jenkins任务失败重新构建插件Naginator Plugin

    1.下载插件Naginator Plugin 2. 如何配置失败任务自动重试 安装Naginator+Plugin后,新建一个任务,在构建后操作 选择 "Retry build after ...

  9. 《Spring技术内幕》笔记-第二章 IoC容器的实现

    简单介绍 1,在Spring中,SpringIoC提供了一个主要的JavaBean容器.通过IoC模式管理依赖关系.并通过依赖注入和AOP切面增强了为JavaBean这样子的POJO提供事务管理,生命 ...

  10. java中statickeyword

    1.static变量 依照是否静态的对类成员变量进行分类可分两种:一种是被static修饰的变量,叫静态变量或类变量:还有一种是没有被static修饰的变量,叫实例变量. 两者的差别是: 对于静态变量 ...