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