delete 刪除一張大表時空間不釋放,非常慢是因為占用大量的系統(tǒng)資源,支持回退操作,空間還被這張表占用著。 truncate table 表名 (刪除表中記錄時釋放表空間) DML 語句: 表級共享鎖: 對于操作一張表中的不同記錄時,互不影響 行級排它鎖:對于一行記錄,oracle 會只允許只有一個用戶對它在同一時間進行修改操作 wait() 等到行級鎖被釋放,才進行數(shù)據(jù)操作 drop一張表時也會對表加鎖,DDL排它鎖,所以在刪除一張表時如果當(dāng)前還有用戶操作表時不能刪除表 alter table 命令用于修改表的結(jié)構(gòu)(這些命令不會經(jīng)常用): 增加約束: alter table 表名 add constraint 約束名 primary key (字段); 解除約束:(刪除約束) alter table 表名 drop primary key(對于主鍵約束可以直接用此方法,因為一張表中只有一個主鍵約束名, 注意如果主鍵此時還有其它表引用時刪除主鍵時會出錯) alter tbale father drop primary key cascade ; (如果有子表引用主鍵時,要用此語法來刪除主鍵,這時子表還存在只是子表中的外鍵約束被及聯(lián)刪除了) alter table 表名 drop constraint 約束名; (怎樣取一個約束名:1、人為的違反約束規(guī)定根據(jù)錯誤信息獲取! 2、查詢示圖獲取約束名!) alter table 表名 disable from primary key ; (相當(dāng)于把一個表的主鍵禁用) alter table 表名 enable primary key ;(enable 時會自動去檢查表的記錄是不是符合要求,如果有臟數(shù)據(jù)時必須要先刪除臟數(shù)據(jù)才可以 enable)
******************************************************************* 增加字段: alter table 表名 add(字段字 字段類型) 刪除字段: alter table 表名 drop(字段) alter tbale 表名 drop column 字段 ; (8i 以后才支持) 給列改名:920才支持 alter table 表名 rename column 舊字段名 to 新字段名; 修改字段 (此時應(yīng)注意的問題,更改時要看具體值情況之間的轉(zhuǎn)達換, 改為字符類型時,必須要為空) alter table 表名 modify( 字段,類型) 更改表中的字段: update 表名 set 字段 = 值 where 條件 更改表名 rename 舊表名 to 新表名 ; 刪除表: trucate table 表名:(表結(jié)構(gòu)還在,數(shù)據(jù)全部刪除,釋放表所占的空間,不支持回退,常用刪除大表)
關(guān)于oralce中產(chǎn)生序列(sequence): create sequence 序列名alter system flush shared_pool; (不帶參數(shù)時默認為從1 開始每次遞增 1,oracle中為了提高產(chǎn)生序列的效率一般一次性產(chǎn)生20個序列放入當(dāng)前會話的序列池中備用以加快效率,序列會出現(xiàn)不連續(xù)的動作回退操作不會影響序列取值) sequence 的參數(shù): 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 查看當(dāng)前的序列數(shù) select 序列名.nextval from dual 查看下一個序列數(shù),它會自動給當(dāng)前的序列加1 為列:nextval currval (開另一個session時取當(dāng)前值不成功時,應(yīng)該先取下一個值,再取當(dāng)前值) 清空當(dāng)前會話的內(nèi)存: alter system flush shared_pool;(執(zhí)行此命令要有DBA權(quán)限,一般用戶執(zhí)行出錯) 修改序列:(此命令不常用,只需了解就行不必深究) alter sequence 序列名 修改項; 刪除序列sequence drop sequence 序列名; 創(chuàng)建示圖: creating views(屬于了解知識) desc user_views; select text from user_views where view_name='TEST1_V1' ; 示圖就相當(dāng)于一條select 語句,定義了一個示圖就是定義了一個sql語句,示圖不占空間,使用view 不會提高性能,但是能簡單化sql語句 (擴展知識: oracle 8i 以后的新示圖)MV 物化視圖(占存儲空間,把select 結(jié)果存在一個空間,會提高查詢視圖,增強實時性,但是存在刷新問題, 主要應(yīng)用在數(shù)據(jù)倉庫中用要用于聚合表) 使用示圖的好處:控制數(shù)據(jù)訪問權(quán)限. 如何創(chuàng)建一個示圖: create or replace views test_vi as select * from test1 where c1=1; 此時往表test1(base table 基表)中插入數(shù)據(jù)時:表中沒能變化,示圖中的數(shù)據(jù)發(fā)生改變 從示圖中插數(shù)據(jù)時相對應(yīng)的表會發(fā)生改變: 往示圖中插數(shù)據(jù)時,會直接插進基表中,查看示圖中的數(shù)據(jù)時,相當(dāng)于就是執(zhí)行創(chuàng)建時的select語句。 簡單示圖:能進行DML操作。 復(fù)雜示圖:來源于多張表,不能執(zhí)行DML操作。 關(guān)于rownum: rownum 有個特點要么等于1 要么小于某個值, 不能直接等于某個值, 不能大于某個值。rownum常用于分頁顯示。 練習(xí):查詢出第5條數(shù)據(jù)和第10條數(shù)據(jù)之間: 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 ); 練習(xí):哪些員工的工資比本部門的平均工資高? 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 就相當(dāng)于給示圖加上了約束 create view test_v as select * from test where c =1 with check option ; 同義詞:相當(dāng)于別名的作用(***只需了解***)系統(tǒng)自建的同義詞: 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; 創(chuàng)建公共的同義詞,但是要權(quán)限. 刪除同義詞: drop synonym 同義詞名稱 創(chuàng)建索引: Creating indexes(概念很重要對系統(tǒng)的性能影響非常大) 建索引的目的就是為了加快查詢速度。 索引就相于一本的書的目錄。索引點系統(tǒng)空間,屬于表的附屬物。刪除一個表時,相對應(yīng)的索引也會刪除。truncate 表時索引結(jié)構(gòu)在,但是數(shù)據(jù)不存在。 full table scan 全表掃描 用索引就是為了快速定位數(shù)據(jù):(理解時就以字典的目錄為例) 查看表的rowid: select rowid , first_name from s_emp; rowid 定義的信息有: object block table 每條記錄都有自己的rowid 索引由誰創(chuàng)建:用戶,建索引后會使DML操作效率慢,但是對用戶查詢會提高效率,這就是我們建索引的最終目的, 創(chuàng)建一個索引: create index 索引名 on 表名 ( 字段名); create insex testindex on test(c1, c2); 哪些字段應(yīng)該建索引: 經(jīng)常要用where的子句的地方,所以要用索引.用不用索引,關(guān)鍵要看所查詢的數(shù)據(jù)與所有數(shù)據(jù)的百分比,表越大,查詢的記錄越少,索引的效率最高. 替換變量:用符號來定義替換變量支持交互性提示,對于字符性的數(shù)字,一定要寫在單引號之間 set verify on set verify off; 相當(dāng)于開關(guān)變量,用于控制是否顯示新舊的sql語句 select id ,last_name ,salary from s_emp where title='job_title'; 更改交互的提示信息: accept p_dname prompt ' 提示信息'; 定義變量: define p_dname='abc'; 分頁的實現(xiàn)語句:(可以正常運行) select * from ( select rownum rnum , a.* from (select * from s_emp) a ) where rnum between 5 and 10 ;