本篇文章給大家?guī)砹岁P(guān)于oracle的相關(guān)知識,其中主要總結(jié)介紹了數(shù)據(jù)庫使用的相關(guān)問題,包括了安裝、卸載、表空間、數(shù)據(jù)類型等方面,希望對大家有幫助。
推薦教程:《oracle》
卸載
執(zhí)行deinstall.xml 文件進行自動卸載操作,執(zhí)行過程中輸入回車或者yes,不能刪除的目錄在卸載執(zhí)行完成后手動刪除。
介紹
系統(tǒng)用戶
sys, system (權(quán)限 sys>system>scott)
sys 要擁有系統(tǒng)管理員權(quán)限
system 可以直接登錄
sysman 用來操作企業(yè)管理器,管理員級別
scott oracle 創(chuàng)始人名字,默認密碼是tiger
登錄
使用system 用戶登錄
[username/password] [@server] [as sysdba|sysper]
注意: 如果登錄本地數(shù)據(jù)庫就不用 @server 了
show user 查看當(dāng)前登錄用戶
dba_users 數(shù)據(jù)字典 (desc dba_users)
表空間概述
表空間:數(shù)據(jù)庫的邏輯存儲空間,一個數(shù)據(jù)庫包含多個表空間
-
永久表空間:表信息、視圖、存儲過程等需要永久性存儲的文件
-
臨時表空間:數(shù)據(jù)庫操作中間的執(zhí)行過程,執(zhí)行結(jié)束釋放掉
-
UNDO表空間:存放數(shù)據(jù)被修改之前的數(shù)據(jù),可以進行回滾
查看用戶表空間:
管理員數(shù)據(jù)字典:dba_tablespaces、dba_users
普通用戶數(shù)據(jù)字典:user_tablespaces、user_users
設(shè)置用戶的默認或臨時表空間
ALTER USER username DEFAULT|TEMPOPRRY TABLESPACE tablespace_name
創(chuàng)建永久表空間
CREATE TABLESPACE tablespace_name DATAFILE 'XX.dbf' SIZE 10m
創(chuàng)建臨時表空間
CREATE TEMPORARY TABLESPACE tablespace_name TEMPFILE 'XX.dbf' SIZE 10m
查看數(shù)據(jù)文件字典
desc dba_data_files
查看表空間文件存儲路徑
select file_name from dba_data_files where tablespace_name = 'tablespace_name';
修改表空間狀態(tài)
設(shè)置聯(lián)機或脫機狀態(tài):ALTER TABLESPACE tablespace_name ONLINE|OFFLINE;
設(shè)置只讀或可讀寫狀態(tài):ALTER TABLESPACE tablespace_name READ ONLY|READ WRITE;
表空間修改數(shù)據(jù)文件
增加數(shù)據(jù)文件:ALTER TABLESPACE tablespace_nama ADD DATAFILE ‘xx.dbf’ SIZE xx;
刪除數(shù)據(jù)文件:ALTER TABLESPACE tablespace_nama DROP DATAFILE ‘xx.dbf’; (不能刪除第一個數(shù)據(jù)文件,除非把表空間刪掉)
刪除表空間
DROP TABLESPACE tablespace_name [INCLUDING CONTENTS]
數(shù)據(jù)類型
字符型
char(n): MAX-2000
NCHAR(n): MAX-1000, unicode格式,存儲漢字比較多
VARCHAR2(n): MAX-4000
NVARCHAR2(n): MAX-2000, unicode格式
數(shù)值型
number(p,s) : p-有效數(shù)字位數(shù),s-保留小數(shù)位數(shù)
Float(n) : 二進制數(shù)據(jù) 1~126位 (*0.30103 得到10進制數(shù)據(jù))
日期型
其他類型 大文件
BLOB: 4G 二進制
CLOB: 4G 字符串
管理表
創(chuàng)建表
添加字段
ALTER TABLE table_name add column_name data_type;
更改字段數(shù)據(jù)類型(無數(shù)據(jù)時)
ALTER TABLE table_name MODIFY column_name data_type;
刪除字段
ALTER TABLE table_name DROP COLUMN column_name;
修改字段名
ALTER TABLE table_name RENAME COLUMN column_name TO new_column_name;
修改表名
RENAME table_name TO new_table_name;
刪除表
比delete速度快,刪除全部數(shù)據(jù),不刪除表結(jié)構(gòu)。
TRUNCATE TABLE table_name;
刪除表結(jié)構(gòu)
DROP TABLE table_name;
在創(chuàng)建時復(fù)制表
CREATE TABLE new_table AS SELECT column1,...|* FROM old_table;
在添加時復(fù)制表
INSERT INTO new_table [(column1,...)] SELECT column1,...|* FROM old_table;
約束 :定義規(guī)則和確保完整性
非空約束:數(shù)據(jù)不能是NULL值,如用戶名、密碼等(設(shè)置非空約束之前表中不能有空數(shù)據(jù))
主鍵約束:唯一標(biāo)識,不能為空,加快查詢速度,自動創(chuàng)建索引。一張表只能設(shè)計一個,可以由多個字段構(gòu)成(聯(lián)合或復(fù)合主鍵)。
啟用|禁用當(dāng)前約束
DISABLE | ENABLE CONSTARINT constraint_name;
刪除當(dāng)前約束
ALTER TABLE table_name DROP CONSTRAINT constraint_name;
DROP PRIMARY KEY [CASCADE] ; [CASCADE] :外鍵約束關(guān)系
外鍵約束:主表的字段必須是主鍵,主從表中響應(yīng)的字段是同一個數(shù)據(jù)類型,從表外鍵字段值必須來自主表中相應(yīng)字段值,或者為null值。
創(chuàng)建表時添加外鍵約束
CREATE TABLE table2 (column_name datatype REFERENCES table1(column_name));
CONSTRAINT constraint_name FOREIGN KEY(column_name) REFERENCES table_name(column_name) [ON DELETE CASCADE]
修改表時添加外鍵約束
ALTER TABLE table_name ADD CONSTRAINT constraint_name FOREIGN KEY(column_name) REFERENCES table_name(column_name) [ON DELETE CASCSDE] ; [ON DELETE CASCSDE]:級聯(lián)刪除
唯一約束:字段值不能重復(fù)
唯一約束和主鍵約束的區(qū)別
主鍵必須是非空,唯一約束允許有一個空值。主鍵在每張表中只能有一個,唯一約束在每張表中可以有多個。
修改表時添加唯一約束
ALTER TABLE table_name ADD CONSTRAINT constraint_name UNIQUE(column_name);
檢查約束:使表當(dāng)中的值具有實際意義。
修改表時添加檢查約束
ALTER TABLE table_name ADD CONSTRAINT constraint_name CHECK(column_name > 0);
查詢
替換列的顯示名稱
設(shè)置數(shù)據(jù)格式
更改字符長度(字符類型)
== 數(shù)值類型格式(“9”代表一個數(shù)字)==
== 清除設(shè)置的格式==
COLUMN column_name CLEAR;
函數(shù)
函數(shù)的作用
- 方便數(shù)據(jù)統(tǒng)計
- 處理查詢結(jié)果
函數(shù)的分類
數(shù)值函數(shù)
四舍五入: ROUND(n,[,m]) ; 省略m : m = 0 取整; m>0 : 保留小數(shù)點后m位;m
字符函數(shù)
大小寫轉(zhuǎn)換:UPPER(char)
LOWER(char)
INITCAP(char) : 首字母大寫
獲取子字符串:n可以省略,截取到最后;m
獲取字符串長度:Length(char)
字符串連接:CONCAT(char1,char2) 與 || 操作符作用一樣
去除字串:TRIM(c2 FROM c1) 從c1當(dāng)中去除c2字符串
LTRIM(c1 [, c2]) 從頭部開始去除一個c2 ,c2 為空去除左邊空格
LTRIM(c1 [, c2]) 從尾部開始去除一個c2,c2 為空去除右邊空格
TRIM(c1) 去除空格
替換函數(shù):REPLACE(char,s_string [,r_string]) r_string為空默認替換為空串
日期函數(shù)
系統(tǒng)時間: SYDATE 默認格式 DD-MON-YY
ADD_MONTHS(date,i)
NEXT_DAY(date,char)
LAST_DAY(date)
MONTHS_BETWEEN(date1.date2) 兩個日期之間間隔的月份,計算間隔多少天直接日期相減
EXTRACT(date FROM datetime)
轉(zhuǎn)換函數(shù)
日期>>字符:TO_CHAR(date[,format[,params]]) date:將要轉(zhuǎn)換的日期 ; format:轉(zhuǎn)換的格式; params: 日期的語言,通常不寫;
字符>>日期:TO_DATE(date[,format[,params]]) ——–只能輸出默認日期格式
數(shù)字>>字符:TO_CHAR(number[,format])
9: 顯示數(shù)字并忽略前面的0
0:顯示數(shù)字,位數(shù)不足,用0補齊
. 或D 顯示小數(shù)點
, 或G 顯示千位符
$:美元符號
S:加正負號(前后都可以)
字符>>數(shù)字:TO_NUMBER(char[,format])
decode函數(shù)(都不滿足返回null)
decode(column_name, value1,result1,... , defaultValue)
你問我答:
聯(lián)合索引比單索引的效率高么?
如果聯(lián)合索引中的多個字段都在where謂詞中出現(xiàn)了,則聯(lián)合索引效率比單列索引高。因為通過多個條件可以從索引中過濾得到更少的記錄條數(shù),也就減少了需要回表掃描的次數(shù),甚至可以直接在聯(lián)合索引中得到所查的所有結(jié)果,則不再需要回表。
但是由于多列的聯(lián)合索引肯定要比單列索引大,也就是說同樣的索引需要存儲的物理塊要多于單列索引,所以,如果查詢中只出現(xiàn)了聯(lián)合索引中的某一列,則其效率不如單列索引。
前導(dǎo)列的作用?
前導(dǎo)列的概念是這樣的,如果建立了f1,f2上的聯(lián)合索引,則在查詢時必須要用到f1,也就是所謂的前導(dǎo)列,該索引才會有效,因為索引是按照前導(dǎo)列排序的,如果where條件謂詞中沒有前導(dǎo)列,則需要執(zhí)行索引掃描才能得到想要的結(jié)果,這種情況下其效率往往較差。
如果不需要前導(dǎo)列的話,reverse 這個反轉(zhuǎn)又起到什么作用呢?
鑒于前面描述的前導(dǎo)列的概念,我們考慮如下表存儲table(f1,f2);
aa 1
ab 2
ac 3
ad 4
ae 5
如果我們對表table建立f1上的普通索引,由于按照f1進行排序,所以針對where f1=ad則需要遍歷所有的a開始的索引,而如果對f1建立reverse索引,則由于da只有一個,則可以更快的得到需要的結(jié)果。
推薦教程:《oracle》