精华内容
下载资源
问答
  • mysql中一条insert语句批量插入多条记录

    万次阅读 多人点赞 2017-07-20 15:39:23
    这种方式只能够一次插入一条数据,要想插入多条数据,就得多次调用此sql语句,意味着多次与数据库建立连接。但是这样一来,就会增加服务器的负荷,因为,执行每一次SQL服务器都要同样对SQL进行分析、优化等操作。...

    插入语句常用写法:

    INSERT INTO items(name,city,price,number,picture)  VALUES('耐克运动鞋','广州',500,1000,'003.jpg');

    这种方式只能够一次插入一条数据,要想插入多条数据,就得多次调用此sql语句,意味着多次与数据库建立连接。但是这样一来,就会增加服务器的负荷,因为,执行每一次SQL服务器都要同样对SQL进行分析、优化等操作。幸好MySQL提供了另一种解决方案,就是使用一条INSERT语句来插入多条记录。这并不是标准的SQL语法,因此只能在MySQL中使用。

     

     一条INSERT语句插入批量数据的写法:

    INSERT INTO 
    
    [表名]([列名],[列名]) 
    
     VALUES
    
    ([列值],[列值])),
    
    ([列值],[列值])),
    
    ([列值],[列值]));

    可以看到,和原来的常规INSERT语句的区别,仅仅是在VALUES 后面增加值的排列,每条记录之间用英文输入法状态下的逗号隔开,是不是so easy。

    示例:

    INSERT INTO 
    
    items(name,city,price,number,picture) 
    
    VALUES
    
    ('耐克运动鞋','广州',500,1000,'003.jpg'),
    
    ('耐克运动鞋2','广州2',500,1000,'002.jpg');

    这样,就实现了一次性插入了2条数据。

    建议:

    在程序中,插入批量数据时,最好使用这种通过一条INSERT语句来一次性插入的方式。这样可以避免程序和数据库建立多次连接,从而增加服务器负荷。

     

    欢迎关注微信公众号(Java修炼记):

    专注Java技术积累,免费分享Java技术干货、学习笔记、学习资料等,致力于让这里成为一个java知识小站。

    展开全文
  • C# 往mysql中插入条或者多条数据

    千次阅读 2021-02-25 11:29:55
    using MySql.Data; using MySql.Data.MySqlClient; using System.Data; using System.Collections.Generic; using System.Linq; using System.Text; /// <summary> ///MYSQLHelper 的摘要说明 /// &.


    using System;
    using System.Collections;
    using System.Configuration;
    using MySql.Data;
    using MySql.Data.MySqlClient;
    using System.Data;

    using System.Collections.Generic;
    using System.Linq;
    using System.Text;

    /// <summary>
    ///MYSQLHelper 的摘要说明
    /// </summary>
    public class MySqlHelper
    {


        #region 公共属性

        /// <summary>
        /// 数据源
        /// </summary>
        public string DataSource { get; set; }
        /// <summary>
        /// 数据库
        /// </summary>
        public string DataBase { get; set; }
        /// <summary>
        /// 登录账号
        /// </summary>
        public string Uid { get; set; }
        /// <summary>
        /// 密码
        /// </summary>
        public string Pwd { get; set; }
        /// <summary>
        /// 端口号
        /// </summary>
        public string Port { get; set; }
        /// <summary>
        /// 连接字符串
        /// </summary>
        public string ConnStr { get; set; }

        MySqlCommand myCmd;

        MySqlConnection myConnnect;

        #endregion

        public MySqlHelper(string dataSource, string dataBase, string uid, string pwd, string port = "3306")
        {
            DataSource = dataSource;
            DataBase = dataBase;
            Uid = uid;
            Pwd = pwd;
            Port = port;

            StringBuilder connStr = new StringBuilder();
            connStr.Append("Data Source=" + DataSource + ";");
            connStr.Append("Database=" + DataBase + ";");
            connStr.Append("User Id=" + Uid + ";");
            connStr.Append("Password=" + Pwd + ";");
            connStr.Append("CharSet=utf8;");
            connStr.Append("port=" + Port);

            ConnStr = connStr.ToString();

            myConnnect = new MySqlConnection(ConnStr);
            myConnnect.Open();


            //"data source=localhost;uid=root;pwd=123456;database=teaching_database;SslMode = none"; 
        }

        /// <summary>
        /// 插入一条数据
        /// </summary>
        /// <param name="cmdText"></param>
        public void Executesql(string cmdText)
        {
            MySqlCommand myCmd = new MySqlCommand(cmdText, myConnnect);
            Console.WriteLine(myCmd.CommandText);
            if (myCmd.ExecuteNonQuery() > 0)
            {
                Console.WriteLine("数据插入成功!");
            }

            //myCmd.Dispose();
            //myConnnect.Close();
        }

        /// <summary>
        /// 插入多条数据
        /// </summary>
        /// <param name="SQLStringList"></param>
        public void Executesql(List<string> SQLStringList)
        {


            /*
             * MySqlHelper adf = new MySqlHelper("192.168.2.2", "testch", "root", "123456", "3306");

                List<string> SQLStringList = new List<string>();
                SQLStringList.Add("insert into main( number, name,value) values('1234','222','333')");
                SQLStringList.Add("insert into main( number, name,value) values('1234','222','444')");
                SQLStringList.Add("insert into main( number, name,value) values('1234','222','555')");
                SQLStringList.Add("insert into main( number, name,value) values('1234','222','666')");
                SQLStringList.Add("insert into main( number, name,value) values('1234','222','777')");
                SQLStringList.Add("insert into main( number, name,value) values('1234','222','888')");
                SQLStringList.Add("insert into main( number, name,value) values('1234','222','999')");

                SQLStringList.Add("insert into main( number, name,value) values('1234','222','aaa')");
                SQLStringList.Add("insert into main( number, name,value) values('1234','222','sss')");
                SQLStringList.Add("insert into main( number, name,value) values('1234','222','ddd')");
                SQLStringList.Add("insert into main( number, name,value) values('1234','222','fff')");
                SQLStringList.Add("insert into main( number, name,value) values('1234','222','ggg')");
                SQLStringList.Add("insert into main( number, name,value) values('1234','222','hhh')");
                SQLStringList.Add("insert into main( number, name,value) values('1234','222','jjj')");
                SQLStringList.Add("insert into main( number, name,value) values('1234','222','kkk')");
                SQLStringList.Add("insert into main( number, name,value) values('1234','222','zzz')");
                SQLStringList.Add("insert into main( number, name,value) values('1234','222','xxx')");
                adf.Executesql(SQLStringList);
             */

            MySqlCommand cmd = new MySqlCommand();
            cmd.Connection = myConnnect;
            MySqlTransaction tx = myConnnect.BeginTransaction();
            cmd.Transaction = tx;
            try
            {
                for (int n = 0; n < SQLStringList.Count; n++)
                {
                    string strsql = SQLStringList[n].ToString();
                    if (strsql.Trim().Length > 1)
                    {
                        cmd.CommandText = strsql;
                        cmd.ExecuteNonQuery();
                    }

                    //后来加上的
                    if (n > 0 && (n % 500 == 0 || n == SQLStringList.Count - 1))
                    {
                        tx.Commit();
                        tx = myConnnect.BeginTransaction();
                    }
                }
            }
            catch (System.Data.SqlClient.SqlException E)
            {
                tx.Rollback();
                throw new Exception(E.Message);
            }
        }
    }

    展开全文
  • Oracle一次插入多条数据

    千次阅读 2020-01-17 16:16:07
    Oracle一次插入多条数据 oracle不像mysql那样可以在values后面添加多个插入的值,mysql具体操作 mysql插入多条数据 -- mysql插入多行代码 insert into CB_PRACTICE(id_, type_,remark) values (5,'物理','浮力'),(6,...

    Oracle一次插入多条数据

    oracle不像mysql那样可以在values后面添加多个插入的值,mysql具体操作

    mysql插入多条数据

    -- mysql插入多行代码
    insert into CB_PRACTICE(id_, type_,remark) values (5,'物理','浮力'),(6,'物理','阻力');
    

    oracle插入多条数据的方法

    • 1.采用union all拼接查询方式

      -- oracle插入多行代码
      insert into CB_PRACTICE(id_, type_,remark)
      select 5,'物理','浮力' from dual
      union all select 6,'物理','阻力' from dual;
      
    • 2.采用insert all的方式

    -- oracle插入多行代码
    INSERT ALL
    INTO CB_PRACTICE(id_, type_,remark) VALUES (7,'语文','唐诗')
    INTO CB_PRACTICE(id_, type_,remark) VALUES (8,'语文','宋词')
    SELECT * FROM DUAL;
    

    效果等同于

    INTO CB_PRACTICE(id_, type_,remark) VALUES (7,'语文','唐诗');
    INTO CB_PRACTICE(id_, type_,remark) VALUES (8,'语文','宋词');
    

    另外,insert all还支持往不同的表里插入数据,如:

    insert all 
    into table1(filed1,filed2)values('value1','value2')
    into table2(字段1,字段2,字段3) values(1,值2,值3)
    select * from dual;
    

    你可能会感到很疑问,为什么后面都要跟select * from dual​?😵

    因为INSERT ALL一定要跟select,就加一个系统表来作为无明确对象的select操作 ,如果你不加select,则语句报错
    在这里插入图片描述

    官方解释:

    “ALL into_clause: Specify ALL followed by multiple insert_into_clauses to perform an unconditional multitable insert. Oracle Database executes each insert_into_clause once for each row returned by the subquery.”
    
    指定ALL后跟多个insert_into_clauses以执行无条件多表插入。Oracle数据库对子insert_into_clause查询返回的每一行执行一次。
    

    注意:select * from dual只有一条记录,所以上面的操作只会返回一条记录,如果你有自动增长的主键这里通过sequence获取的值是同一个,不会自动获取多个,所以id需要通过其他方式设置(例如触发器方式自动设置id)

    具体dual表的介绍:Oracle中DUAL表到底是什么?如何使用?

    展开全文
  • 对于一些数据量较大的系统,数据库面临的问题除了查询效率低下,还有就是数据入库时间长。特别像报表系统,每天花费在数据导入上的时间...1、insert批量执行,禁止单insert value(注意单sql长度限制,可临时...

    对于一些数据量较大的系统,数据库面临的问题除了查询效率低下,还有就是数据入库时间长。特别像报表系统,每天花费在数据导入上的时间可能会长达几个小时或十几个小时之久。因此,优化数据库插入性能是很有意义的。经过对MySQL InnoDB的一些性能测试,发现一些可以提高insert效率的方法,供大家参考参考。
    
    
    
    1、insert批量执行,禁止单条insert value(注意单条sql长度限制,可临时调整max_allowed_packet)
    
    2、开启事务处理,批量提交。原理类似上1(条件允许可适当增大innodb_log_buffer_size,增加单事务提交日志量,该参数read only)
    3、主键顺序插入,效率更高
    4、业务允许,暂时disable keys
    
    
    
    5.对要插入的数据进行分组批量插入
    INSERT INTO table (column1, column2, ..., column_n) VALUES (value11, value12, ..., value1n), (value21, value22, ... value2n), ..., (value_n1, value_n2, ... value_nn)
    
    
    
    常用的插入语句如:
    
    
    INSERT INTO `insert_table` (`datetime`, `uid`, `content`, `type`) 
        VALUES ('0', 'userid_0', 'content_0', 0);
    INSERT INTO `insert_table` (`datetime`, `uid`, `content`, `type`) 
        VALUES ('1', 'userid_1', 'content_1', 1);
    修改成:
    
    INSERT INTO `insert_table` (`datetime`, `uid`, `content`, `type`) 
        VALUES ('0', 'userid_0', 'content_0', 0), ('1', 'userid_1', 'content_1', 1);
    修改后的插入操作能够提高程序的插入效率。这里第二种SQL执行效率高的主要原因是合并后日志量(MySQL的binlog和innodb的事务让日志)减少了,降低日志刷盘的数据量和频率,从而提高效率。通过合并SQL语句,同时也能减少SQL语句解析的次数,减少网络传输的IO。
    
    
    在事务中进行插入处理。
    
    
    
    
    把插入修改成:
    
    START TRANSACTION;
    INSERT INTO `insert_table` (`datetime`, `uid`, `content`, `type`) 
        VALUES ('0', 'userid_0', 'content_0', 0);
    INSERT INTO `insert_table` (`datetime`, `uid`, `content`, `type`) 
        VALUES ('1', 'userid_1', 'content_1', 1);
    ...
    COMMIT;
    使用事务可以提高数据的插入效率,这是因为进行一个INSERT操作时,MySQL内部会建立一个事务,在事务内才进行真正插入处理操作。通过使用事务可以减少创建事务的消耗,所有插入都在执行后才进行提交操作。
    
    数据有序插入。
    数据有序的插入是指插入记录在主键上是有序排列,例如datetime是记录的主键:
    
    INSERT INTO `insert_table` (`datetime`, `uid`, `content`, `type`) 
        VALUES ('1', 'userid_1', 'content_1', 1);
    INSERT INTO `insert_table` (`datetime`, `uid`, `content`, `type`) 
        VALUES ('0', 'userid_0', 'content_0', 0);
    INSERT INTO `insert_table` (`datetime`, `uid`, `content`, `type`) 
        VALUES ('2', 'userid_2', 'content_2',2);
    修改成:
    
    INSERT INTO `insert_table` (`datetime`, `uid`, `content`, `type`) 
        VALUES ('0', 'userid_0', 'content_0', 0);
    INSERT INTO `insert_table` (`datetime`, `uid`, `content`, `type`) 
        VALUES ('1', 'userid_1', 'content_1', 1);
    INSERT INTO `insert_table` (`datetime`, `uid`, `content`, `type`) 
        VALUES ('2', 'userid_2', 'content_2',2);
    由于数据库插入时,需要维护索引数据,无序的记录会增大维护索引的成本。我们可以参照InnoDB使用的B+tree索引,如果每次插入记录都在索引的最后面,索引的定位效率很高,并且对索引调整较小;如果插入的记录在索引中间,需要B+tree进行分裂合并等处理,会消耗比较多计算资源,并且插入记录的索引定位效率会下降,数据量较大时会有频繁的磁盘操作。
    
    从测试结果来看,该优化方法的性能有所提高,但是提高并不是很明显。
    
    SQL语句是有长度限制,在进行数据合并在同一SQL中务必不能超过SQL长度限制,通过max_allowed_packet配置可以修改,默认是1M,测试时修改为8M。
    
    事务需要控制大小,事务太大可能会影响执行的效率。MySQL有innodb_log_buffer_size配置项,超过这个值会把innodb的数据刷到磁盘中,这时,效率会有所下降。所以比较好的做法是,在数据达到这个这个值前进行事务提交。
    
    
    


    展开全文
  • mysql数据库删除重复的数据保留一条

    万次阅读 多人点赞 2019-07-09 22:15:13
    现在身份证号identity_id和姓名name有很重复的数据,需要删除只保留一条有效数据。 2.模拟环境 1.等入mysql数据库,创建个单独的测试数据库mysql_exercise create database mysql_exercise charset utf8; 2....
  • 一次性保存多条数据(批量保存)比较简单方便的做法就是使用json格式,具体看我的这篇文章,批量保存数据(json版),该篇文章详细的介绍了使用json来做批量保存!有图有代码有步骤! 但是我本篇文章并没有使用json,我...
  • 看到这个标题也许大家会问,这有...但使用这种方法要增加服务器的负荷,因为,执行每一次 SQL服务器都要同样对SQL进行分析、优化等操作。幸好MySQL提供了另一种解决方案,就是使用一条INSERT语句来插入多条记录。这并不
  • 整体时间的分配三、批量插入数据测试1、SQL语句的大小限制2、查看服务器上的参数:3、计算一次能插入的最大行记录4、测试插入数据比对(1)插入11W条数据,按照每次10,600,1000,20000,80000来测试:(2)加大数据量...
  • MySQL 批量插入数据,单插入多少条数据效率最高

    千次阅读 多人点赞 2019-11-26 18:29:10
    整体时间的分配三、批量插入数据测试1、SQL语句的大小限制2、查看服务器上的参数:3、计算一次能插入的最大行记录4、测试插入数据比对(1)插入11W条数据,按照每次10,600,1000,20000,80000来测试:(2)加大数据量...
  • 众所周知,将mysql语句写在for循环内是大忌,每一次循环都会和数据库建立一次连接,效率低下,网页卡得令人发指。 解决的办法有: 1、thinkphp有addAll语法批量增加。 2、同时也可以在服务端收集记录的uuid,用 ...
  • 但使用这种方法要增加服务器的负荷,因为,执行每一次 SQL服务器都要同样对SQL进行分析、优化等操作。  幸好MySQL提供了另一种解决方案,就是使用一条INSERT语句来插入多条记录, 这并不是标准的 SQL语法,...
  • alter table admin_pay_type add erp_code varchar(20) not null, add province varchar(30), add city varchar(30), add bank varchar(30), add subbranch varchar(30), add account_num varchar(30), ...
  • 这种方式只能够一次插入一条数据,要想插入多条数据,就得多次调用此sql语句,意味着多次与数据库建立连接。但是这样一来,就会增加服务器的负荷,因为,执行每一次SQL服务器都要同样对SQL进行分析...
  • ![图片说明](https://img-ask.csdn.net/upload/201904/11/1554992843_701139.png)![图片说明](https://img-ask.csdn.net/upload/201904/11/1554992857_350141.png)![图片说明]...
  • mysql命令行批量插入100条数据命令

    万次阅读 2016-11-28 15:10:26
    先介绍个关键字的使用: ...如何通过mysql命令行批量插入100条数据呢,可以在代码里实现,也可以通过命令行,也就是通过存储过程: delimiter $$ create procedure myproc () begin declare num int ;
  • 解决MySQL游标循环执行一次的问题 MySQL存储过程使用游标时,执行一次的问题 一、问题描述 1、在写MySQL存储过程,使用到游标遍历数据时,遇到一个问题:游标的循环比数据集填充到游标要执行1次。 2、表述...
  • 5、事务(N提交一次) 线程插入(单表) 问:为何对同一个表的插入线程会比单线程快?同一时间对一个表的写操作不应该是独占的吗? 答:在数据里做插入操作的时候,整体时间的分配是这样的: 1、链接耗时 (30%...
  • MySQL使用条INSERT语句插入多条记录

    千次阅读 2016-06-05 12:23:16
    注意:使用条INSERT语句来插入多条记录。这并不是标准的SQL语法,因此只能在MySQL中使用。 参考链接http://database.51cto.com/art/201010/229046.htm 官方链接...
  • MySQL同时添加多条记录

    万次阅读 2017-06-23 11:49:57
    有时候,需要一次向表中添加多条记录,MySQL提供了使用一条SQL语句,同时添加多条记录的功能 INSERT INTO 表名 [(字段名1,字段名2,…)] VALUES(值1,值2,…),(值1,值2,…), …… (值1,值2,…);参数...
  • 使用go给mysql增加海量数据

    千次阅读 2018-12-03 15:05:36
    mysql创建个数据库 这里创建 test_big 数据库 创建表 CREATE TABLE `student` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键', `user_name` varchar(255) DEFAULT NULL COMMENT '姓名', `add_...
  • 学习MySQL篇就够了

    万次阅读 多人点赞 2020-07-28 17:21:34
    章 数据库概述 1.1、数据库的好处 将数据持久化到本地 提供结构化查询功能 1.2、数据库的常见概念 DB:数据库,存储数据的仓库 DBS:数据库管理系统,又...个库中可以有张表,每张表具有唯一的表名用来标识
  • MySQL回滚到某时刻数据的方法

    万次阅读 多人点赞 2018-06-09 11:37:36
    使用Oracle数据库的RMAN工具,可以方便的设置全备,增备保留的时间和自动清理,RMAN自己记录之前做过哪些备份操作,有份备份列表,所以可以全自动的根据全备、增备、归档日志进行回滚,只需一条命令。这个可以参考...
  • MYSQL一次千万级连表查询优化(一)

    万次阅读 多人点赞 2017-10-25 18:02:11
    概述:交代一下背景,这算是一次项目经验吧,属于公司一个已上线平台的功能,这算是离职人员挖下的坑,随着数据越来越,原本的SQL查询变得越来越慢,用户体验特别差,因此SQL优化任务交到了我手上。 这个SQL查询...
  • 在实际应用中经过存储、优化可以做到在超过9千万数据中的查询响应速度控制在1到20毫秒。看上去是个不错的成绩,不过优化这路没有终点,当我们的系统有超过几百人、上千人同时使用时,仍然会显的力不从心
  • MySQL千万级数据处理

    万次阅读 多人点赞 2018-08-14 17:51:35
    目录 第篇,优化篇 第二篇,案例篇 第篇,优化篇 ...除非单表数据未来会...而事实上很时候MySQL单表的性能依然有不少优化空间,甚至能正常支撑千万级以上的数据量: 字段 1、尽量使用TINYINT、SMALLIN...
  • mysqlmysql删除重复记录并且只保留一条

    万次阅读 多人点赞 2018-09-03 21:10:13
    1. 查询全部重复的数据: 2. 删除全部重复试题: 3. 查询表中多余重复试题(根据depno来判断,除了rowid最小的个) a. 第种方法: b. 第二种方法: c. 补充第三种方法(根据评论区给的删除总结出来的): ...
  • 使用阿里云rds for MySQL数据库(就是MySQL5.6版本),有个用户上网记录表6个月的数据量近2000万,保留最近一年的数据量达到4000万,查询速度极慢,日常卡死。严重影响业务。 问题前提:老系统,当时设计系统的人...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 132,764
精华内容 53,105
热门标签
关键字:

mysql一次增加多条数据

mysql 订阅