SQL語言共分為四大類
DML語言
DML是SQL的一個子集
語句
用途
INSERT
向表中添加行
UPDATE
更新存儲在表中的數據
DELETE
刪除行
SELECT FOR UPDATE
禁止其他用戶訪問DML語句正在處理的行
插入數據
INSERT語句常常用於向表中插入行
列目錄是可選的
插入行的數據的數量和數據類型必須和列的數量和數據類型相匹配
下面的兩個例子是等價的
以下為引用的內容
INSERT INTO customers(cust_id
VALUE(
以下為引用的內容
INSERT INTO customers(cust_id
VALUE(
UPDATE命令用於修改表中的數據
UPDATE order_rollup
SET(qty price)=(SELECT SUM(qty) SUM(price) FROM order_lines WHERE customer_id= KOHL
WHERE cust_id= KOHL
AND order_period=TO_DATE( Oct )
刪除數據
DELETE語句用來從表中刪除一行或多行數據
以下為引用的內容
DELETE FROM po_lines
WHERE ship_to_state IN (
AND order_date 清空表
如果你想刪除表中所有數據
TRUNCATE TABLE (schema)table DROP(REUSE) STORAGE
STORAGE子串是可選的
TRUNCATE和DELETE有以下幾點區別
SELECT FOR UPDATE
select for update語句用於鎖定行
鎖定表
LOCK語句常常用於鎖定整個表
以下為引用的內容
LOCK schema table IN lock_mode 其中lock_mode有兩個選項
share 共享方式
exclusive 唯一方式
例
以下為引用的內容
LOCK TABLE intentory IN EXCLUSIVE MODE
死鎖
當兩個事務都被鎖定
當出現死鎖時
事務控制
事務控制包括協調對相同數據的多個同步的訪問
事務
事務表示工作的一個基本單元
事務控制語句
語句
用途
Commit
完成事務
以下為引用的內容
BEGIN
UPDATE checking
SET balance=balance
WHERE account=
INSERT INTO checking_log(action_date
VALUES (SYSDATE
UPDATE brokerage
SET cash_balance=cash_balance+
WHERE account=
INSERT INTO brokerage_log(action_date
VALUES (SYSDATE
COMMIT
EXCEPTION
WHEN OTHERS
ROLLBACK
END
Savepoint 和 部分回滾(Partial Rollback)
在SQL和PL/SQL中Savepoint是在一事務范圍內的中間標志
例
以下為引用的內容
BEGIN
INSERT INTO ATM_LOG(who
VALUES (
SAVEPOINT ATM_LOGGED;
UPDATE checking
SET balance=balance
RETURN balance INTO new_balance;
IF new_balance<
THEN
ROLLBACK TO ATM_LOGGED;
COMMIT
RAISE insufficient_funda;
END IF
END
關鍵字SAVEPOINT是可選的
以下為引用的內容
ROLLBACK TO ATM_LOGGED;
ROLLBACK TO SAVEPOINT ATM_LOGGED;
一致性和事務
一致性是事物控制的關鍵慨念
oracle常常使用語句級(state
oracle通過SCN(syatem change number)實施一致性
事務級一致性
SET TRANSACTION 的一個作用是確保事務級一致或語句級一致中有一個實施
ISOLATION LEVEL READ COMMIT 表示語句級一致
ISOLATION LEVEL SERIALIZABLE 表示事務級一致
例
以下為引用的內容
SET TRANSACTION ISOLATION LEVEL READ COMMIT;
SET TRANSACTION ISOLATION LEVEL READ COMMIT
下面的語句也能確保事務級一致
以下為引用的內容
SET TRANSCATION READ ONLY
任何企圖在只讀(READ ONLY)事務中修改數據的操作都會拋出一個異常
以下為引用的內容
SELECT(沒有FOR UPDATE子句)
LOCK TABLE
SET ROLE
ALTER SYSTEM
ALTER ALarm
即使沒有改變任何數據
SET TRANSCTION的另外一個應用是在回滾時直接使用回滾段(ROLLBACK SEGMENT)
事務以SET TRANSACTION開始
以下為引用的內容
SET TRANSACTION USE ROLLBACK SEGMENT rb_large;
rb_large是一個大的回滾段的名稱
下面我們看一個例子
以下為引用的內容
rb_large(initial
rb
rb
rb
rb
rb
rb
rb
rb
rb
rb
所有的都非常恰當的安排在
以下為引用的內容
SET TRANSACTION USE ROLLBACK SEGMENT rb_large
現在
建立和修改用戶
CREATE USER 語句將建立一個用戶
Database
external
Global
缺省是數據庫驗證
Database驗證用戶賬號
數據庫驗證賬號是張好的缺省類型
以下為引用的內容
CREATE USE piyush IDENTIFIED BY welcome
piyush可以通過下面的語句將口令改變為saraswatt:
以下為引用的內容
piyush可以通過下面的語句將口令改變為saraswatt:
外部驗證用戶賬號
用戶賬號進入數據庫時可以不提供口令
以下為引用的內容
CREATE USER ops$appl IDENTIFIED EATERNALLY
但在通常情況下
以下為引用的內容
CREATE USER appl IDENTIFIED EATERNALLY
這樣效果是一樣的
GLOBAL用戶賬號
GLOBAL類型的用戶賬號數據庫不檢測口令
以下為引用的內容CREATE USER scott IDENTIFIED GLOBALLY AS
關鍵字IDENTIFIED GLOBALLY AS表示建立的是一個GLOBAL類型的用戶賬號
創建和更改用戶賬號
CREATE USER 用於建立用戶賬號和給用戶賬號的屬性賦值
有部分屬性能用CREATER USER和ALTER USER語句設置
給用戶分配缺省表空間
表空間(tablespace)是放置表
以下為引用的內容
CREATE USER piyush IDENTIFIED BY saraswati
DEFAULTE TABLESPACE user_data;
ALTER USER manoj DEFAULTE TABLESPACE dev
給用戶分配臨時表空間
臨時表空間
以下為引用的內容
CREATE USER piyush IDENTIFIED BY saraswati
Temporary TABLESPACE user_data;
ALTER USER manoj Temporary TABLESPACE dev
給用戶分配表空間的使用定額
使用定額限制用戶在表空間中使用磁盤的數量
以下為引用的內容
CREATE USER piyush IDENTIFIED BY saraswati
DEFAULT TABLESPACE user_data
QUOTA UNLIMITED ON user_data
QUOTA
ALTER USER manoj QUOTA
給用戶分配一個簡表
簡表可以限制用戶在會話時消耗的資源
以下為引用的內容
CREATE USER piyush IDENTIFIED BY saraswati
PROFILE TABLESPACE user_data;
ALTER USER manoj Temporary TABLESPACE dev
為用戶響應指定角色
這個屬性只能由ALTER USER語句設置
以下為引用的內容
ALTER USER manoj DEFAULT ROLE ALL EXCEPT salary_adm;
為用戶的password設定到期時間以便在用戶下次登錄時更改
當用戶的password到期
以下為引用的內容
ALTER USER manoj IDENTIFIED BY welcome;
ALTER USER manoj PASSWORD EXPIRE;
鎖定賬號
以下為引用的內容ALTER USER ql AC
COUNT LOCK
對賬號解鎖
以下為引用的內容
ALTER USER ql ACCOUNT UNLOCK
權限和角色
權限允許用戶訪問屬於其它用戶的對象或執行程序
Object 對象級
System 系統級
Role 角色級
這些權限可以授予給用戶
對管理權限而言
建立和使用角色
如前所訴
以下為引用的內容
CREATE ROLE role_name IDENTIFIED BY password
CREATE ROLE role_name IDENTIFIED EXTERNALLY
CREATE ROLE role_name IDENTIFIED GLOBALLY
缺省情況下建立的角色沒有password或者其他的識別
以下為引用的內容
SET ROLE role_name IDENTIFIED BY password
EXTERNALLY和GLOBALLY類型的角色由操作系統和ORACLE Service server驗證
對象權限
對象權限就是指在表
權限
ALTER
DELETE
EXECUTE
INDEX
INSERT
READ
REFERENCE
SELECT
UPDATE
Directory
no
no
no
no
no
yes
no
no
no
function
no
no
yes
no
no
no
no
no
no
procedure
no
no
yes
no
no
no
no
no
no
package
no
no
yes
no
no
no
no
no
no
DB Object
no
no
yes
no
no
no
no
no
no
Libary
no
no
yes
no
no
no
no
no
no
Operation
no
no
yes
no
no
no
no
no
no
Sequence
yes
no
no
no
no
no
no
no
no
Table
yes
yes
no
yes
yes
no
yes
yes
yes
Type
no
no
yes
no
no
no
no
no
no
View
no
yes
no
no
yes
no
no
yes
yes
對象由不止一個權限
SELECT
如何看這個表我們以ALTER權限為例進行說明
ALTER權限
允許執行ALTER TABLE和LOCK TABLE操作
在SEQUENCE上的ALTER權限允許執行ALTER Sequence語句
系統權限
系統權限需要授予者有進行系統級活動的能力
角色和角色權限
角色權限就是將屬於用戶的權限授予一個角色
授予和撤銷權限
給用戶或者角色授予權限使用GRANT 語句
以下為引用的內容
GRANT ROLE(或system privilege) TO user(role
權限和數據字典
數據字典是ORACLE存儲有關數據庫結構信息的地方
表
視圖
作用
ALL_COL_PRIVS
表示列上的授權
From:http://tw.wingwit.com/Article/program/Oracle/201311/17424.html