我本身就是一個oracle和sql的初學者,前段時間看了韓順平老師的oracle視頻教程,以爲很深刻淺出,收穫了不少。同時本身也作了很多筆記,如今想將紙質筆記以本身的話總結出來。俗話說得好:教學老是相得益彰,在總結的過程當中想必會加深本身的印象,可以鞏固本身的學習過程。sql
oracle 用戶部分:數據庫
建立用戶:create user user_name identified by user_password;session
此時用戶並無鏈接數據庫的權限。須要給其賦予鏈接權限oracle
賦予權限:權限分爲對象權限和系統權限。ide
grant [select|updat|all] on table_name to user_name;--對象權限函數
grant connect to user_name with admin option; --系統權限工具
with admin option 表示這個user能夠將此權限繼續下發 學習
收回權限: revoke Quanxian on table_name from user_name;spa
鏈接數據庫:conn user_name/user_password;日誌
profile文件,能夠限制某些用戶的行爲,如登陸嘗試次數,密碼輸入錯誤次數等。
建立profile 文件: create profile profile_name limit failed_login_attempts m password_lock time n;
應用給某用戶:alter user user_name profile profile_name;
在初次創建oracle數據庫實例的時候,默認建立了幾個用戶,可是隻有幾個用戶沒有上鎖,給某個用戶解鎖的步驟以下:
首先要以sysdba的用戶登陸oracle數據庫,須要打開sqlplus這個oracle安裝自帶的工具
cmd or terminal 下: sqlplus / as sysdba;
解鎖用戶:alter user user_name account unlock;
更改用戶密碼: alter user user_name identified by password;
這裏,幾個經常使用的用戶的系統默認密碼總結以下:
scott:tiger
system:manager
sys:change_on_install
sysdba 不須要密碼登陸。
幾個用戶的權限具體如何等我總結到後面再補上,韓順平老師這裏講的有點分散。
繼續用戶管理。
設置口令歷史:修改密碼時不能使用之前使用的密碼
password_reuse_time n;--n 天后才能重用密碼
按期修改密碼:
create profile profile_name limit password_life_time m pasword_grace_time n;
m天修改一次密碼,寬限期n天。
sql語句中的幾種數據類型:
char(n) :定長字符串,最長2000,查詢速度快
varchar2(n):變長字符串,最長4000,節省空間
clob(character large object) :字符型大對象,最大4G
number(m,n):m位有效數,其中n位小數
number(m) :m位整數
date:日期類型 年月日時分秒
timestamp:更精確
blob:圖片類型,二進制數據 可存放圖片,聲音,最大4G(韓老師當時用的是9i,我用了個64位的12c版本,估計能支持最大8G的吧。。本身猜的)
顯示錶結構:desc table_name;
增長字段:alter table table_name add (colum_name,colum_type);\
修改字段: alter table table_name modify (colum_name,colum_type);
刪除字段:alter table table_name drop colum colum_name;
刪除表:drop table table_name;
date格式'日-月-年'
insert into table_name values(每一個字段的值,若是有非數字的字段值,須要用單引號對''括起來)
alter session set nls_date_format 'yyyy-mm-dd';
【注意】這個改的效果是臨時生效的。
插入空值NULL(該字段容許爲空才行)
查詢空值:select xxx from xxx where colum_name is [NULL|NOT NULL];
更改表內容:update table_name set colum_name='xxx' where yyy;
刪除數據:delete from table_name;--刪除數據,表的結構還在,可恢復,刪除速度略慢
truncate table table_name;刪除表中全部的數據,表結構還在,可是因爲不寫日誌,沒法找回刪除記錄,好處是刪除速度快。
恢復數據:
save point point_name;--建立恢復點
delete from table_name;
rollback to point_name;--恢復
刪除表結構和數據:drop table table_name;--刪除表的結構和數據
commit提交事物,提交後保存點會失效,要注意。
打開顯示操做時間開關:set timming on;
nvl函數處理NULL值的狀況:nvl(字段名,值),若是字段自己值爲NULL,則改變其新值爲逗號後面的那個,若是不是NULL,不作任何事。
where 語句後面的like關鍵字用於查找並匹配符合條件的字段:
%表示零到多個字符
下劃線_ 表示任意單個字
in關鍵字表示從一個範圍內選取
order by語句默認升序(ASC),若是想降序排列,能夠這樣:
select *** from table_name where xxx order by colum_name desc;
別名排序 select sss as xx from xxx之類的
數據分組函數:max,min,avg,sum,count
子查詢:嵌入在其餘sql語句中的select語句,也叫作嵌套查詢。
分組查詢:
group by | having
group by 用於對查詢結果的分組統計 having用於限制分組顯示的結果
select xxx,yyy from table_name where zzz group by xxx having (yyy的一些限制條件);
注意:分組查詢的字段必須在查詢的字段中出現,否則查詢失敗。
分組函數只能出如今選擇列表,having,order by子句中
若是select語句中同時包含group by,having,order by那麼順序是group by-having-order by
在選擇列表中若是有列,表達式和分組函數,那麼這些列和表達式必須有一個出如今group by子句中,否則出錯。
多表查詢:以oracle自帶的emp表和dept表結構爲例
能夠看到兩個表共同的字段爲deptno;
所以在查詢中能夠以這個爲鏈接橋樑
好比我要查詢分別位於兩個表的ename,和loc,能夠以下寫。
在查詢過程當中須要將選出來的表重命名,並用點符號選出相應的字段,如上所示。
分頁查詢:
採用rownum分頁
第一步:oracle自帶的rownum函數將每行查詢出來的結果編號,以下:
第二步:選取rownum<=10的列,以上次選取的結果做爲結果。
第三步,選取>=6的列,繼續以上一次選取的爲結果進行查詢。
這樣就選取了6-10的分頁結果。
注意事項:全部的改動,只須要改變最裏面那層select語句便可,即改變
select * from emp這個語句,外面兩層select 語句是爲了完成分頁功能而已。
合併查詢:將多個select語句的查詢結果進行相關操做,相似於集合的求交集,並集,差集之類的。
老師講的比較少,這裏就先不寫。
查詢結果建立表:
create table table_name(colum_name1 colum_type1,colum_name2 colum_type2...)
as select colum1,colum2,...colum_n from table_name2;
JAVA鏈接oracle數據庫:
Class.forName( "oracle.jdbc.driver.OracleDriver" );
Connection cn = DriverManager.getConnection( "jdbc:oracle:thin:@MyDbComputerNameOrIP:1521:ORCL", sUsr, sPwd );