1. 程式人生 > 其它 >Oracle四大語言DDL DML DCL TCL

Oracle四大語言DDL DML DCL TCL

DDL(資料定義語言)

  1. creater

    • 建立資料表

      ceater table 表名 ();

  2. alter

    • 修改表結構

      新增欄位:alter table 表名 add 列名 資料型別 null

      刪除欄位:alter table 表名 drop column 列名

  3. drop

    • 刪除資料表

      drop table 表名

  4. truncate

DML(資料操作語言)

  1. insert(插入語句)

    insert into 表名(列名,列名,....)values("對應的列值","對應的列值");

    插入一條語句,欄位的值,型別必須一致。

  2. update(更新語句)

    update 表名 set 列名=修改的新值

  3. delete(刪除語句)

    • 刪除表中全部資料

      delete from 表名

    • 根據條件刪除

      delete from 表名 where 列名=列值

  4. select(查詢語句)

    • 查詢語句比較強大,我這裡只簡單寫一個基礎語法,下次單獨寫一遍關於查詢的。

      select * from 表名

DCL(資料控制語言)

主要實現使用者的許可權控制,要實現使用者的管理操作,必須要提供管理的許可權(即用sys/system來操作)

  1. 建立使用者

    creater user 使用者名稱 identified by 密碼

    使用者剛剛建立的時候還不能登陸,因為缺少session許可權

  2. 授權

    grant create session to 使用者名稱

    但是我們在建立使用者的時候一個個的分配許可權太麻煩,在我們Oracle中,提供了兩種角色(connectresource),這兩個角色就相當於一個許可權包,裡面包含了我們所需要的一些許可權,我只需要將這個角色給使用者,使用者就有了角色裡面相應的許可權。

  3. 給使用者分配角色

    grant connect,resource to 使用者名稱

    許可權分配後,一定要重新登陸。

    我們可以通過,資料字典來檢視角色裡面擁有的許可權

  4. 檢視角色擁有的許可權

    -- 該角色的系統許可權
    select* from dba_sys_privs where grantee = 'dba'
    -- 該角色的物件許可權
    select * from dba_tab_privs where grantee = 'dba'
    -- 查詢某個使用者具有多少角色
    select* from dba_role_privs where grantee = '使用者名稱';
    
  5. 修改使用者密碼必須是管理員賬號

    alter user 使用者名稱 identified by 密碼

  6. 讓密碼失效:登入之後需要立即修改密碼

    alter user 使用者名稱 password expire

  7. 鎖定使用者

    alter user 使用者名稱 account lock

  8. 解鎖使用者

    alter user 使用者名稱 accoun unlock

  9. 指定使用者輸入密碼錯誤的次數,並指定超過次數之後的鎖定時間:

    --建立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
    
  10. 讓使用者定期修改密碼,若到期後不修改,則在寬限期後鎖定使用者:

    --建立profile檔案
    create profile  myprofile limit password_life_time 10 password_grace_time 2;
    --10天后修改密碼,寬限期為2天
    alter user scott profile myfrofile;
    
  11. 刪除profile檔案:

    drop profile myprofile [cascade]

  12. 物件許可權

    兩個普通使用者之間不能互相訪問資源,但是管理員可以訪問;但是我們如果想讓一個使用者訪問到另一個使用者的資源該怎麼辦?
    這就要在管理員介面將訪問另一個使用者的許可權賦予給他:
    實際上訪問一個使用者,用到的一共就四個許可權:insert update select delete
    我們一般只給一個使用者檢視(select) 的許可權:

    grant select on scott.emp to tog;(將scott的emp表的檢視許可權賦予給dog)
    
  13. 回收許可權

    revoke connect,resource from dog;
    revoke create session,create table from dog;
    
  14. 刪除使用者

    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(事務控制語言)

  1. commit(提交)

    事務的提交比較簡單;直接在執行DML語句後進行提交即可,如果不提交事務則剛剛通過DML語句進行修改的內容還未儲存到資料庫中,只在當前使用者的連線會話中有效。要永久變更資料需要顯示地執行提交、回滾或者退出當前回話(如退出sqlplus)。

    提交的命令為:commit

  2. 儲存點(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;