Oracle四大語言DDL DML DCL TCL
DDL(資料定義語言)
-
creater
-
建立資料表
ceater table 表名 ();
-
-
alter
-
修改表結構
新增欄位:alter table 表名 add 列名 資料型別 null
刪除欄位:alter table 表名 drop column 列名
-
-
drop
-
刪除資料表
drop table 表名
-
-
truncate
DML(資料操作語言)
-
insert(插入語句)
insert into 表名(列名,列名,....)values("對應的列值","對應的列值");
插入一條語句,欄位的值,型別必須一致。
-
update(更新語句)
update 表名 set 列名=修改的新值
-
delete(刪除語句)
-
刪除表中全部資料
delete from 表名
-
根據條件刪除
delete from 表名 where 列名=列值
-
-
select(查詢語句)
-
查詢語句比較強大,我這裡只簡單寫一個基礎語法,下次單獨寫一遍關於查詢的。
select * from 表名
-
DCL(資料控制語言)
主要實現使用者的許可權控制,要實現使用者的管理操作,必須要提供管理的許可權(即用sys/system來操作)
-
建立使用者
creater user 使用者名稱 identified by 密碼
使用者剛剛建立的時候還不能登陸,因為缺少session許可權
-
授權
grant create session to 使用者名稱
但是我們在建立使用者的時候一個個的分配許可權太麻煩,在我們Oracle中,提供了兩種角色(connect,resource),這兩個角色就相當於一個許可權包,裡面包含了我們所需要的一些許可權,我只需要將這個角色給使用者,使用者就有了角色裡面相應的許可權。
-
給使用者分配角色
grant connect,resource to 使用者名稱
許可權分配後,一定要重新登陸。
我們可以通過,資料字典來檢視角色裡面擁有的許可權
-
檢視角色擁有的許可權
-- 該角色的系統許可權 select* from dba_sys_privs where grantee = 'dba' -- 該角色的物件許可權 select * from dba_tab_privs where grantee = 'dba' -- 查詢某個使用者具有多少角色 select* from dba_role_privs where grantee = '使用者名稱';
-
修改使用者密碼(必須是管理員賬號)
alter user 使用者名稱 identified by 密碼
-
讓密碼失效:登入之後需要立即修改密碼
alter user 使用者名稱 password expire
-
鎖定使用者
alter user 使用者名稱 account lock
-
解鎖使用者
alter user 使用者名稱 accoun unlock
-
指定使用者輸入密碼錯誤的次數,並指定超過次數之後的鎖定時間:
--建立profile 檔案 create profile lock_account limit failed_login_attempts 3 password_lock_time 2 --最多可以輸入3次,超過後使用者將被鎖定2天 -- lock_account: profile檔名 alter user scott profile lock_account
-
讓使用者定期修改密碼,若到期後不修改,則在寬限期後鎖定使用者:
--建立profile檔案 create profile myprofile limit password_life_time 10 password_grace_time 2; --10天后修改密碼,寬限期為2天 alter user scott profile myfrofile;
-
刪除profile檔案:
drop profile myprofile [cascade]
-
物件許可權
兩個普通使用者之間不能互相訪問資源,但是管理員可以訪問;但是我們如果想讓一個使用者訪問到另一個使用者的資源該怎麼辦?
這就要在管理員介面將訪問另一個使用者的許可權賦予給他:
實際上訪問一個使用者,用到的一共就四個許可權:insert update select delete
我們一般只給一個使用者檢視(select) 的許可權:grant select on scott.emp to tog;(將scott的emp表的檢視許可權賦予給dog)
-
回收許可權
revoke connect,resource from dog; revoke create session,create table from dog;
-
刪除使用者
drop user 使用者 cascade
假如,使用者A建立檢視a需要訪問使用者B的資料b,這個時候,就需要把B的檢視b表許可權賦給A,但是,如果使用者C想要檢視使用者A的檢視a,就需要把A的檢視檢視a的許可權賦給C,但是這個時候,會提示ora-01720 授權選項對於‘b’不存在,這是因為,檢視a中的資料中有使用者B中b表的資料,而C是沒有許可權檢視的,這個時候,需要在把B的檢視b表的許可權語句後面加上 with grant option,這樣,就可以把A的檢視檢視a的許可權賦給C了。
grant select on a to C with grant option;
許可權分為系統許可權和物件許可權兩種:
系統許可權:create table ,create session…
物件許可權:insert ,select,update,delete
而因為我們在使用過程中一個個的分配許可權太麻煩,又定義了一個角色許可權:他屬於一個許可權包,裡面有一攬子系統或者物件許可權。
TCL(事務控制語言)
-
commit(提交)
事務的提交比較簡單;直接在執行DML語句後進行提交即可,如果不提交事務則剛剛通過DML語句進行修改的內容還未儲存到資料庫中,只在當前使用者的連線會話中有效。要永久變更資料需要顯示地執行提交、回滾或者退出當前回話(如退出sqlplus)。
提交的命令為:commit
-
儲存點(savepoint)與回滾(rollback)
儲存點savepoint一般與回滾rollback配合使用。在設定了savepoint後事務的粒度可以控制的更加細化,可以回滾到特定的儲存點。
-
儲存點(savepoint)語法:
savepoint<savepoint_name>
建立一個儲存點,名稱為a,示例:
savepoint a
【注意】當建立儲存點之後執行的DML操作,可以進行回滾,而儲存點之前未提交的DML操作不受影響。
-
回滾(rollback)
rollbac [to savepoint]
回滾到a儲存點,既儲存點a之後的所有未提交的DML都無效。示例:
rollbac to a
-
儲存點與回滾完整示例:
--1、建立儲存點a savepoint a; --2、插入emp資料 it1 insert into emp(empno,ename) values(1234,'it1'); --3、建立儲存點b savepoint b; --4、插入emp資料 it2 insert into emp(empno,ename) values(1235,'it2'); --5、檢視emp表資料,存在it1、it2兩條資料 select ename from emp; --6、回滾到儲存點b,即it2資料將消失 rollback to b; --7、檢視emp表資料,存在it1的資料,it2已不在 select ename from emp; --8、提交資料 commit; --9、檢視emp表資料,存在it1的資料 select ename from emp; --10、回滾到儲存點a,將報錯儲存點不存在的錯誤資訊 rollback to a;
-