当前位置: 首页 > 编程笔记 >

用一条mysql语句插入多条数据

羊舌航
2023-03-14
本文向大家介绍用一条mysql语句插入多条数据,包括了用一条mysql语句插入多条数据的使用技巧和注意事项,需要的朋友参考一下

       假如有一个数据表A:

id name title addtime

        如果需要插入n条数据 :

$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;
  ),
  
);

   之前我的想法会是,通过数据构造多条插入语句,循环调用 。如:     

$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语句可以一次插入多条:

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

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

$b = 14;

for($a=0;$a<100;$a++){

   $sql = " INSERT INTO `roles` (`uid`,`rid`) VALUES (".$a.",".$b.")";

   mysql_query($sql);

}

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

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

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

 $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);
 类似资料:
  • 主要内容:使用 MySQLi 和 PDO 向 MySQL 插入多条数据,实例 (MySQLi - 面向对象),实例 (MySQLi - 面向过程),实例 (PDO),使用预处理语句,实例 (MySQLi 使用预处理语句)使用 MySQLi 和 PDO 向 MySQL 插入多条数据 mysqli_multi_query() 函数可用来执行多条SQL语句。 以下实例向 "MyGuests" 表添加了三条新的记录: 实例 (MySQLi - 面向对象) <?php $servername = "loc

  • 下面是准备好的语句代码的片段: 它完成工作,但只有在数百次插入之后。是否有方法将列表或数组绑定到bind_param()参数,只需运行$stmtability->execute one time或其他可以提高性能的方法。 抱歉,如果这是问和回答之前。我四处看了一会儿,发现了一些类似的问题,但没有什么能明确地回答我的要求。

  • 如本文所示,此功能在MySQL中可用,根据Sybase文档,它也应该得到支持,但是Sybase没有提供工作示例,因此您必须解释以下内容: 语法1使用指定的表达式列值插入单行或多行。如果指定,多行由附加括号分隔 因此,我将“附加括号”解释为期望下面的代码能够工作 然而,它错误地 我使用的是Sybase ASE 15,在INSERT语句的支持页面上看不到任何关于插入多行的引用 这个功能在赛贝斯可用吗?

  • 我使用的是+++。 我得到了4个DELETE,只想要一个数据库请求,所以我用一个“;”连接了DELETE命令...但总是失败。 它会抛出以下错误: 但如果我将此SQL粘贴到PhpMyAdmin中,它总是成功的... 如果我在单个查询中编写它,它也会成功。 多谢帮忙!

  • 我正在尝试将多列添加到phpMyAdmin中的现有表中,但我一直收到相同的错误: #1064-您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册以获取正确的语法... 我在写: 我已经参考了过去在StackOverflow上的帖子,我正在遵循专家的建议,那么为什么我会出错呢?

  • 问题内容: 我正在使用+ + + 。 我有4个DELETE,并且只需要1个数据库请求,因此我将DELETE命令与“;” …相连,但是它总是失败。 它引发此错误: 但是,如果我将此SQL粘贴到PhpMyAdmin中,它将始终成功… 如果我在单个查询中写它也是成功的。 感谢帮助! 问题答案: 我猜您正在使用node-mysql。( 但也应该适用于 node- mysql2 ) 该文件说: 出于安全原因