当前位置:Gxlcms > 数据库问题 > Oracle学习(8):处理数据

Oracle学习(8):处理数据

时间:2021-07-01 10:21:17 帮助过:13人阅读

):insert delete update select
SQL> 2. DDL(Data Definition Language 数据定义语言): create table,create view,create user
SQL>                                                alter table,alter user
SQL>                                                drop table,drop user
SQL> 3. DCL(Data Control Language 数据控制语言): commit rollback truncate
SQL> */
SQL> host cls


插入 insert语句


语法

INSERT INTO  table[(column [,column...])]

VALUES  (value[, value...]);


使用INSERT 语句向表中插入数据。
使用这种语法一次只能向表中插入一条数据。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - -

INSERT INTO departments(department_id, department_name,

                        manager_id, location_id)

VALUES      (70, ‘PublicRelations‘, 100, 1700);


为每一列添加一个新值。 按列的默认顺序列出各个列的值。 在INSERT 子句中随意列出列名和他们的值。 字符和日期型数据应包含在单引号

- - - - - - - - - - - -- - - - - - - - - - - -- - - - - - - - - - - -- - - - - - - - - - - -- - - - - - - - - - - -- - - - - - - - - - - -



SQL> --插入 insert
SQL> desc emp
 名称                                      是否为空? 类型
 ----------------------------------------- -------- ----------------------------
 EMPNO                                     NOT NULL NUMBER(4)
 ENAME                                              VARCHAR2(10)
 JOB                                                VARCHAR2(9)
 MGR                                                NUMBER(4)
 HIREDATE                                           DATE
 SAL                                                NUMBER(7,2)
 COMM                                               NUMBER(7,2)
 DEPTNO                                             NUMBER(2)


SQL> insert into emp(empno,ename,job,mgr,hiredate,sal,comm,deptno)
  2  values (1001,‘Tom‘,‘CLERK‘,7839,sysdate,2000,100,10);


已创建 1 行。


隐式插入空值 显式插入空值

?隐式方式:在列名表中省略该列的值。 ?显式方式:在VALUES 子句中指定空值。


SQL> --隐式插入空值 显式插入空值


SQL> insert into emp(empno,ename,sal,deptno) values(1002,‘Mary‘,2000,10);

SQL> insert into emp(empno,ename,sal,deptno) values(1003,‘Mary‘,null,10);




地址符的应用


SQL> --地址符 &

lSQL 语句中使用& 变量指定列值。 l& 变量放在VALUES子句中。

SQL> insert into emp(empno,ename,sal,deptno)
  2  values(&empno,&ename,&sal,&deptno);
输入 empno 的值:  1004
输入 ename 的值:  ‘Mike‘
输入 sal 的值:  2000
输入 deptno 的值:  10
原值    2: values(&empno,&ename,&sal,&deptno)
新值    2: values(1004,‘Mike‘,2000,10)


已创建 1 行。


SQL> /
输入 empno 的值:  1005
输入 ename 的值:  ‘aaa‘
输入 sal 的值:  3000
输入 deptno 的值:  20
原值    2: values(&empno,&ename,&sal,&deptno)
新值    2: values(1005,‘aaa‘,3000,20)


已创建 1 行。

给&xxx加引号之后,在后面赋值可不需要加引号

SQL> insert into emp(empno,ename,sal,deptno) values(&empno,‘&ename‘,&sal,&deptno);

输入 empno 的值:  1006
输入 ename 的值:  Tomaa
输入 sal 的值:  1500
输入 deptno 的值:  10
原值    1: insert into emp(empno,ename,sal,deptno) values(&empno,‘&ename‘,&sal,&deptno)
新值    1: insert into emp(empno,ename,sal,deptno) values(1006,‘Tomaa‘,1500,10)


已创建 1 行。


SQL> host cls


&可用于语句的任何地方:

SQL> select empno,ename,&unknown
  2  from emp;
输入 unknown 的值:  sal
原值    1: select empno,ename,&unknown
新值    1: select empno,ename,sal


     EMPNO ENAME             SAL                                                
