前幾次筆記學習了,查詢的相關操作和創建管理表,本次筆記學習數據處理,包括:向表中插入數據(INSERT)、修改數據(UPDATE)和刪除數據(DELETE)。
為了保存emp中原有的數據,我們創建一個新的表,只是原表中部分數據,並在該表的基礎上進行相關的數據操作。
SQL> create table emp1
2 as (select empno ,ename , sal ,hiredate from emp) ;
Table created
SQL> desc emp1 ;
Name Type Nullable Default Comments
-------- ------------ -------- ------- --------
EMPNO NUMBER(4) Y
ENAME VARCHAR2(10) Y
SAL NUMBER(7,2) Y
HIREDATE DATE Y
SQL> select * from emp1 ;
EMPNO ENAME SAL HIREDATE
----- ---------- --------- -----------
7369 SMITH 800.00 1980/12/17
7499 ALLEN 1600.00 1981/2/20
7521 WARD 1250.00 1981/2/22
7566 JONES 2975.00 1981/4/2
7654 MARTIN 1250.00 1981/9/28
7698 BLAKE 2850.00 1981/5/1
7782 CLARK 2450.00 1981/6/9
7788 SCOTT 3000.00 1987/4/19
7839 KING 5000.00 1981/11/17
7844 TURNER 1500.00 1981/9/8
7876 ADAMS 1100.00 1987/5/23
7900 JAMES 950.00 1981/12/3
7902 FORD 3000.00 1981/12/3
7934 MILLER 1300.00 1982/1/23
14 rows selected上面的查詢結果,說明創建表emp1成功 。接下來,進行表的相關數據操作。
添加數據
基本語法:
INSERT INTO table_name (column1 , column2, ..., column n) values (value1 ,value2 , ....,value n ) ;
這種語法一次只能插入一條數據。
例:向emp1中插入一條數據empno 為 7000 ,ename為 zhangsan ,sal 為8000,日期為2014-4-17 ;
SQL> insert into emp1(empno , ename , sal , hiredate) values(7000 , 'zhangsan',8000 , sysdate );
1 row inserted
SQL> select * from emp1 where ename ='zhangsan';
EMPNO ENAME SAL HIREDATE
----- ---------- --------- -----------
7000 zhangsan 8000.00 2014/4/17 1如果要插入的數據,包含了表中所有的列,那麼表名後面括號中的列名,可以省略不寫,但是values中列名的值的順序要與表中的列名的順序一致,即:insert into emp1 values(7000 , 'zhangsan',8000 , sysdate );與上面的執行結果也是一樣的。另外,表名後面括號中的列名沒有先後的次序,只要values中值得順序,也列名對應,都是可以的。上面日期使用了系統當前的日期,其實我們可以指定日期,即:insert into emp1(empno , ename , sal , hiredate) values(7000 , 'zhangsan',8000 , to_date('2013-4-17','yyyy-mm-dd') ); 。
注意:字符和日期都應放在單引號中。
例:只為empno ,ename ,和 sal 提供數據。
SQL> insert into emp1 (empno , ename ,sal) values(7001 , 'lisi' , 9000) ;
1 row inserted
SQL> select * from emp1 where ename ='lisi' ;
EMPNO ENAME SAL HIREDATE
----- ---------- --------- -----------
7001 lisi 9000.00上面只是插入了部分數據,這樣也是可以的。但是必須要為主鍵和not null 列提供數據。要滿足約束的條件。
修改數據
基本語法:
UPDATE table
SET column =value [, column= value, ...]
[WHERE condition];
可以一次更新多條數據。使用where子句指定更新的條件,來確定哪些列需要更新,如果不指定where條件,則表中所有的列都更新。
SQL> update emp1 set sal = 8000 where sal = 950 ;
1 row updated
SQL> update emp1 set sal = 8000 ;
14 rows updated當不指定更新條件的時候,14條數據更新,指定後有1條更新。一般使用更新語句的都是要跟更新條件。
例:將king的工資改為 13000 ;
SQL> update emp1 set sal = 13000 where lower(ename ) = 'king' ;
1 row updated
SQL> select * from emp1 where lower(ename ) = 'king' ;
EMPNO ENAME SAL HIREDATE
----- ---------- --------- -----------
7839 KING 13000.00 1981/11/17
刪除數據
基本語法
DELETE FROM table
[WHERE condition];
後跟where條件,則只刪除滿足條件的語句,不跟where條件,刪除全部的數據。
例:刪除編號為7839 的雇員。
SQL> delete from emp1 where empno = 7839 ;
1 row deleted
SQL> select * from emp1 where empno = 7839 ;
EMPNO ENAME SAL HIREDATE
----- ---------- --------- -----------delete from emp1 ; 後面沒有指定刪除的條件,將刪除所有的記錄。
上面的插入操作,刪除操作,更新操作,也是可以使用子查詢的,只不過要基於另一個表。
數據庫事務
事務:是對一個或者多個表中數據進行的一組DML操作,作為一個單元來處理的方法。這些DML是通過INSERT 、UPDATE 、DELETE語句進行的。
提交事務:
commit ;提交事務使用commit 提交事務。其作用是結束當前的事務,並把當前事務所執行的全部修改保存到外存的數據庫中,當使用rollback時,數據庫中已經更改的數據不會再發生變化。
設置保存點:
savepoint savepoint_name ;通過該語句,來設置一個事務回滾的點。可以通過該語句來設置多個保存點。
撤銷事務:
撤銷事務使用ROLLBACK語句。該語句的作用是撤銷當前事務中所作的修改,即使用update ,insert ,和delete 操作的數據,重新回到原來的狀態。
ROLLBACK [TO savepoint _name ] ;
也可以通過ROLLBACK TO SAVAEPOINT_NAME ,來指定回滾到哪一個保存點。