1. <div id="11111"></div>

    1. <div id="11111"></div>

      1. <div id="11111"></div>

        SQL执行一次INSERT INTO查询,插入多行记录

        日期: 标签:php,SQL 12 条留言
        如需帮忙改代码,或者WordPress二次开发、PHP网站建设等需求,可联系我购买付费服务:  点此联系我

        如果我们想往数据库表中插入一行记录,可以使用以下SQL语句:

        INSERT INTO tbl_name (col1,col2) VALUES (15,16);

        那如果我们想插入多行记录呢?可能你会想到多次运行INSERT语句即可,就像下面的php代码示例:

        $a = 1;
        $b = 1;
        while ($a <= 5)
        {
            $sql = "INSERT INTO tbl_name (col1,col2) VALUES ($a,$b)";
            mysql_query($sql);
            $a++;
            $b++;
        }

        噢,这样写代码效率是很低的,弄不好会严重占用计算机资源,如果是while (5000 == $a),那就要执行5000次数据库查询,哇塞!好家伙!如果你使用php搭建网站,并且使用的是共享虚拟主机,你给来这么一手,估计你的网站很快就会挂掉了。这可够受罪的咯,那怎样写才能提高效率呢?不知道你有没有使用过MySQL的可视化管理工具phpMyAdmin或者其他的数据库管理软件,备份数据库的时候会生成一个.sql文件,里面就是一大堆sql语句,仔细研究一下,它使用的INSERT语句是这样的:

        INSERT INTO `userTable` (`user_id`, `user_name`) VALUES
        (1, 'dsf'),
        (2, 'fgy'),
        (3, 'faad');

        这样只需执行一次SQL查询,即可插入多行记录,大大提高了效率,使用php编程的时候,可以使用字符串连接的方式连接sql语句即可:

        $a = 1;
        $b = 1;
        while ($a <= 5)
        {
            if (1 == $a)
                $sql = "INSERT INTO tbl_name (col1,col2) VALUES ($a,$b)";
            else
                $sql .= ",($a,$b)";
        
            $a++;
            $b++;
        }
        mysql_query($sql);

        -- 完 --

        本文采用 「CC BY-NC-SA 4.0」创作共享协议,转载请标注以下信息:
        原文出处:露兜博客 http://www.szeverich.net.cn/insert-multiple-rows-with-a-single-sql-query.html
        露兜
        kaapass@outlook.com  QQ 825533758

        业余编程爱好者,主业是淘宝店主,卖些工艺品,感兴趣可以到我的淘宝店看看(旺旺不提供技术咨询):西西弗sisyphe

        12 条留言

        点此留言
        1. wwanghee

          想问下,php有什么方法可以优化插入的过程。就像asp里面有addnew方法那样?

          • Ludou

            @wwanghee 本人的PHP造诣不深,目前还没发现!PHP往MySQL数据库中插入数据都是使用的SQL语法INSERT INTO

        2. solarrain

          用到了,谢谢

          • Ludou

            @solarrain 不必客气,这应该算是SQL的简单内容

        3. 痞子飞

          sql="INSERT INTO [Fly_Album](AlbumName, CommendFlag, Remark, ViewFlag, ClickNum, Sequence,AddTime, UpdateTime) VALUES ('测试相册',0,'测试相册',1,0,0,'2009-08-21 08:58:43','2009-08-21 08:58:43'),('废人书法',0,'一个废人无聊的杰作!',1,0,0,'0000-00-00 00:00:00','2009-08-21 08:58:43'),('痞子自像',0,'痞子自己的相片!',1,0,0,'0000-00-00 00:00:00','2009-08-21 08:58:43');"

          conn.execute(sql)

          这个是ASP的一段代码 提示出错

          错误类型:
          Microsoft JET Database Engine (0x80040E14)
          SQL 语句的结束位置缺少分号 (;)。
          /home/UpdateSQL.asp, 第 10 行

          • Ludou

            @痞子飞 我不了解ASP的SQL运作方式,也不知道你用的是什么类型的数据库。本文提到的SQL语句在PHP、MySQL环境下运行正常。

        4. unlocked cell phones

          有没有可能实现类似这样的程序的?
          $sql = "INSERT INTO test VALUES ('3', 'test2', '25', 'male')
          INSERT INTO test2 VALUES ('4', 'test3', '18', 'female')";

          $query = mysql_query($sql);

        5. zhuanquan

          Hi, Ludou
          想问下,如果数据不是你所指的数字呢,而是一个数组,怎么转化进去呢。。。

        6. boyaa

          谢谢,刚才搜出来好多很高大上的方法,还是你的这个实用

        7. 阿志

          非常感谢,正是我需要的

        发表留言

        可以挣钱的游戏 350| 657| 709| 534| 596| 848| 128| 933| 411| 414| 490| 264| 597| 792| 843| 92| 820| 713| 363| 848| 662| 450| 351| 153| 396| 232| 350| 567| 482| 324| 936| 272| 997| 263| 725| 287|