---------- ---------- ----------                                                
      7369 SMITH             800                                                
      7499 ALLEN            1600                                                
      7521 WARD             1250                                                
      7566 JONES            2975                                                
      7654 MARTIN           1250                                                
      7698 BLAKE            2850                                                
      7782 CLARK            2450                                                
      7788 SCOTT            3000                                                
      7839 KING             5000                                                
      7844 TURNER           1500                                                
      7876 ADAMS            1100                                                


     EMPNO ENAME             SAL                                                
---------- ---------- ----------                                                
      7900 JAMES             950                                                
      7902 FORD             3000                                                
      7934 MILLER           1300                                                
      1001 Tom              2000                                                
      1002 Mary             2000                                                
      1003 Mary                                                                 
      1004 Mike             2000                                                
      1005 aaa              3000                                                
      1006 Tomaa            1500                                                


已选择20行。


SQL> /
输入 unknown 的值:  job
原值    1: select empno,ename,&unknown
新值    1: select empno,ename,job


     EMPNO ENAME      JOB                                                       
---------- ---------- ---------                                                 
      7369 SMITH      CLERK                                                     
      7499 ALLEN      SALESMAN                                                  
      7521 WARD       SALESMAN                                                  
      7566 JONES      MANAGER                                                   
      7654 MARTIN     SALESMAN                                                  
      7698 BLAKE      MANAGER                                                   
      7782 CLARK      MANAGER                                                   
      7788 SCOTT      ANALYST                                                   
      7839 KING       PRESIDENT                                                 
      7844 TURNER     SALESMAN                                                  
      7876 ADAMS      CLERK                                                     


     EMPNO ENAME      JOB                                                       
---------- ---------- ---------                                                 
      7900 JAMES      CLERK                                                     
      7902 FORD       ANALYST                                                   
      7934 MILLER     CLERK                                                     
      1001 Tom        CLERK                                                     
      1002 Mary                                                                 
      1003 Mary                                                                 
      1004 Mike                                                                 
      1005 aaa                                                                  
      1006 Tomaa                                                                


已选择20行。


SQL> select *
  2  from &t;
输入 t 的值:  dept
原值    2: from &t
新值    2: from dept


    DEPTNO DNAME          LOC                                                   
---------- -------------- -------------                                         
        10 ACCOUNTING     NEW YORK                                              
        20 RESEARCH       DALLAS                                                
        30 SALES          CHICAGO                                               
        40 OPERATIONS     BOSTON                                                


SQL> /
输入 t 的值:  salgrade
原值    2: from &t
新值    2: from salgrade


     GRADE      LOSAL      HISAL                                                
---------- ---------- ----------                                                
         1        700       1200                                                
         2       1201       1400                                                
         3       1401       2000                                                
         4       2001       3000                                                
         5       3001       9999                                                


SQL> host cls




从其它表中拷贝数据


·在INSERT语句中加入子查询。 

    INSERT INTO sales_reps(id, name, salary, commission_pct)

     SELECT employee_id, last_name, salary, commission_pct

     FROM   employees

     WHERE  job_id LIKE ‘%REP%‘;


·不必书写 VALUES 子句。 ·子查询中的值列表应与INSERT 子句中的列名对应


