INSERT INTO 表名(字段名1, 字段名2, ……) VALUES ( 值1, 值2, ……);
INSERT INTO 表名(字段名1, 字段名2, ……) SELECT (字段名1, 字段名2, ……) FROM 另外的表名;
字符串類型的字段值必須用單引號括起來, 例如: ’GOOD DAY’
若是字段值裏包含單引號’ 須要進行字符串轉換, 咱們把它替換成兩個單引號''.
字符串類型的字段值超過定義的長度會出錯, 最好在插入前進行長度校驗.
日期字段的字段值能夠用當前數據庫的系統時間SYSDATE, 精確到秒
或者用字符串轉換成日期型函數TO_DATE(‘2001-08-01’,’YYYY-MM-DD’)
TO_DATE()還有不少種日期格式, 能夠參看ORACLE DOC.
年-月-日 小時:分鐘:秒 的格式YYYY-MM-DD HH24:MI:SS
INSERT時最大可操做的字符串長度小於等於4000個單字節, 若是要插入更長的字符串, 請考慮字段用CLOB類型,
方法借用ORACLE裏自帶的DBMS_LOB程序包.
INSERT時若是要用到從1開始自動增加的序列號, 應該先創建一個序列號
CREATE SEQUENCE 序列號的名稱 (最好是表名+序列號標記) INCREMENT BY 1 START WITH 1
MAXVALUE 99999 CYCLE NOCACHE;
其中最大的值按字段的長度來定, 若是定義的自動增加的序列號 NUMBER(6) , 最大值爲999999
INSERT 語句插入這個字段值爲: 序列號的名稱.NEXTVALsql
DELETE FROM表名 WHERE 條件;
注意:刪除記錄並不能釋放ORACLE裏被佔用的數據塊表空間. 它只把那些被刪除的數據塊標成unused.
若是確實要刪除一個大表裏的所有記錄, 能夠用 TRUNCATE 命令, 它能夠釋放佔用的數據塊表空間
TRUNCATE TABLE 表名;
此操做不可回退.數據庫
UPDATE表名 SET 字段名1=值1, 字段名2=值2, …… WHERE 條件;
若是修改的值N沒有賦值或定義時, 將把原來的記錄內容清爲NULL, 最好在修改前進行非空校驗;
值N超過定義的長度會出錯, 最好在插入前進行長度校驗..
注意事項:
A. 以上SQL語句對錶都加上了行級鎖,
確認完成後, 必須加上事物處理結束的命令 COMMIT 才能正式生效,
不然改變不必定寫入數據庫裏.
若是想撤回這些操做, 能夠用命令 ROLLBACK 復原.
B. 在運行INSERT, DELETE 和 UPDATE 語句前最好估算一下可能操做的記錄範圍,
應該把它限定在較小 (一萬條記錄) 範圍內,. 不然ORACLE處理這個事物用到很大的回退段.
程序響應慢甚至失去響應. 若是記錄數上十萬以上這些操做, 能夠把這些SQL語句分段分次完成,
其間加上COMMIT 確認事物處理.oracle
CREATE INDEX 索引名ON 表名 ( 字段1, [字段2, ……] );ide
ALTER INDEX 索引名 REBUILD;函數
一個表的索引最好不要超過三個 (特殊的大表除外), 最好用單字段索引, 結合SQL語句的分析執行狀況,ui
也能夠創建多字段的組合索引和基於函數的索引spa
ORACLE8.1.7字符串能夠索引的最大長度爲1578 單字節.net
ORACLE8.0.6字符串能夠索引的最大長度爲758 單字節code
2.2. 視圖 (VIEW)
CREATE VIEW 視圖名AS SELECT …. FROM …..;
ALTER VIEW視圖名 COMPILE;
視圖僅是一個SQL查詢語句, 它能夠把表之間複雜的關係簡潔化.對象
CREATE SYNONYM同義詞名FOR 表名;
CREATE SYNONYM同義詞名FOR 表名@數據庫連接名;
CREATE [PUBLIC] DATABASE LINK 數據庫連接名 CONNECT TO 用戶名 IDENTIFIED BY 密碼 USING '本地配置的數據的實例名';
數據庫鏈接字符串能夠用NET8 EASY CONFIG或者直接修改TNSNAMES.ORA裏定義.
數據庫參數global_name=true時要求數據庫連接名稱跟遠端數據庫名稱同樣
數據庫全局名稱能夠用如下命令查出
SELECT * FROM GLOBAL_NAME;
查詢遠端數據庫裏的表
SELECT …… FROM 表名@數據庫連接名;
會話級的臨時表由於這這個臨時表中的數據和你的當前會話有關係,當你當前SESSION 不退出的狀況下,臨時表中的數據就還存在,而當你退出當前SESSION 的時候,臨時表中的數據就所有沒有了,固然這個時候你若是以另一個SESSION 登錄的時候是看不到另一個SESSION 中插入到臨時表中的數據的。即兩個不一樣的SESSION 所插入的數據是互不相干的。當某一個SESSION 退出以後臨時表中的數據就被截斷(truncate table ,即數據清空)了。會話級的臨時表建立方法:
Create Global Temporary Table Table_Name (Col1 Type1,Col2 Type2...) On Commit Preserve Rows ;
舉例:
create global temporary table Student (Stu_id Number(5), Class_id Number(5), Stu_Name Varchar2(8), Stu_Memo varchar2(200)) on Commit Preserve Rows ; 2) 事務級臨時表是指該臨時表與事務相關,當進行事務提交或者事務回滾的時候,臨時表中的數據將自行被截斷,其餘的內容和會話級的臨時表的一致(包括退出SESSION 的時候,事務級的臨時表也會被自動截斷)。事務級臨時表的建立方法:
Create Global Temporary Table Table_Name (Col1 Type1,Col2 Type2...) On Commit Delete Rows ;
舉例:
create global temporary table Classes
(Class_id Number(5),
Class_Name Varchar2(8),
Class_Memo varchar2(200)) on Commit delete Rows ;
3.權限管理 (DCL) 語句
經常使用的系統權限集合有如下三個:
CONNECT(基本的鏈接), RESOURCE(程序開發), DBA(數據庫管理)
經常使用的數據對象權限有如下五個:
ALL ON 數據對象名, SELECT ON 數據對象名, UPDATE ON 數據對象名,
DELETE ON 數據對象名, INSERT ON 數據對象名, ALTER ON 數據對象名
GRANT CONNECT, RESOURCE TO 用戶名;
GRANT SELECT ON 表名 TO 用戶名;
GRANT SELECT, INSERT, DELETE ON表名 TO 用戶名1, 用戶名2;
REVOKE CONNECT, RESOURCE FROM 用戶名;
REVOKE SELECT ON 表名 FROM 用戶名;
REVOKE SELECT, INSERT, DELETE ON表名 FROM 用戶名1, 用戶名2;
expdp orauser/5tgb6yhn@bairuidb directory=DATA_PUMP_DIR dumpfile=orauser2012070501000.dmp schemas=orauser nologfile=Y;
導出語句說明:orauser/5tgb6yhn@bairuidb爲用戶/密碼@SID,dumpfile=orauser2012070501000.dmp爲導出的數據庫文件名,能夠隨便起,建議以「導出用戶名+年月日時分」爲名。schemas=orauser爲導出的用戶,即咱們導出那個用戶的東西。
Impdp system/system@bairuidb directory=DATA_PUMP_DIR dumpfile=orauser2012070501000.dmp remap_schema=orauser:oratest
導入語句說明:system/system@bairuidb爲導入的用戶/密碼@SID,
dumpfile=orauser2012070501000.dmp爲導出的數據庫文件名,
remap_schema=orauser:oratest爲導出用戶:導入用戶。
--建立表空間
create
tablespace 表空間名xxx datafile
'XXXXX.DBF'
size
10M autoextend
on
;
----建立用戶並指定表空間
create
user
xxxxx identified
by
"xxx"
default
tablespace 表空間名;
alter
user
oratest0812 account unlock;
---通常不執行
grant
connect
,resource,dba,
create
any
sequence
,
create
any
type
to
xxxxxx;
如何查詢某個用戶的權限:
select * from dba_sys_privs;
刪除重複的數據:
DELETE FROM table_name a WHERE rowid > ( SELECT min(rowid) FROM table_name b WHERE b.id = a.id and b.name=a.name);
oracle ORA-39087
只須要執行如下權限便可:GRANT READ,WRITE ON DIRECTORY DATA_PUMP_DIR to xxx;
oracle 11導出空表解決方案: