DDL (Data Definition Language 數據定義語言)
create table 創建表 alter table 修改表 drop table 刪除表 truncate table 刪除表中所有行 create index 創建索引 drop index 刪除索引 當執行DDL語句時,在每一條語句前后,oracle都將提交當前的事務。如果用戶使用insert命令將記錄插入到數據庫后,執行了一條DDL語句(如create table),此時來自insert命令的數據將被提交到數據庫。當DDL語句執行完成時,DDL語句會被自動提交,不能回滾。
DML (Data Manipulation Language 數據操作語言) insert 將記錄插入到數據庫 update 修改數據庫的記錄 delete 刪除數據庫的記錄 當執行DML命令如果沒有提交,將不會被其他會話看到。除非在DML命令之后執行了DDL命令或DCL命令,或用戶退出會話,或終止實例,此時系統會自動發出commit命令,使未提交的DML命令提交。
1. DDL語句
SQL語句:結構化查詢語句,使用SQL與數據庫“溝通”,完成相應的數據庫操作。
l DDL:數據定義語言,用來維護數據庫對象
1.1 創建表
Ø CREATE:創建表
演示:創建員工表
CREATE TABLE employee( id NUMBER(4), name VARCHAR2(20), gender CHAR(1), birth DATE, salary NUMBER(6,2), job VARCHAR2(30), deptno NUMBER(2) ); |
Ø DESC:查看表的數據結構
演示:查看創建的員工表
DESC employee; |
Ø DEFAULT:設置默認值
可以通過DEFAULT子句給列指定默認值
演示:建表時給gender默認值為”M”
CREATE TABLE emptest( id NUMBER(4), name VARCHAR2(20), gender CHAR(1) DEFAULT 'M', birth DATE ); |
Ø NOT NULL:非空
默認情況下,任何列都允許有空值。非空(NOT NULL)是一種條件約束,用於確保字段值不為空,當某個字段被設置了非空約束條件,這個字段中必須存在有效值,即:當執行插入數據操作時,必須提供這個列的數據;當執行更新操作時,不能給這個列的值設置為NULL。
演示:創建員工表設置那么為非空字段
CREATE TABLE emptest( id NUMBER(4) , name VARCHAR2(20) NOT NULL, gender CHAR(1) DEFAULT 'M', birth DATE ); |
1.2 修改表
Ø RENAME:修改表名
演示:修改表名
RENAME emptest to testemp; |
Ø ALTER TABLE的ADD子句
增加列,列只能增加在最后,不能插入現有的列中。
演示:在testemp表下面增加hiredate列,並將默認值設置為當前時間
ALTER TABLE testemp ADD(hiredate DATE DEFAULT sysdate); |
Ø ALTER TABLE的DROP子句
刪除列,刪除字段需要從每行中刪掉該字段占據的長度和數據,並釋放在數據塊中占據的空間,如果表記錄比較大,刪除字段可能需要比較長的時間。
演示:刪除testemp表下的hiredate
ALTER TABLE testemp DROP (hiredate); |
Ø DROP刪除表
DROP TABLE emptest; |
Ø ALTER TABLE的MODIFY子句
修改列,使用MODIFY可以改變表中列的數據類型、長度和默認值,注意這種修改僅對以后插入的數據有效。另外如果表中已經有數據的情況下,把長度由大改小,有可能不成功,比如原來類型是VARCHAR2(100),其中已經存放了100字節長度的數據,如果改為80字節,則不會修改成功。
演示:修改testemp表中name的長度為30
ALTER TABLE testemp MODIFY(name VARCHAR2(30)); |
2. DML語句
l 用於增刪改表中數據,DML是伴隨TCL事務控制的。
Ø INSERT
INSERT語句用來給數據表增加記錄,每次增加一條記錄。所有的DML操作,需要再執行事務提交語句COMMIT才算真正確認了此操作。
演示:想testemp中插入一條記錄
INSERT INTO testemp (id,name,gender) VALUES (1,'張三','M'); COMMIT; |
插入數據時忽略字段則是全列插入,順序不能錯誤,如下:
INSERT INTO testemp VALUES (10,'李四','F',sysdate); COMMIT; |
Ø UPDATE
更新表中的記錄,需要配合WHERE子句使用,否則全表的數據都會被更新。
演示:更新testemp表中張三的ID為2
UPDATE testemp SET id=2 WHERE name='張三'; COMMIT; |
同時修改兩個類型:
UPDATE testemp SET id=5,name='王五' WHERE name='李四'; COMMIT; |
Ø DELETE
刪除表中的記錄,和UPDATE一樣,需要配合WHERE子句使用,不然會將全表數據刪除。
演示:將testemp表中id為2的記錄刪除
DELETE FROM testemp WHERE id=2; |
清空表:
DELETE FROM testemp; |