Oracle處理資料(DML+DDL+DCL)+事務

來源:互聯網
上載者:User

SQL> /*
SQL> SQL語句
SQL> 1. DML語句(Data Manipulation Language 資料操作語言): insert update delete select
SQL> 2. DDL語句(Data Definition Language 資料定義語言 (Data Definition Language)): create/alter/drop/truncate table
SQL>                                                    create/drop view,create/drop index(sequence,synonym)
SQL> 3. DCL語句(Data Control Language 資料控制語言): commit rollback
SQL> */
SQL> --插入insert
SQL> --插入新員工
SQL> insert into emp(empno,ename,sal,deptno)
  2  values(1001,'Tom',1000,10);
SQL> --隱式插入null值、顯式插入空值
SQL> --地址符 &
SQL> insert into emp(empno,ename,sal,deptno) values(&empno,&ename,&sal,&deptno);
輸入 empno 的值:  1003
輸入 ename 的值:  'Mike'
輸入 sal 的值:  3000
輸入 deptno 的值:  20
原值    1: insert into emp(empno,ename,sal,deptno) values(&empno,&ename,&sal,&deptno)
新值    1: insert into emp(empno,ename,sal,deptno) values(1003,'Mike',3000,20)

已建立 1 行。
SQL> insert into emp(empno,ename,sal,deptno) values(&empno,'&ename',&sal,&deptno)
  2  ;
輸入 empno 的值:  1005
輸入 ename 的值:  fakfj
輸入 sal 的值:  3000
輸入 deptno 的值:  10
原值    1: insert into emp(empno,ename,sal,deptno) values(&empno,'&ename',&sal,&deptno)
新值    1: insert into emp(empno,ename,sal,deptno) values(1005,'fakfj',3000,10)

已建立 1 行。
SQL>--&就相當於prepareStatemment 而且為了不出錯 字串需要加上''盡量加在先行編譯時期
SQL> rollback;

SQL> --在DML語句中使用地址符
SQL> select empno,ename,&a
  2  from emp;
輸入 a 的值:  sal
SQL> select * from &a;
輸入 a 的值:  dept
SQL> --一次插入(拷貝)一批資料
SQL> create table emp20 as select * from emp where 1=2;

表已建立。

SQL> desc emp20
 名稱                                                                                是否為空白? 類型
 ----------------------------------------------------------------------------------- -------- --------------------------------------------------------
 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> select * from emp20;

未選定行

SQL> --一次性將emp中所有20號部門的員工插入到emp20
SQL> insert into emp20
  2  select * from emp where deptno=20;

已建立5行。
SQL> truncate table emp20;

表被截斷。

SQL> select * from emp20;

未選定行

SQL> --等同於: delete from emp20;
SQL> /*
SQL> delete和truncate table的區別
SQL> 1. delete是DML,truncate是DDL (DML可以rollback,DDL不可以)
SQL> 2. delete逐條刪除;truncate先摧毀,再重建
SQL> 3. delet會產生片段;truncate不會
SQL> 4. delete不會釋放空間;truncate會
SQl> 5. 但是在Oracle中delete內部做了很多最佳化 所以一般是delete效能好
SQL> */
SQL> set feedback off
SQL>--關閉系統提示多少行收到影響

事務

SQL> /*
SQL> Oracle中的事務
SQL> 1. 事務的起始標誌: DML語句
SQL> 2. 事務的結束標誌: 提交: 顯式提交 commit
SQL>                          隱式提交  DDL 語句,正常退出 exit
SQL>                  復原: 顯式  rollback
SQL>                        隱式 非正常退出,掉電,宕機
SQL> */
SQL> --儲存點
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> --定義儲存點
SQL> savepoint a;

儲存點已建立。

SQL> insert into testsavepoint values(3,'Moke');

已建立 1 行。

SQL> rollback to savepoint a;

回退已完成。

SQL> select * from testsavepoint;

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

已選擇2行。

SQL> commit;

提交完成。

事務的隔離等級

MySQL支援SQL99的四個  Oracle只支援2個  READ COMMITED 和Serializable  還支援另外一個不屬於SQL99的規範  READ ONLY

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.