• Oracle 插入数据


    Oracle 插入数据

    顾名思义,INSERT用于向数据库插入(添加行)。

    可以以多种方式使用插入操作:

    • 插入单个完整的行;
    • 插入单个部分行;
    • 插入多行;
    • 插入查询的结果。

    提示:insert 和系统安全性

    可以使用Oracle安全性基于每个表或每个用户禁用INSERT语句。

    1.1 插入完整的行

    语法示例:

    INSERT INTO Customers
    VALUES(10006,
           'Pep E. LaPew',
           '100 Main Street',
           'Los Angeles',
           'CA',
           '90046',
           'USA',
           NULL,
           NULL);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    注意:无输出

    INSERT语句通常不会产生任何输出,但是如果在Oracle SQL Developer中执行上面的语句,应该会看到“1 row inserted.”消息。

    在VALUES子句中指定要在每个表列中存储的数据,并且必须为每一列提供一个值。如果列没有值,就应该使用NULL值(假定表允许为该列不指定值)。必须按表定义中的顺序填充列。编写依赖于特定顺序的SQL语句是非常不安全的。

    更安全(不幸的是也是更麻烦)的方式是编写如下所示的INSERT语句:

    INSERT INTO customers(cust_id,
                          cust_name,
                          cust_address,
                          cust_city,
                          cust_state,
                          cust_zip,
                          cust_country
    )
    VALUES(10006,
           'Pep E. LaPew',
           '100 Main Street',
           'Los Angeles',
           'CA',
           '90046',
           'USA'
    );
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    提示:自动主键

    每次添加行时,无需手动分配唯一的值(也无需记录上次使用的是什么值),大多数DBMS都提供了一种自动分配的方式:每次向表中添加行时,都会自动分配下一个可用的数字,这种功能称为 自动递增

    由于提供了列名,VALUES必须以指定的顺序来匹配指定的列名,这个顺序不一定是列出现在实际表中的顺序。

    提示:总是使用列所在的列表

    通常,如果没有显式指定所在列的列表,那么就永远也不要使用INSERT。

    警告:省略列

    如果表定义允许,可以从INSERT操作中省略列。此时,必须存在以下条件:

    • 将列定义为允许NULL值
    • 在表定义中指定默认值。这意味者如果没有指定值,则将使用默认值。

    提示:插入多个行

    与大多数其他的DBMS不同,Oracle不支持可以同时插入多个行的insert版本。

    解决方法:

    --这种语法为一种错误示范,但是在其他的DBMS中是可以使用的
    insert into table_name(colum1, colun2)
    values(1,2),(3,4);
    
    --正确用法:
    1、采用union all拼接查询方式:
    insert into CB_PRACTICE(id_, type_,remark)
    select 5,'物理','浮力' from dual
    union all select 6,'物理','阻力' from dual;
    
    2、采用insert all的方式:
    INSERT ALL
    INTO CB_PRACTICE(id_, type_,remark) VALUES (7,'语文','唐诗')
    INTO CB_PRACTICE(id_, type_,remark) VALUES (8,'语文','宋词')
    SELECT * FROM DUAL;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    2. 插入检索的数据

    INSERT还有另外一种形式,可用于把INSERT语句的结果插入表中.这称为INSERT SELECT.

    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;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    提示:INSERT SELECT中的列名

    为了简单起见,这个示例在INSERT和SELECT语句中使用相同的列名,但是不需要列名匹配.

  • 相关阅读:
    Java实现连接SQL Server解决方案及代码
    React生命周期(旧详解)
    详细介绍下VLAN隔离与VLAN之间互联
    【换根DP】CF1882 D
    滑动时间窗口的思想和实现,环形数组,golang
    Spring的注解开发-作用范围等注解的使用
    杰理之MIDI 在运行中动态配置功能示例【篇】
    微信小程序中使用vant组件
    5、【办公自动化】Python实现PDF转Word
    【VR开发】【Unity】0-课程简介和概述
  • 原文地址:https://blog.csdn.net/weixin_45102678/article/details/126040511