這是我的第一篇文章,開頭我還在想要用什麼樣豐富華麗的語言去描述我的開頭,好讓你們能夠看着開頭繼續往下看,但是忽然那麼一瞬間我停下剛好要盤旋在左耳邊的音樂,去思索我接下來要寫的內容。到此才明白這是一篇關於技術的文章,如果用過多華麗的色彩去闡述下面的內容,我就覺得這實在是玷污了學術的嚴謹性,所以我還是打算用帶着家鄉味色彩的土話去描述它,但願你看了這篇文章不會說這人真土就夠了,每篇我只會列舉15個例子這樣看起來清晰又易懂。
1. 查看當前數據庫的名字
select name from v$database
2.查看當前數據庫實例名
select instance_name from v$instance
show parameters instance_name;
一個數據庫可以有多個實例,在做數據庫集羣的時候可以用到
3.查看錶空間的名字
select tablespace_name from dba_data_files
4.查看錶空間裏面有哪些表select table_name from dba_tables where tablespace_name='USERS'
5. 查看當前數據庫的所有用戶
select * from dba_users
select table_name,tablespace_name from all_tables where table_name='C'
7.查詢用戶有哪些操作權限
select * from user_sys_privs
8.oracle數據庫的三範式
數據庫的三範式
第一範式:不可能有重複的列,即存在的列不可再拆分
第二範式:非主屬性完全依賴於主關鍵字
即存在組合關鍵字中的字段決定非關鍵字的情況。
不能存在兩個主關鍵字來唯一標識該實體
第三範式:屬性不依賴於其它非主屬性
不存在關鍵字段 → 非關鍵字段x → 非關鍵字段y 如部門表中存在 部門編號,部門名稱,部門位置
如果emp表中存在部門編號也就是說員工表中不能再有部門名稱和部門位置了
9.union union all intersect 和minus的區別
union兩個結果集的並集,會去除掉重複,默認會按查詢結果的第一列升序排列。
union all 兩個結果的並集不會去除重複,無序排列
intersect兩個結果的交集,如表s1和s2這個就表示在s1和s2中公共的數據
minus兩個結果集的差集,如表s1和s2這個表示在s1中的數據但是在s2中不存在
10.nvl和nvl2的區別
nvl(expr1,expr2)expr1爲null時結果爲expr2,值不爲null時,結果爲expr1
nvl2(expr1,expr2,expr3)expr1爲null時結果爲expr3,不爲null時結果爲expr2
11.oracle中常用的函數
length(字段名)查找字段的長度 concat(a,b)或者a||b 把a和b連接起來
round(n)四捨五入保留到整數位 round(n,1)保留一位小數 round(n,-1)保留整數位的第二位
instr(str,index)返回index在str中的位置,默認從1開始 initcap(str)首字母大寫
lower(str)首字母小寫 substr(str,start,count截取字符串,從某個位置開始,count表示從某個位置開始截取幾位 extract(year from sysdate) 截取當前時間的年份 extract(month from sysdate)
replace(str,a,b)用b來替換str中的a rpad(字段名,長度,擴充值)有填充,如果該字段長度小於規定長度,就用擴充值在右邊填充,rpad(str,7,'0') 如果str的長度小於7,就在str的後面補充0直到長度爲7,lpad左填充同理。
ceil(15.6)向上取整,結果爲16. ceil(-15.6)結果爲-15
floor(15.6)向下取整,結果爲15 floor(-15.6)結果爲-16
mod(m,n)取餘,mod(10,3)結果爲1 power(n,p) 求n的p次冪 exp(n)一個數字的n次方根
trunc和round類似,只是trunc不會四捨五入 如trunc(15.6)結果爲15,trunc(15.67,1)結果爲15.6
to_char(日期,'yyyy-MM-dd') 日期轉換爲字符串 to_number(str)字符串轉爲數字,字符串必須是數字字符串
to_date(str,'yyyy-MM-dd')字符串轉換爲日期
sum()求和 ,count()計數 avg()求平均數 max()求最大值 min()求最小值
12.數據的導入和導出用來備份數據
exp scott/orcl file=G:\temps.dmp owner=scott consistent=y direct=y scott:用戶名 orcl:密碼 owner:用戶名
imp nhsr/nhsr file=G:\temp.dmp ignore=y fromuser=scott touser=nhsr nhsr:要導入數據用戶名 nhsr:要導入數據的密碼
fromuser:數據來源用戶 touser:要導入數據用戶名
13.oracle中case when 和decode函數的使用
兩者都是判斷條件函數,decode(字段名,條件1,值1,條件2,值2....)當字段值爲條件1時,值爲值1,當字段值爲條件2時,值爲值2,每個判斷條件對應一個值,最後如果沒匹配成對的條件和值,結果相當於else。和if else if,else一樣道理
select case when 條件1 then 值1
when 條件2 then 值2
.....else 值n
end 別名 from 表
14.數據庫死鎖查詢以及kill進程語句
--(1)查看死鎖對象
select s.username,l.object_id,l.session_id,s.SERIAL#,s.machine,s.STATUS from v$session s,v$locked_objectl
where s.sid = l.session_id;
--(2)查看具體操作對象
select sql_text from v$sql where hash_value in(
select sql_hash_value from v$session where sid in(select session_id from v$locked_object )
);
--(3)死鎖處理語句(殺掉會話) 其中數字代表session_id,serial#
alter system kill session '393,63862
15.oralce創建用戶一系列命令
create tablespace cat_data datafile 'J:/arms/cat_data.dbf' size 2048m autoextend on next 50m maxsize unlimited;創建表空間
win+r cmd 輸入 sqlplus \ as sysdba 登錄dba用戶 ;conn可以切換用戶
create user 用戶名 identified by default tablespace密碼 創建用戶並指定默認的工作空間
grant connect,resource,dba,create session to 用戶名 授予用戶權限
alter user 用戶名 identified by 密碼 修改用戶名和密碼;
alter user 用戶名 account unlock 解鎖用戶名