Oracle數據庫入門
1、oracle服務
1)OracleDBConsoleorcl
Oracle數據庫控制臺服務,orcl是Oracle的實例標識,默認的實例為orcl。
2)OracleOraDb11g_home1TNSListener
監聽器服務,服務只有在數據庫需要遠程訪問的時候才需要。
3)OracleServiceORCL
數據庫服務(數據庫實例),是Oracle核心服務,該服務是數據庫啟動的基礎,只有該服務啟動,Oracle數據庫才能正常啟動。
啟動順序:OracleOracle_homeTNSListener,OracleServiceORCL,OracleDBConsoleORCL
2、sql*plus
1)常用命令
help[?|topic]
?模糊查詢/topic 具體命令
desc[ribe] 查詢指定對象的數據結構
如:desc scott.emp
show option 顯示SQL*Plus系統變量的值或環境變量的值
如:show user
用戶連接命令:
a、conn[ect] conn 用戶名/密碼@網絡服務名 [as sysdba/sysoper]
b、disc[onnect] 斷開與當前數據庫的連接
c、passw[ord] 修改用戶的密碼
d、exit 斷開與數據庫的連接,同時會退出sql*plus
查看系統所有用戶:
select username,account_status from dba_users;
查詢用戶下所有的表:
select table_name from tabs;
select table_name from user_tables;
select tname from tab;
select?*?from?dba_tables?where?owner=‘SCOTT';
2)用戶管理指令
忘記管理員密碼:
sqlplus/nolog
connect/as sysdba
alter user sys identified by sys
創建新用戶:具有DBA權限的用戶執行
create user test identified by 123456
default tablespace users
temporary tablespace temp
quota 3m on users;
//用戶角色
connect Role(連接角色):臨時用戶,特別是那些不需要建表的用戶
resource Role(資源角色):
提供給用戶另外的權限以創建他們自己的表、序列、過程、觸發器、索引和簇。只可以創建實體,不可以創建數據庫結構
dba Role(數據庫管理員角色):擁有所有的系統權限,只有DBA才可以創建數據庫結構
用戶授權:
grant sys_privi | role to user | role | public [with admin option]
sys_privi:表示Oracle系統權限,系統權限是一組約定的保留字。
role:角色。
user:具體的用戶名,或者是一些列的用戶名。
public:保留字,代表Oracle系統的所有用戶。
with admin option:表示可再將權限授予另外的用戶。
如:grant connet,resource to test;為用戶test授予連接和開發系統權限
收回權限:
revoke sys_privi | role from user | role | public;
如:revoke resource from test;
對象權限:
grant obj_privi | all column on schema.object to user | role | public [with grant option] | [with hierarchy option]
obj_privi:表示對象的權限,可以是alter、execute、select、update和insert等
role:角色名
user:被授權的用戶名
with admin option:表示被授權者可再將系統權限授予其他的用戶
with hierarchy option:在對象的子對象(在視圖上再建立視圖)上授權給用戶
如:grant select,insert,delete,update on scott.emp to test; 給用戶test授予select、insert表soctt.emp的權限
收回對象權限
revoke obj_privi | all on schema.object from user | role | public cascade constraints
cascade constraints:表示有關聯關系權限也被撤銷
如:revoke delete,update on scott.emp from test; 從test用戶撤銷scott.emp表的update和delete
修改用戶:就是創建新用戶把create關鍵字替換成alter
解鎖被鎖住的用戶:
alter user test account unlock;
刪除用戶:
drop user 用戶名 [cascade]
cascade:級聯刪除選項,連同該用戶所擁有的對象一起刪除
3)常用數據類型
a、字符類型
char(n byte/char) 默認1字節n最大2000 末尾填充空格以達到指定長度
varchar2(n byte/char) 最大長度必須指定最大4000 超過指定長度則報錯
b、數字類型
number(p[,s]) 1-22字節
binary_float 32位單精度浮點型
binary_double 64位雙精度浮點型
c、時間類型
date 沒有分秒和時間區
timestamp 沒有時間區
timestamp with local time zone 使用數據庫時區
d、大對象類型
blob 二進制文件,支持事務處理
clob 字節字符數據,支持事務處理
nclob unicode數據,支持事務處理
bfile lob地址指向文件系統上的二進制文件,維護目錄和文件名,不參與事務,支持只讀
4)sequence序列————主要用於提供主鍵值
a、創建序列需要的權限:
create sequence 或 create any sequence
b、語法:
CREATE SEQUENCE sequence //創建序列名稱
[INCREMENT BY n] //遞增的序列值是n 如果n是正數就遞增,如果是負數就遞減 默認是1
[START WITH n] //開始的值,遞增默認是minvalue 遞減是maxvalue
[{MAXVALUE n | NOMAXVALUE}] //最大值
[{MINVALUE n | NOMINVALUE}] //最小值
[{CYCLE | NOCYCLE}] //循環/不循環
[{CACHE n | NOCACHE}]; //分配並存入到內存中
如:
create sequence seq_test
increment by 1 --每次加1個
start with 1 --從1開始計數
nomaxvalue --不設置最大值
minvalue 1 --最小值
nocycle --一直累加,不循環
nocache; --不建緩沖區
c、序列使用
currval: 返回sequence的當前值
nextval: 返回sequence的下一個值
d、註意事項
currval總是返回當前sequence的值,只有在第一次nextval初始化後,才能使用currval,否則會出錯
第一次nextval返回的值是初始值:隨後的nextval會自動增加定義的increment by值,然後返回增加後的值
使用cache或許會跳號,比如數據庫突然不正常down掉,cache中的sequence就會丟失,可以在定義sequence的時候,使用nocache防止這種情況
e、使用觸發器實現自增長
create or replace
trigger trg_customers before insert on test for each row
begin
select seq_test.nextval into :new.id from dual;
end;
5)分頁
a、偽列
rowid行標示符和rownum行號 看不到這兩個列,只在數據庫內部使用
b、三段式分頁
select * from (
select rownum rn, t.* from (
select * from t_users
) t where rownum<=頁碼值*每頁行數
) where rn>(頁碼-1)*每頁行數
6)常用函數
concat(X,Y):連接字符串X和Y
length(X):返回X的長度
substr(X,start[,length])返回X的子字串,從start處開始,截取length個字符,缺省length,默認到結尾
ltrim(X[,TRIM_STR]):把X的左邊截去trim_str字符串,缺省截去空格
rtim(X[,TRIM_STR]) 把X的右邊截去trim_str字符串
abs(X) X的絕對值
ceil(X) 大於或等於X的最小整數值
floor(X) 小於或等於X的最大整數值
round(X[,Y]) X在第Y位四舍五入
power(X,Y) X的Y次冪
add_months(d,n),在某一個日期 d 上,加上指定的月數 n,返回計算後的新日期。d 表示日期,n 表示加的月數。
last_day(d),返回指定日期當月的最後一天。
extract(fmt FROM d),提取日期中的特定部分。fmt 為:YEAR、DAY等。其中 YEAR、MONTH、DAY可以為 DATE 類型匹配,也可以與 TIMESTAMP 類型匹配;但是 HOUR、MINUTE、SECOND 必須與 TIMESTAMP 類型匹配。
to_char(d|n[,fmt]):把日期和數字轉換為制定格式的字符串。Fmt是格式串
to_date(X,[,fmt]) 把一個字符串以fmt格式轉換成一個日期類型
to_number(X,[,fmt])把一個字符串以fmt格式轉換為一個數字
nvl(X,VALUE):如果X為空,返回value,否則返回X
nvl2(x,value1,value2)如果x非空,返回value1,否則返回value2
3、jdbc連接數據庫————同mysql
驅動類:ojdbc6.jar
類名:oracle.jdbc.driver.OracleDriver
url:jdbc:oracle:thin:@192.168.0.1:1521:orcl
user:scott
password:a1s2d3f4
Oracle數據庫入門