SQL> --一次插入(拷贝)多条数据?  
SQL> create table  emp10 as select * from emp where 1=2;    (因为1=2不成立,所以不会拷贝任何数据,但是会将表结构拷贝过来!


表已创建。


SQL> desc emp10
 名称                                      是否为空? 类型
 ----------------------------------------- -------- ----------------------------
 EMPNO                                              NUMBER(4)
 ENAME                                              VARCHAR2(10)
 JOB                                                VARCHAR2(9)
 MGR                                                NUMBER(4)
 HIREDATE                                           DATE
 SAL                                                NUMBER(7,2)
 COMM                                               NUMBER(7,2)
 DEPTNO                                             NUMBER(2)


SQL> insert into emp10
  2  select * from emp where deptno=10;


已创建3行。


SQL> select * from emp10;


     EMPNO ENAME      JOB              MGR HIREDATE              SAL       COMM 
---------- ---------- --------- ---------- -------------- ---------- ---------- 
    DEPTNO                                                                      
----------                                                                      
      7782 CLARK      MANAGER         7839 09-6月 -81           2450            
        10                                                                      
                                                                                
      7839 KING       PRESIDENT            17-11月-81           5000            
        10                                                                      
                                                                                
      7934 MILLER     CLERK           7782 23-1月 -82           1300            
        10                                                                      
                                                                                


SQL> --在插入中使用子查询
SQL> create table  emp20 as select * from emp where deptno=20;


表已创建。


SQL> select * from emp20;


     EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO                                                                 
---------- ---------- --------- ---------- -------------- ----- ---------- ----------                                                                 
      7369 SMITH      CLERK           7902 17-12月-80       800                    20                                                                 
      7566 JONES      MANAGER         7839 02-4月 -81      2975                    20                                                                 
      7788 SCOTT      ANALYST         7566 13-7月 -87      3000                    20                                                                 
      7876 ADAMS      CLERK           7788 13-7月 -87      1100                    20                                                                 
      7902 FORD       ANALYST         7566 03-12月-81      3000                    20                                                                 




更新数据 update

·使用UPDATE 语句更新数据。

       UPDATE  table

       SET  column = value [, column= value, ...]

       [WHERE   condition];


·可以一次更新多条数据。


使用 WHERE 子句指定需要更新的数据

如果省略WHERE子句,则表中的所有数据都将被更新



可在update中使用子查询


删除:delete

SQL> --删除:delete
SQL> delete from emp10;


已删除3行。


SQL> truncate table emp20;


表被截断。


SQL> /*
SQL> 1. delete逐条删除;truncate先摧毁,再重建
SQL> 2. delete 不会释放空间;truncate会
SQL> 3. delete会产生碎片;truncate不会
SQL> 4. deleted可以闪回;truncate不可以闪回

SQL> */
SQL> select * from emp;


     EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO                                                                 
---------- ---------- --------- ---------- -------------- ----- ---------- ----------                                                                 
      7369 SMITH      CLERK           7902 17-12月-80       800                    20                                                                 
      7499 ALLEN      SALESMAN        7698 20-2月 -81      1600        300         30                                                                 
      7521 WARD       SALESMAN        7698 22-2月 -81      1250        500         30                                                                 
      7566 JONES      MANAGER         7839 02-4月 -81      2975                    20                                                                 
      7654 MARTIN     SALESMAN        7698 28-9月 -81      1250       1400         30                                                                 
      7698 BLAKE      MANAGER         7839 01-5月 -81      2850                    30                                                                 
      7782 CLARK      MANAGER         7839 09-6月 -81      2450                    10                                                                 
      7788 SCOTT      ANALYST         7566 13-7月 -87      3000                    20                                                                 
      7839 KING       PRESIDENT            17-11月-81      5000                    10                                                                 
      7844 TURNER     SALESMAN        7698 08-9月 -81      1500          0         30                                                                 
      7876 ADAMS      CLERK           7788 13-7月 -87      1100                    20                                                                 


     EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO                                                                 
---------- ---------- --------- ---------- -------------- ----- ---------- ----------                                                                 
      7900 JAMES      CLERK           7698 03-12月-81       950                    30                                                                 
      7902 FORD       ANALYST         7566 03-12月-81      3000                    20                                                                 
      7934 MILLER     CLERK           7782 23-1月 -82      1300                    10                                                                 


已选择14行。


SQL> set feedback off
SQL> select * from emp;


     EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO                                                                 
---------- ---------- --------- ---------- -------------- ----- ---------- ----------                                                                 
      7369 SMITH      CLERK           7902 17-12月-80       800                    20                                                                 
      7499 ALLEN      SALESMAN        7698 20-2月 -81      1600        300         30                                                                 
      7521 WARD       SALESMAN        7698 22-2月 -81      1250        500         30                                                                 
      7566 JONES      MANAGER         7839 02-4月 -81      2975                    20                                                                 
      7654 MARTIN     SALESMAN        7698 28-9月 -81      1250       1400         30                                                                 
      7698 BLAKE      MANAGER         7839 01-5月 -81      2850                    30                                                                 
      7782 CLARK      MANAGER         7839 09-6月 -81      2450                    10                                                                 
      7788 SCOTT      ANALYST         7566 13-7月 -87      3000                    20                                                                 
      7839 KING       PRESIDENT            17-11月-81      5000                    10                                                                 
      7844 TURNER     SALESMAN        7698 08-9月 -81      1500          0         30                                                                 
      7876 ADAMS      CLERK           7788 13-7月 -87      1100                    20                                                                 


     EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO                                                                 
---------- ---------- --------- ---------- -------------- ----- ---------- ----------                                                                 
      7900 JAMES      CLERK           7698 03-12月-81       950                    30                                                                 
      7902 FORD       ANALYST         7566 03-12月-81      3000                    20                                                                 
      7934 MILLER     CLERK           7782 23-1月 -82      1300                    10                                                                 
SQL> @c:\sql.sql
SQL> select count(*) from testdelete;


  COUNT(*)                                                                                                                                            
----------                                                                                                                                            
      5000                                                                                                                                            
SQL> set timing on
SQL> delete from testdelete;;
delete from testdelete;
                      *
第 1 行出现错误: 
ORA-00911: 无效字符 




已用时间:  00: 00: 00.00
SQL> delete from testdelete;
已用时间:  00: 00: 00.04
SQL> drop table testdelete purge;
已用时间:  00: 00: 01.36
SQL> set timing on
SQL> set timing off
SQL>  @c:\sql.sql
SQL> set timing on
SQL> truncate table testdelete;
已用时间:  00: 00: 03.21
SQL> set timing off
SQL> host cls



Oracle中的事务

事务知识点

数据库事务由以下的部分组成:

一个或多个DML 语句 一个DDL(Data Definition Language – 数据定义语言) 语句 一个DCL(Data Control Language – 数据控制语言) 语句


1. 起始标志: DML语句-自动开启
2. 结束标志:提交: 显式提交 commit
                   隐式提交: DDL(create table,drop user,..)
                  回滚:显式回滚 rollback

                  隐式回滚: 掉电,宕机,非正常退出



使用COMMIT ROLLBACK语句,我们可以:

l确保数据完整性。 l数据改变被提交之前预览。 l将逻辑上相关的操作分组。

自动提交在以下情况中执行:       ?DDL 语句。       ?DCL 语句。       ?不使用 COMMIT 或 ROLLBACK 语句提交或回滚,正常结束会话exit。 会话异常结束或系统异常会导致自动回滚。



保存点

使用SAVEPOINT 语句在当前事务中创建保存点。 使用ROLLBACK TOSAVEPOINT 语句回滚到创建的保存点。


SQL> create table testsavepoint

  2  (tid number,tname varchar2(20));
SQL> set feedback on
SQL> insert into testsavepoint values(1,‘Tom‘);


已创建 1 行。


SQL> insert into testsavepoint values(2,‘Mary‘);


已创建 1 行。


SQL> savepoint a;


保存点已创建。


SQL> insert into testsavepoint values(3,‘Mike‘);


已创建 1 行。


SQL> rollback to savepoint a;


回退已完成。


SQL> select * from testsavepoint;


       TID TNAME                                                                                                                                      
---------- --------------------                                                                                                                       
         1 Tom                                                                                                                                        
         2 Mary                                                                                                                                       


已选择2行。


SQL> commit;


提交完成。

JDBC中如何使用保存点

SQL> /*
SQL> JDBC中使用存储点
SQL> Connection conn = ...
SQL> conn.setAutoCommit(false);
SQL> Savepoint sp = conn.setSavepoint("aaa")
SQL> DML
SQL> 
SQL> conn.rollback(sp);
SQL> */
SQL> spool off

Oracle学习(8):处理数据

标签:oracle   学习笔记   数据库   

人气教程排行