精华内容
下载资源
问答
  • SQL 插入数据

    万次阅读 2019-02-17 10:38:40
    SQL 插入数据 一、数据插入: INSERT用来将行插入(或添加)到数据库表。 插入有几种方式: 1.插入完整的行。 2.插入行的一部分。 3.插入某些查询的结果。 注意:插入及系统安全 使用INSERT语句可能需要...

    SQL 插入数据

    一、数据插入:

    • INSERT用来将行插入(或添加)到数据库表。

    • 插入有几种方式:

      1.插入完整的行。

      2.插入行的一部分。

      3.插入某些查询的结果。

    • 注意:插入及系统安全

      • 使用INSERT语句可能需要客户端/服务器DBMS中的特定安全权限。在你试图使用INSERT前,应该保证自己有足够的安全权限。

    1.1:插入完整的行:

    • 把数据插入表中的最简单方法是使用基本的INSERT语法,指定表名和插入到新行中的值

      INSERT  INTO  Customers VALUES (
        '10000006', 'Toy Land', '123 Any Street', 'New York', 'NY', '11111', 'USA', NULL, NULL
      )
      
      • 将顾客信息插入到Customers表中。存储到表中每一列的数据再VALUES子句中给出,必须给每一项提供一个值
      • 如果某列没有值,则应该使用NULL值(假定表允许对该列指定空值)
      • 各列必须以它们再表定义中出现的次序填充。
    • 注意:INTO 关键字

      • 再某些SQL实现中,跟在INSERT之后的INTO关键字是可选的。
    • 上面的SQL语句高度依赖于表中列的定义次序,还依赖于其容易获得的次序信息。即使可以得到这种次序信息,也不能保证各列再下一次表结构变动后保持完全相同的次序。因此编写依赖于特定列次序的SQL语句是很不安全的。

    • 编写INSERT语句的更安全(不过更烦琐)

      INSERT INTO Customers (
          cust_id,
          cust_name,
          cust_address,
          cust_city,
          cust_state,
          cust_zip,
          cust_country,
          cust_contact,
          cust_email
      )
      VALUES (
          '100000006',
          'Fe Cow',
          'QIQIHER',
          'USA',
          'NY',
          '161041',
          'USA',
          NULL,
          NULL
      );
      
      • 再表名后的括号里明确给出了列名。
      • 再插入行时,DBMS将用VALUES列表中的相应值填入列表中的对应项。
      • VALUES中的第一个值对应于第一个指定列名,第二个值对应第二个指定列名
      • 优点:
        • 即使表的结构改变,这条INSERT语句仍然能正确的工作。
    • 提示:总是使用列的列表

      • 不要使用没有明确给出列的INSERT语句。
    • 注意:小心使用VALUES

      • 不管使用哪种INSERT语法,VALUES的数目必须正确
      • 如果不提供列名,则必须给每个列提供一个值;如果提供列名,则必须给列出的每个列一个值

    1.2:插入部分行:

    • 使用INSERT的推荐方法是明确给出表的列名。这种语法,还可以省略列,表示可以只给某些列提供值,给其他列不提供值

      INSERT INTO Customers(
      	cust_id,
      	cust_name,
      	cust_address,
      	cust_city,
      	cust_state,
      	cust_zip,
      	cust_country  
      )
      VALUES(
      	'1000000006',
      	'Toy Land',
      	'123 Any Street',
      	'New York',
      	'NY',
      	'11111',
      	'USA'
      );
      
      • 再前面的栗子中,没有给出cust_contact和cust_email这两列提供值。这表示没有必要再INSEERT语句中包含它们。因此这里省略了这两列及其对应的值。
    • 注意:省略列

      • 如果表的定义允许,则可以再INSERT操作用中省略某些列。省略的列必须满足以下某个条件。

        1.该列定义为允许NULL值(无值或空值)。

        2.再表定义中给出默认值。(这表示如果不给出值,将使用默认值)

      • 如果对表中不允许NULL值且没有默认值的列不给出值,DBMS将产生错误信息,并且相应的行插入不成功。

    • 注意:省略所需的值

      • 如果表中不允许有NULL值或者默认值,这时却省略了表中的值,DBMS就会产生错误信息,相应的行不能成功插入。

    1.3:插入检索出的数据:

    • INSERT一般用来给表插入具有指定列值的行。

    • INSERT还存在另一种形式,可以利用它将SELECT语句的结果插入表中,这就是所谓的INSERT SELECT。

    • 假如把另一个表中的顾客列合并到Customers表中:

      INSERT INTO Customers(
          cust_id,
          cust_contact,
          cust_email,
          cust_name,
          cust_address,
          cust_city,
          cust_state,
          cust_zip,
          cust_country
      )
      SELECT  cust_id,
              cust_contact,
              cust_email,
              cust_name,
              cust_address,
              cust_city,
              cust_state,
              cust_zip,
              cust_country
      FROM CustNew;
      
      • 例子使用INSERT SELECT从CustNew中将所有数据导入Customers。
      • SELECT语句从CustNew检索出要插入的值,而不是列出它们。
      • SELECT中列出的每一列对应于Customers表名后所跟的每一列。
    • 注意:INSERT SELECT中的列名

      • 在INSERT和SELECT语句中使用了相同的列名。但是,不一定要求列名匹配。
      • 它使用的是列的位置,因此SELECT中的第一列(不管其列名)将用来填充表列中指定的第一列,第二列将用来填充表列中指定的第二列,如此等等。
      • INSERT SELECT中SELECT语句可以包含WHERE子句,以过滤插入的数据。
    • 注意:插入多行

      • INSERT通常只插入一行。要插入多行,必须执行多个INSERT语句。
      • INSERT SELECT是个例外,它可以用一条INSERT插入多行,不管SELECT语句返回多少行,都将被INSERT插入。

    二、从一个表复制到另一个表:

    • 有一种数据插入不使用INSERT语句。要将一个表的内容复制到一个全新的表(运行中创建的表),可以使用SELECT INTO语句。

      CREATE TABLE CustCopy AS
      SELECT * FROM Customers;
      
      • 将Customers表中的数据,复制到了CustCopy表中。
    展开全文
  • 看了看,好像jpa往数据库(我用的MySql)里插入数据(对象),只能采用SQL原生语句。各位谁用过这玩意么? .createNativeQuery(insert into table values());就可以么? 如果是批量插入能搞么? 多谢!
  • sql插入数据时自动插入时间

    万次阅读 2019-02-26 23:13:45
    1:第一种方式:sql数据库在插入一条数据时自动插入时间通常的方式是在插入sql语句中使用数据库的时间函数进行处理。 sqlserver的时间函数getdate()函数就带代表当前的时间(只数据库服务器的当前时间)。 参考代码:...

    1:第一种方式:sql数据库在插入一条数据时自动插入时间通常的方式是在插入的sql语句中使用数据库的时间函数进行处理。
    sqlserver的时间函数getdate()函数就带代表当前的时间(只数据库服务器的当前时间)。
    参考代码:
    insert into table(v1,v2) values('111',getdate());
    2:第二种方式:采用字段默认值的方式
    即再数据库设计的时候,指定字段的默认值为getdate()。
    参考代码:
    insert into table(v1) values('111');
    当不传递v2的值时,系统会自动添加系统时间。

    展开全文
  • WebSQL 插入数据有上限

    千次阅读 2019-03-21 10:46:45
    前言 Web SQL 数据库可以在... 项目需求一次要导入大量数据到应用程序中,数据的插入过程也很简单,如果插入数据量少于500条跑起来是能够正常运行的,但超过500条时部分手机就会出错(部分手机一次插入超过500条虽...

    前言

          Web SQL 数据库可以在最新版的 Safari, Chrome 和 Opera 浏览器中工作,混合开发中用来存储大量数据也非常高效和方便(Web SQL操作指南 摸我)。

    复盘

            项目需求一次要导入大量数据到应用程序中,数据的插入过程也很简单,如果插入数据量少于500条跑起来是能够正常运行的,但超过500条时部分手机就会出错(部分手机一次插入超过500条虽然也能运行,但效率不高),代码片段如下:

    let sql = 'insert into U_TABLE_NAME( '
            + 'per_id,org_id'
        + ' ) values ';
    let val = ''
    data.forEach(element => {
        val += "("
            + "'" + (element.per_id?element.per_id:"") + "'" + ","
            + "'" + (element.org_id?element.org_id:"") + "'"
        + "),"
    });
    sql = sql + val.substr(0,val.length-1)
        
    this.db.transaction(tx => {
        tx.executeSql(sql,
        [],
        (tx,result) => {      
            success()
        },(tx,err) => {
            this.$loading.close()
            console.log('U_TABLE_NAME:' + err.message);
            this.$toast('数据导入异常')
        })
    })

    异常日志如下见:

    
    D/SystemWebChromeClient: file:///android_asset/www/static/js/1.cdd1f9cf85ab9df9c70c.js: Line 1 : U_TABLE_NAME:could not prepare statement (1 too many terms in compound SELECT)
    I/chromium: [INFO:CONSOLE(1)] "U_TABLE_NAME:could not prepare statement (1 too many terms in compound SELECT)", source: file:///android_asset/www/static/js/1.cdd1f9cf85ab9df9c70c.js (1)

    解决方案

    分批次进行插入即可:

    for(var i=0;i<data.length;i+=400){
        let sql = 'insert into U_TABLE_NAME( '
            + 'per_id,org_id'
        + ' ) values ';
        let val = ''
        data.slice(i,i+400).forEach(element => {
            val += "("
                + "'" + (element.per_id?element.per_id:"") + "'" + ","
                + "'" + (element.org_id?element.org_id:"") + "'"
            + "),"
        });
    
        sql = sql + val.substr(0,val.length-1)
        
        this.db.transaction(tx => {
            tx.executeSql(sql,
            [],
            (tx,result) => {      
                success()
            },(tx,err) => {
                this.$loading.close()
                console.log('U_TABLE_NAME:' + err.message);
                this.$toast('数据导入异常')
            })
        })
    }

     

    展开全文
  • 这个例子其实是非常的简单了就是要实现sql插入数据时,如果已经存在,则执行update更新了,这样对于sql与程序来讲是非常的简洁的,下面就和小编一起来深入的分析一下吧. 在很多项目中,我们需要对数据进行不断的...
    这个例子其实是非常的简单了就是要实现sql插入数据时,如果已经存在,则执行update更新了,这样对于sql与程序来讲是非常的简洁的,下面就和小编一起来深入的分析一下吧.

    在很多项目中,我们需要对数据进行不断的调用和更新,如果有新的数据过来,还要把它加入到数据库中。其中非常重要的一种情况就是,我们不知道传过来的数据是不是原本数据库中就已经有了的记录,所以我们常常需要先通过抓取数据,判断是否存在,如果存在执行update,如果不存在执行insert,这样就要进行两次数据库操作,第一次是查询,第二次是更新或插入,有没有一种方法可以只需要执行一次操作即可呢?答案是有的。

    INSERT ... ON DUPLICATE KEY UPDATE 方法可以帮助我们非常好的解决这一问题。让我们来看一个例子:

    INSERT INTO table (a,b,c) VALUES (1,2,3)  ON DUPLICATE KEY UPDATE b=b-1,c=c+1;

    这一个语句就可以实现,在插入(1,2,3)这条记录的时候,检查是否存在a=1,如果有a=1的记录,那么更新a=1这条记录,相当于执行了一次下面这个语句:

    UPDATE table SET b=b-1,c=c+1 WHERE a=1;

    如果数据库中不存在a=1这条记录,那么就插入新的记录。

    使用INSERT ... ON DUPLICATE KEY UPDATE的前提是,a字段被设置为“唯一键”索引,否则该方法是无效的。

    再看一些例子

    该语句是基于唯一索引或主键使用,比如一个字段a被加上了unique index,并且表中已经存在了一条记录值为1,下面两个语句会有相同的效果:

    INSERT INTO table (a,b,c) VALUES (1,2,3) 
      ON DUPLICATE KEY UPDATE c=c+1; 
     
    UPDATE table SET c=c+1 WHERE a=1;
     
     ON DUPLICATE KEY UPDATE后面可以放多个字段,用英文逗号分割。使用ON DUPLICATE KEY UPDATE,最终如果插入了一个新行,则受影响的行数是1,如果修改了已存在的一行数据,则受影响的行数是2。

     如果字段b也被加上了unique index,则该语句和下面的update语句是等效的:

    UPDATE table SET c=c+1 WHERE a=1 OR b=2 LIMIT 1; 

     如果a=1 OR b=2匹配了多行,则只有一行会被修改。通常的,在ON DUPLICATE KEY UPDATE语句中,我们应该避免多个唯一索引的情况。如果需要插入或更新多条数据,并且更新的字段需要根据其它字段来运算时,可以使用如下语句:

    INSERT INTO table (a,b,c) VALUES (1,2,3),(4,5,6) 
      ON DUPLICATE KEY UPDATE c=VALUES(a)+VALUES(b); 
           在ON DUPLICATE KEY UPDATE后面使用VALUES()方法,这个语句等同于下面的两个语句:

    INSERT INTO table (a,b,c) VALUES (1,2,3) 
      ON DUPLICATE KEY UPDATE c=3;--1+2 
    INSERT INTO table (a,b,c) VALUES (4,5,6) 
      ON DUPLICATE KEY UPDATE c=9;--4+5 

    如果一个表中包含了一个auto_increment的字段,每次insert数据后,可以通过last_insert_id()方法返回最后自动生成的值,如果通过INSERT ... ON DUPLICATE KEY UPDATE语句修改了一条数据,那么再通过last_insert_id()方法获取的值将不正确,实际测试中是多了一个数,比如向表中增加了3条数据,那么通过last_insert_id()方法得到的值是3,但是通过该语句修改了一条数据后,通过last_insert_id()方法得到的值是4。如果想解决该问题,可以通过如下语句:

    INSERT INTO table (a,b,c) VALUES (1,2,3) 
      ON DUPLICATE KEY UPDATE id=LAST_INSERT_ID(id), c=3; 
           重点是这句id=LAST_INSERT_ID(id)。

    还有一种方法是使用ignore,我们来看一个例子:

    INSERT ignore INTO a(id, type)  VALUES  ( 11, 22)

    这个语句中使用了ignore,意思是:如果数据库中存在一条记录id=11,那么就不执行insert操作(忽略),只有上述条件不满足时才执行插入操作。ignore方法也要求这里的id为唯一键(主键默认就是是唯一键,因此id可以是主键)

    另外,还有一种方法是replace into,它的使用方法和insert into一样,但是和上面的ignore效果不同,如果数据库中已经存在id=11,那么强制替换id=11这条记录的type为22。

    看个例子


    下面通过代码说明之间的区别,如下:

    create table testtb(
    id int not null primary key,
    name varchar(50),
    age int
    );
    insert into testtb(id,name,age)values(1,"bb",13);
    select * from testtb;
    insert ignore into testtb(id,name,age)values(1,"aa",13);
    select * from testtb;//仍是1,“bb”,13,因为id是主键,出现主键重复但使用了ignore则错误被忽略
    replace into testtb(id,name,age)values(1,"aa",12);
    select * from testtb; //数据变为1,"aa",12


    总结一下:

    如果要实现插入数据时检查是否已经存在某个唯一键的数据,如果存在,则替换该记录的其他字段,我们可以使用三种方法来实现插入数据时判断是否存在对应键的记录,分别是INSERT ... ON DUPLICATE KEY UPDATE、insert gnore into和replace into。其中INSERT ... ON DUPLICATE KEY UPDATE和replace into可以实现如果已经存在对应键的记录时,替换该记录的其他字段。

    展开全文
  • sql插入数据时,避免插入重复数据

    万次阅读 2016-11-23 13:18:27
    1.往表T_Mid_WaterIndexArea中插入数据  insert into [dbo].[T_Mid_WaterIndexArea](AreaCode,Year,DO,CODMn,BOD5,COD,NH3N,TP,TN,CompositeIndex) select c.AreaCode,c.Year, --c.AreaName, AVG(c.DO) DO,AVG(c....
  • My SQL 插入数据

    千次阅读 2016-10-04 16:08:44
    1.为所有列都插入值 INSERT INTO users VALUES ('12302' ,'Haige','na','1998-07-06','1382222111') 非数值类型一定要用 ' '括起来,数值类型不用。 2.为特定的列插入值  特点:指定顺序,列值对应 INSERT ...
  • SQL 插入数据和查询

    千次阅读 2017-02-18 18:29:51
    毫无疑问,SQL语句中最常用的就是SELECT 语句,但是还有三个语句也是很常用的,第一个就是: INSERT 用来将一行插入到数据库表中, 第一行要写出所操纵的数据库,查看效果: 代码:USE mytest1 SELECT * FROM ...
  • php原生sql插入数据

    千次阅读 2018-02-09 14:35:43
    1,php和MySQL建立连接关系2,打开3,接受页面数据,PHP录入到指定的表中1、2两步可直接使用一个数据库链接文件即可:conn.php&lt;?phpmysql_connect("localhost","root","");//...
  • 关于SQL插入数据出现当 IDENTITY_INSERT 设置为 OFF 时,不能为表 'XXXX' 中的标识列插入XXX 这个问题主要是你的实体Entity的类,Id设置为“Id”这个关键字。然后如果出现参数名字也是id,就会导致这个问题。 ...
  • 亲测好用,看代码 from sqlalchemy import create_engine,types engine = create_engine('...#设置写入类型,不然默认是用CLOB类型写入,内置的类型转换很慢,小量数据无所谓 dtyp = {c:types.VARCHAR(df[c].str.l...
  • Linq to SQL 插入数据时的一个问题

    千次阅读 2009-08-29 12:10:00
    Linq to SQL 插入数据时的一个问题今天用LinqtoSql插入数据,总是插入错误,说某个主键字段不能为空,我检查了半天感觉主键字段没有赋空值啊,实在是郁闷。要插入数据的表结构是Code highlighting produced by ...
  • ![图片说明](https://img-ask.csdn.net/upload/201508/31/1440990862_649887.png)
  • T_SQL插入数据

    千次阅读 2010-08-03 00:41:00
    在A**课程中S1中的使用SQL SERVER查询和管理数据一书中,主要介绍以下几种插入数据的方法 一、使用Insert语句插入单行数据语法:Insert [into] 表名[列名] values(值,值) 注意:以上语句,into关键字可以省略,列名可以...
  • 如何往PL/SQL 插入数据?

    千次阅读 2019-03-06 09:41:03
    for update 表示更新数据 再点击解锁按钮就可以添加修改了 添加 修改完毕过后 切记!!!要 点 锁定按钮 否则不会保存!!!我刚刚就遇到了这种,数据没有写入 最后oracle 还需要 提交事务 ...
  • SQL插入数据的几种方式

    万次阅读 2015-04-16 13:01:26
    存储到表中每一列的数据在VALUES 子句中给出,必须给每一列提供一个值。如果某列没有值,则应该使用NULL 值(假定表允许对该列指定空值)。各列必须以它们在表定义中出现的次序填充。基本的INSERT 语法:
  • sql插入数据的方法以及效率

    千次阅读 2013-11-02 23:20:01
    最近的sql作业是在一个已经有10000条数据的table里插入1,000,000条数据插入效率在不同的机子下差距很大= = 在此只纵向对比一下几种插入过程的区别和注意事项 1. 直接 load data infile 基本语句: load data ...
  • 我用的Jpa原生sql语句插入Mysql数据库,不知道插入时参数如何设置,代码如下: query=em.createNativeQuery("insert into store_buy(product_name,numbers,price,style,ower,orderdate,descs) values(product_name...
  • sql 插入数据时表长度及地址符&问题

    千次阅读 2018-04-10 21:18:44
    1 sql修改char型变量的表长度变大时出现问题首先,Oracle中char型和varchar2型数据类型 char型为固定长度(即不足长度时自动补空格),varchar2型为非固定长度,后续问题由此引发。问题大致如下将表中原始数据进行...
  • ![图片说明](https://img-ask.csdn.net/upload/201504/16/1429162654_548878.jpg) 如图:如何根据SongId进行判断是否存在数据

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 31,853
精华内容 12,741
关键字:

sql插入数据