1.資料定義語言 (Data Definition Language)(DDL):Data definition language 這些命令主要是被資料庫管理者用來建立和刪除資料庫實體的。 例如:create,alter,drop命令等等;2.資料操縱語言(DML):Data manipulation language 向表中插入紀錄,修改紀錄 例如:insert,update,delete,select..fro update命令等等;3.資料查詢語言(DQL):Data query language 例如:基本select查詢,order by,group by字句等4.事物控制語言(TCL): Transaction control language 例如:commit,sssacepoint,rollback5.資料控制語言(DCL):Date control language 例如:grant,revoke
--sys查詢在某個時間的建的使用者
select * from all_users where CREATED-to_date('2012-2-01','yyyy-mm-dd')>0 --delete 刪除一張大表時空間不釋放,非常慢是因為佔用大量的系統資源,支援後援動作,空間還被這張表佔用著。 --
truncate table 表名 (刪除表中記錄時釋放資料表空間) DML 語句: 表級共用鎖定: 對於操作一張表中的不同記錄時,互不影響 行級排它鎖:對於一行記錄,oracle 會只允許只有一個使用者對它在同一時間進行修改操作 wait() 等到行級鎖被釋放,才進行資料操作 drop一張表時也會對錶加鎖,DDL排它鎖,所以在刪除一張表時如果當前還有使用者動作表時不能刪除表 alter table 命令用於修改表的結構(這些命令不會經常用): 增加約束:
alter table 表名 add constraint 約束名 primary key (欄位); 解除約束:(刪除約束) alter table 表名 drop primary key(對於主鍵約束可以直接用此方法,因為一張表中只有一個主鍵約束名, 注意如果主鍵此時還有其它表引用時刪除主鍵時會出錯)
alter tbale father drop primary key cascade ; (如果有子表引用主鍵時,要用此文法來刪除主鍵,這時子表還存在只是子表中的外鍵約束被及聯刪除了)
alter table 表名 drop constraint 約束名; (怎樣取一個約束名:1、人為的違反約束規定根據錯誤資訊擷取! 2、查詢示圖擷取約束名!)
alter table 表名 disable from primary key ; (相當於把一個表的主鍵禁用)
alter table 表名 enable primary key ;(enable 時會自動去檢查表的記錄是不是符合要求,
如果有髒資料時必須要先刪除髒資料才可以 enable) ******************************************************************* 增加欄位:
alter table 表名 add(欄位字 欄位類型) 刪除欄位:
alter table 表名 drop(欄位) alter tbale 表名 drop column 欄位 ; (8i 以後才支援) 給列改名:920才支援
alter table 表名 rename column 舊欄位名 to 新欄位名; 修改欄位 (此時應注意的問題,更改時要看具體值情況之間的轉達換, 改為字元類型時,必須要為空白)
alter table 表名 modify( 欄位,類型) 更改表中的欄位:
update 表名 set 欄位 = 值 where 條件 更改表名 rename 舊錶名 to 新表名 ; 刪除表:
trucate table 表名:(表結構還在,資料全部刪除,釋放表所佔的空間,不支援回退,常用刪除大表) 關於oralce中產生序列(sequence): create sequence 序列名alter system flush shared_pool; (不帶參數時預設為從1 開始每次遞增 1,oracle中為了提高產生序列的效率一般一次性產生20個序列放入當前會話的序列池中備用以加快效率,序列會出現不連續的動作後援動作不會影響序列取值)
sequence 的參數:
increment by n 起始值, start with n 遞增量, maxvalue n 最大值, minvalue n 最小值, cycle | no cycle 輪迴, cache n 綬存(第一次取時會一次取多少個id存起來) 查看 sequence 示圖: desc user_sequences ;
select sequence_name , cache_size , last_number from user_sequences where sequence_name like 's_'; select 序列名.currval from dual 查看當前的序列數 select 序列名.nextval from dual 查看下一個序列數,它會自動給當前的序列加1 為列:nextval currval (開另一個session時取當前值不成功時,應該先取下一個值,再取當前值) 清空當前會話的記憶體:
alter system flush shared_pool;(執行此命令要有DBA許可權,一般使用者執行出錯) 修改序列:(此命令不常用,只需瞭解就行不必深究)
alter sequence 序列名 修改項; 刪除序列sequence
drop sequence 序列名; 建立示圖: creating views(屬於瞭解知識) desc user_views; select text from user_views where view_name='TEST1_V1' ; 示圖就相當於一條select 語句,定義了一個示圖就是定義了一個sql語句,示圖不佔空間,使用view
不會提高效能,但是能簡單化sql語句 (擴充知識: oracle 8i 以後的新示圖)MV 物化視圖(占儲存空間,把select 結果存在一個空
間,會提高查詢檢視,增強即時性,但是存在重新整理問題, 主要應用在資料倉儲中用要用於彙總表) 使用示圖的好處:控制資料存取權限. 如何建立一個示圖:
create or replace views test_vi as select * from test1 where c1=1; 此時往表test1(base table 基表)中插入資料時:表中沒能變化,示圖中的資料發生改變 從示圖中插資料時相對應的表會發生改變: 往示圖中插資料時,會直接插進基表中,查看示圖中的資料時,相當於就是執行建立時的select語
句。 簡單示圖:能進行DML操作。 複雜示圖:來源於多張表,不能執行DML操作。 關於rownum: rownum 有個特點要麼等於1 要麼小於某個值, 不能直接等於某個值, 不能大於某個值。rownum
常用於分頁顯示。 練習:查詢出第5條資料和第10條資料之間: select first_name , rnum from ( select rownum rnum , first_name from s_emp where
rownum <=10 ) where rnum between 5 and 10 ; 分面顯示: SELECT * FROM (SELECT a.*, rownum r FROM S_EMP a WHERE r between 5 AND 10 ); 練習:哪些員工的工資比本部門的平均工資高? select first_name , salary , avgsal from s_emp e , ( select dept_id , avg (salary
) avgsal from s_emp group by dept_id ) a where e.dept_id =a.dept_id and e.salary >
a.avgsal; 在示圖上加一個 with check option 就相當於給示圖加上了約束 create view test_v as select * from test where c =1 with check option ; 同義字:相當於別名的作用(***只需瞭解***)系統自建的同義字: user_tables
create synonym asd_s_emp for asd_0607.s_emp ; 目的就是為了給asd_0607_s_emp表起另一個代替的名稱asd.s_emp;注意這個同義字只能自己使用; create public synonym p_s_emp fro asd_0607.s_emp; 建立公用的同義字,但是要許可權. 刪除同義字:
drop synonym 同義字名稱 建立索引: Creating indexes(概念很重要對系統的效能影響非常大) 建索引的目的就是為了加快查詢速度。 索引就相於一本的書的目錄。索引點系統空間,屬於表的附屬物。刪除一個表時,相對應的索引也
會刪除。truncate 表時索引結構在,但是資料不存在。 full table scan 全表掃描 用索引就是為了快速定位元據:(理解時就以字典的目錄為例) 查看錶的rowid: select rowid , first_name from s_emp; rowid 定義的資訊有: object block table 每條記錄都有自己的rowid 索引由誰建立:使用者,建索引後會使DML操作效率慢,但是對使用者查詢會提高效率,這就是我們建索
引的最終目的, 建立一個索引:
create index 索引名 on 表名 ( 欄位名); create insex testindex on test(c1, c2); 哪些欄位應該建索引: 經常要用where的子句的地方,所以要用索引.用不用索引,關鍵要看所查詢的資料與所有資料的百
分比,表越大,查詢的記錄越少,索引的效率最高. 替換變數:用&符號來定義替換變數支援互動性提示,對於字元性的數字,一定要寫在單引號之間 set verify on set verify off; 相當於開關變數,用於控制是否顯示新舊的sql語句
select id ,last_name ,salary from s_emp where title='&job_title'; 更改互動的提示資訊: accept p_dname prompt ' 提示資訊'; 定義變數: define p_dname='abc'; 分頁的實現語句:(可以正常運行)
select * from ( select rownum rnum , a.* from (select * from s_emp) a ) where rnum between 5 and 10 ;