DDL、DML和DCL的差別與懂得。本站提示廣大學習愛好者:(DDL、DML和DCL的差別與懂得)文章只能為提供參考,不一定能成為您想要的結果。以下是DDL、DML和DCL的差別與懂得正文
1、創立和治理表
1、創立表語法
create table 表名(column datatype [default expr][,column ...])
default 束縛 解釋略
2、應用子查詢創立表
create table 表名
as
select * from u表
2、修正表
1、添加一個新列
oracle:alter table table_name
add(column datatype [default expr][,column datatype]...);
2、修正現有的列(修正類型,年夜小,默許值)
oracle:alter table table_name
modify(column datatype [defaullt expr][,column datatype]...)
3、刪除列
alter table table_name drop column(症結字) 列1
集中刪除列
alter table table_name set unused column 列1
alter table table_name drop unused columns;
3、刪除表
drop table 表名;刪除表後主動提交,不克不及rollback回來。
重名表:rename 表名 to 新表名
高效清空一張表,用truncate 刪除時不做日記記載也就是不克不及用rollback回滾回來。
truncate table 表名
用delete刪除後,可今後悔,回滾回來。
給一張表做正文
comment on table tb_u_1 is '用戶表用來寄存用戶信息....'
四,添加束縛
create table table_name
(id int not null,
lname varchar(20),
fname varchar(20),
constraint un_key_1 unique(lname,fname)
)
alter table 表名 add constraint ch_1 check(column1 like 'k%');
在添加數據時假如column1的數據中沒有k則添加掉敗
添加主鍵束縛
oracle/sql:aleter table 表名1 add constraint pk_1 primary key(column1);
添加外鍵
oracle/sql:aleter table 表名2 add constraint fk_1 foreign key(column1) references 表名1(column1);
刪除主鍵束縛
oracle/sql:alter table tb_name drop constraint p1
alter table 表名2 drop constraint fk_1 cascade;
sql:查詢主鍵能否存在p1
if exists(select * from sysobjects where name='p1')
select * from user_constraint
select constraint_name,column_name from user_cons_columns where table_name=''
5、創立視圖Create View
create [or replace] [force|noforce] view view_name
[]
as subquery
[with check option [constraint 11]]
[with read only [constraint 22]]
創立一個視圖或重界說一個視圖
create or replace view view_name as subquery
假如表table_1不存在,則應用force 創立視圖會勝利,不然會報表不存在毛病。
create force view v_name as select * from table_1
應用視圖修正數據
create view view_001
as
select * from table_001 where id<10
修正不在視圖規模內的數據異樣會勝利。
update view_001 set column1='123' where id=10;
修正不在視圖規模內的數據則會掉敗(只能修正id<10),報:“視圖 with check option 違背 where 字句”
create view view_001
as
select * from table_001 where id<10
with check option;
update view_001 set column1='123' where id=10;
創立只讀視圖 Create a read only view
create view view_001
as
select * from table_001 where id<10
with read only;
刪除視圖 Drop View
drop view view_Name
暫時視圖 inline views
select * from (select * from table_Name)
6、序列(sequence)、索引、同義詞
創立序列(sequence)
create sequence seq_name
[increment by n]
[start with n]
[{maxvalue|nomaxvalue}]
[{minvalue|nominvalue}]
[{cycle|nocycle}]
[{cache|nocache}]
create sequence seq_test1
increment by 1
start with 1
查詢序列Select a Sequence
select seq_test1.currval from daul
select seq_test1.nextvall from daul
select * from user_sequences(用戶序列視圖)
應用序列Using a Sequence
create table tb_1(a int);
insert into tb_1(seq_test1.currval);
修正序列Modifying a Sequence
alter sequence seq_test1
increment by 20
maxvalue 999999
nocache
nocycle;
創立索引Creating an Index
在一列或多列上創立索引Create an index on one or more columns
Create index index_test1
on table(column[,column]...);
索引能進步數據檢索的速度,然則下降了UPDATE,DELETE,INSERT數據操作的機能!!!
索引創立准繩(摘自csdn)
一.B-Tree索引:
1. 選項擇索引字段的准繩:
l 在WHERE子句中最頻仍應用的字段
l 聯接語句中的聯接字段
l 選擇高選擇性的字段(假如很少的字段具有雷同值,即有許多奇特值,則選擇性很好)
l ORACLE在UNIQUE和主鍵字段上主動樹立索引
l 在選擇性很差的字段上建索引只要在這個字段的值散布異常傾斜的情形下下才無益(在這類情形下,某一,兩個字段值比其它字值少湧現許多)
l 不要在很少奇特值的字段上建B-TREE索引,在這類情形下,你可以斟酌在這些字段上建位圖索引.在聯機事務處置情況下,所由並發性異常高,索引常常被修正,所以不該該建位圖索引
l 不要在常常被修正的字段上建索引.當有UPDATE,DELETE,INSETT操作時,ORACLE除要更新表的數據外,同時也要更新索引,並且就象更新數據一樣,或發生復原和重做條目
l 不要在有效到函數的字段上建索引,ORACLE在這類情形,優化器不會用到索引,除非你樹立函數索引
l 可以斟酌在外鍵字段上建索引,這些索引許可當在主表上UPDATE,DELETE操作時,不須要同享子表的鎖,這異常實用於在父表和子表上有許多並發的INSERT,UPDATE和DELETE操作的情形
l 當樹立索引後,請比擬一下索引後所取得的查詢機能的進步和UPDATE,DELETE,INSERT操作機能上的喪失,比擬得掉後,再最初決議能否需樹立這個索引
2. 選擇樹立復合索引
復合索引的長處:
l 改良選擇性:復合索引比單個字段的索引更具選擇性
l 削減I/O:假如要查詢的字段恰好全體包括在復合索引的字段裡,則ORACLE只須拜訪索引,不必拜訪表
甚麼情形下優化器會用到復合索引呢?
(a)當SQL語句的WHERE子句中有效到復合索引的引導字段時,ORACLE優化器會斟酌用到復合索引來拜訪.
(b)當某幾個字段在SQL語句的WHERE子句中常常經由過程AND操作符結合在一些應用作為過濾謂詞,而且這幾個字段合在一路時選擇性比各自單個字段的選擇性要更好時,能夠斟酌用這幾個字段來樹立復合索引.
(c)當有幾個查詢語句都是查詢異樣的幾個字段值時,則可以斟酌在這幾個字段上樹立復合索引.
復合索引字段排序的准繩:
l 確保在WHERE子句中應用到的字段是復合索引的引導字段
l 假如某個字段在WHERE子句中最頻仍應用,則在樹立復合索引時,斟酌把這個字段排在第一名(在CREATE INDEX語句中)
l 假如一切的字段在WHERE子句中應用頻率雷同,則將最具選擇性的字段排在最後面,將最不具選擇性的字段排在最初面
l 假如一切的字段在WHERE子句中應用頻率雷同,假如數據在物理上是按某一個字段排序的,則斟酌將這個字段放在復合索引的第一名
二.位圖索引
甚麼情形下位圖索引可以或許改良查詢的機能呢?
l WHERE子句包括多個謂詞於中低基數的字段
l 單個的謂詞在這些中低基數的字段上拔取年夜量的行
l 曾經有位圖索引創立於某些或全體的這些中低基數的字段上
l 被查詢的表包括許多行
l 可以在單一個表上樹立多個位圖索引,是以,位圖索引可以或許改良包括冗雜WHERE子句的龐雜查詢的機能,在算計查詢和星形模子的聯接查詢語句中,位圖索引也能夠供給比擬優秀的機能
位圖索引與B-TREE索引的比擬
l 位圖索引更節儉存儲空間
l 位圖索引比擬實用於數據倉庫情況,但不適於聯機事務處置情況.在數據倉庫情況,數據保護平日上經由過程批量INSERT和批量UPDATE來完成的,所以索引的保護被延遲直互DML操作停止.舉例:當你批量拔出1000行數據時,這些拔出的行被放置到排序緩存中(SORT BUFFER),然後批處置更新這1000個索引條目,所以,每個位圖段在每個DML操作中只需更新一次,即便在誰人位圖段裡有多行被更新
l 一個健值的緊縮位圖是由一個或多個位圖段所構成,每個位圖段年夜約相當於半個BLOCK SIZE那末年夜,鎖的最小粒度是一個位圖段,在聯機事務處置情況,假如多個事務履行同時的更新(即並發的更新),應用位圖索引就會影響UPDATE,INSERT,DELETE機能了
l 一個B-TREE索引的條目只包括一個ROWID,是以,當一個索引條目被鎖定,即一行被鎖定.然則關於位圖索引, 一個索引條目潛伏地有能夠包括一段ROWID(即某一個規模內的ROWID,有多個ROWID),當一個位圖索引條目被鎖准時,則這個條目包括的那一段ROWID都被鎖定,從而影響並發性.當一個位圖段內的ROWID的數目越多時,並發性就越差.固然如斯,關於BULK INSERT,UPDATE和DELETE,位圖索引的機能照樣比B-TREE索引要好
三,索引和NULL
NULL值在索引中是被看作一個奇特值的除非當一個索引的兩行或多行的NON-NULL值是相等的情形下.在那種情形下,行被看作是相等的,是以,獨一索引不許可行包括空值以怕被看作是相等的.然則,當一切的行都是空值時,這個規矩就不實用.ORACLE其實不索引一切健值都為NULL的表的行,除非是位圖索引或當簇鍵字段值是NULL時
創立同義詞Create a Synongms
create [public] synonym sy_name for object
創立一個體名為table_001
create synonym tb1 for table_001
刪除同義詞Drop a synonym
Drop synonym tb1
Oracle同義詞創立及其感化(摘自http://www.jb51.net/database/201109/106257.html)
Oracle的同義詞(synonyms)從字面上懂得就是別號的意思,和試圖的功效相似,就是一種映照關系。本文引見若何創立同義詞語句,刪除同義詞和檢查同義詞語句。
oracle的同義詞總結:
從字面上懂得就是別號的意思,和試圖的功效相似。就是一種映照關系。
1.創立同義詞語句:
create public synonym table_name for user.table_name;
個中第一個user_table和第二個user_table可以紛歧樣。
另外假如要創立一個長途的數據庫上的某張表的同義詞,須要先創立一個Database Link(數據庫銜接)來擴大拜訪,然後在應用以下語句創立數據庫同義詞:create synonym table_name for table_name@DB_Link;
固然,你能夠須要在user用戶中給以後用戶(user2)受權: grant select/delete/update on user2
2.刪除同義詞:
drop public synonym table_name;
3.檢查一切同義詞:
select * from dba_synonyms
同義詞具有以下利益:節儉年夜量的數據庫空間,對分歧用戶的操作統一張表沒有若干差異;擴大的數據庫的應用規模,可以或許在分歧的數據庫用戶之間完成無縫交互;同義詞可以創立在分歧一個數據庫辦事器上,經由過程收集完成銜接。
Oracle數據庫中供給了同義詞治理的功效。Oracle同義詞是數據庫計劃對象的一個體名,常常用於簡化對象拜訪和進步對象拜訪的平安性。
AD:
在Oracle中對用戶的治理是應用權限的方法來治理的,也就是說,假如我們想應用數據庫,我們就必需得有權限,然則假如是他人將權限授與了我們,我們也是能對數據庫停止操作的,然則我們必需要已受權的表的稱號前鍵入該表一切者的稱號,所以這就是比擬費事的,碰到這類情形,我們該怎樣辦呢?創立個Oracle同義詞吧!如許我們便可以直接應用同義詞來應用表了。
1.同義詞的概念
Oracle數據庫中供給了同義詞治理的功效。同義詞是數據庫計劃對象的一個體名,常常用於簡化對象拜訪和進步對象拜訪的平安性。在應用同義詞時,Oracle數據庫將它翻譯成對應計劃對象的名字。與視圖相似,同義詞其實不占用現實存儲空間,只要在數據字典中保留了同義詞的界說。在Oracle數據庫中的年夜部門數據庫對象,如表、視圖、同義詞、序列、存儲進程、包等等,數據庫治理員都可以依據現實情形為他們界說同義詞。
2.Oracle同義詞的分類
Oracle同義詞有兩品種型,分離是公用Oracle同義詞與公有Oracle同義詞。
1)公用Oracle同義詞:由一個特別的用戶組Public所具有。望文生義,數據庫中一切的用戶都可使用公用同義詞。公用同義詞常常用來標示一些比擬通俗的數據庫對象,這些對象常常年夜家都須要援用。
2)公有Oracle同義詞:它是跟公用同義詞所對應,他是由創立他的用戶一切。固然,這個同義詞的創立者,可以經由過程受權掌握其他用戶能否有權應用屬於本身的公有同義詞。
3.Oracle同義詞創立及刪除
創立私有Oracle同義詞的語法:Create [public] synonym 同義詞稱號 for [username.]objectName;
Drop [public] synonym 同義詞稱號
4.Oracle同義詞的感化
1) 多用戶協同開辟中,可以屏障對象的名字及其持有者。假如沒有同義詞,當操作其他用戶的表時,必需經由過程user名.object名的情勢,采取了Oracle同義詞以後便可以隱藏失落user名,固然這裡要留意的是:public同義詞只是為數據庫對象界說了一個公共的別號,其他用戶可否經由過程這個體名拜訪這個數據庫對象,還要看能否曾經為這個用戶受權。
2) 為用戶簡化sql語句。下面的一條其實就是一種簡化sql的表現,同時假如本身建的表的名字很長,可認為這個表創立一個Oracle同義詞來簡化sql開辟。
3)為散布式數據庫的長途對象供給地位通明性。
5.Oracle同義詞在數據庫鏈中的感化
數據庫鏈是一個定名的對象,解釋一個數據庫到另外一個數據庫的途徑,經由過程其可以完成分歧數據庫之間的通訊。
Create database link 數據庫鏈名 connect to user名 identified by 口令 using ‘Oracle銜接串'; 拜訪對象要經由過程 object名@數據庫鏈名。同義詞在數據庫鏈中的感化就是供給地位通明性。