oracle數據庫基礎知識彙總—30天(一)

解鎖scott:mysql

打開SQLPLUS(是oracle的自帶的工具軟件,主要用於執行SQL語句,pl\sql塊),也能夠在「運行」裏面輸入「sqlpus或sqlplusw"   輸入:用戶名(如system),密碼linux

輸入 alter user scott account unlocksql

PL/SQL developer屬於第三方軟件,主要用於開發,測試,優化oracle pl/sql的存儲過程。這款軟件用的不少,須要單獨安裝。數據庫

企業管理器windows

  1.  oracleDBConsoleorcl(通常不啓動)服務是啓動狀態才能夠啓動企業管理器
  2. 在瀏覽器中輸入:http://ip:1158/em

oracle 經常使用的sql plus命令瀏覽器

  • show user 能夠用來顯示當前的用戶名
  • conn 用戶名/密碼 切換用戶,可用於鏈接
  • disc  斷開和oracle數據庫的鏈接,可是不退出sql*plus窗口,exit是斷開與oracle的鏈接,同時退出窗口
  • passw/password 用於修改用戶的密碼。若是給本身修改密碼則不須要用戶名,給別人修改密碼則須要帶用戶名
  • & 交互命令 select * from emp where job=‘&job';能夠本身輸入值代替&進行查詢
  • set linesize 140;設置每行顯示多少個,默認是80個字符;set pagesize  30;設置一而顯示多少條數據。
  • edit 用於編輯腳本。如:edit D:/a.sql ; 
  • spool 把屏幕上顯示的記錄,保存到文件中 。首選 spool D:/a.sql建立一個文件,而後點select * from emp;將查詢數據寫入,最後關閉 spool off;數據就寫入了。

分配權限session

  • 建立用戶:create user 用戶名 identified by 密碼 。如:create user xm identified by m123 【只有system/sys有權限建立用戶,普通用戶沒法建立】
      • 表空間:表存在的空間,是一個邏輯的概念。 sql> create user demo identify by m123     default tablespace users  temporary tablespace temp quota 3m on users
      • identified by 代表該用戶demo將用數據庫方式驗證,default tablespace users //用戶的表空間在users上。 temporary tablespace temp //用戶demo的臨時表健在temp空間quota 3m on users//代表用戶demo創建的數據對象(表、索引、視圖,pl/SQL塊 ...)最大隻能是3M
      • sql> grant/revoke  [connect|resource|DBA|create session]  to demo 受權或移除受權。create session 是權限,其它的是角色。
      • connect和resource是兩個系統內置的角色,和dba是並列的關係。DBA:擁有全部特權,是系統最高權限,僅僅有DBA才幹夠建立數據庫結構。RESOURCE:擁有Resource權限的用戶僅僅可以建立實體,不可以建立數據庫結構。CONNECT:擁有Connect權限的用戶僅僅可以登陸Oracle,不可以建立實體,不可以建立數據庫結構。
  • 修改密碼:password 用戶名,具備dba的權限或者擁有alter user的系統權限;alter user 用戶名 identified by 新密碼
  • 刪除用戶:drop user 用戶名,當咱們刪除一個用戶的時候,若是這個用戶本身建立有數據對象時,那麼咱們在刪除該用戶的時候須要加選項 cascade ,表示把數據對象一塊兒刪除。

方案(schema)oracle

理解:當一個用戶建立好後,若是該用戶建立了任意一個數據對象,這時咱們的dbms就會建立一個對應的方案與該用戶對應,而且該方案的名字和用戶一致。app

賦權:grant  [select |delete|insert|update|all] on 表名 to 用戶名   with grant option; with grant option 表示獲得權限的用戶能夠把權限繼續分配。如:grant all on scott.emp to stu;若是是管理員權限則帶 with admin option
ssh

查詢:select * from   scott.emp 

收回權限:revoke [select |delete|insert|update|all] on 表名 from 用戶名 

 

oracle用戶管理

profile管理用戶口令:profile是口令限制,資源限制的命令集合,當創建數據時,oracle會自動創建名稱爲default的profile,當創建用戶沒有指定profile選項,那oracle就會將default分配給用戶。

使用profile文件對口令進行管理,

建立: create profile 文件名 limit failed_login_attemptspassword_lock_time 2   ,

使用:  alter 用戶名 profile 文件名;解鎖:alter 用戶名  account unlock;

終止口令:create profile 文件名 limit password_life_time 10 password_grace_time 2 10天修改密碼,密碼的寬限是2天

刪除drop profile 文件名 【cascade

 

oracle數據庫的啓動流程

 linux裏的ssh遠程登陸工具,systeminfo能夠顯示系統的基本信息

windows操做系統:

lsnrctl start(啓動監聽)

oradmin -startup -sid orclhsp (啓動實例)

unix操做系統/linux系統: 和windows相差不大

 

oracle登陸認證方式

conn ***/***  as sysdba  //可以鏈接成功,只要as sysdba 後系統不會去驗證用戶名和密碼就自動登陸。

  1. 操做系統認證
    • 若是當前用戶屬於本地操做系統的ora_dba組(對於windows操做系統而言),便可經過操做系統認證。
  2. oracle數據庫驗證(密碼文件驗證)
    • 對於普通用戶,Oracle默認使用數據庫驗證
    • 對於特權用戶(好比sys用戶),oracle默認使用操做系統認證,若是驗證不經過,再到數據庫驗證(密碼文件驗證)。經過配置sqlnet.ora文件,能夠修改Oracle登陸
      • SQLNET.AUTHENTICATION_SERVICES=(NTS)是基本操做系統驗證
      • SQLNET.AUTHENTICATION_SERVICES=(NONE)是使用數據庫驗證
      • SQLNET.AUTHENTICATION_SERVICES=(NTS,NONE)是二者共存
  3. 管理員密碼丟失
    • 恢復辦法:把原有密碼文件刪除,生成一個新的密碼文件
    • 步驟以下:
      • 搜索名爲PWD數據庫實例名.ora文件,如(PWDORACLE.ORA)
      • 刪除該文件,爲預防萬一,建議你們備份
      • 生成新的密碼文件,在dos控制檯輸入命令:orapwd file=原來密碼文件的全路徑\密碼文件名.ora password=新密碼 entries=10;//entries:容許幾個特權用戶 ,密碼文件名必定要和原來的密碼文件名同樣。如:orapwd file=D:\app\admin\product\11.2.0\dbhome_1\database\PRDorcl.ora password=123 entries=10
      • 從新啓動數據庫實例

 

 數據庫基本概念

1.數據類型

 select *,dump(name) from table ; dump查看字段的詳細信息(編碼,長度等)

char(size),size不能超過2000,是定長。若是是英文字母,能存放size個字符,若是是中文,佔用兩個字符空間。

varchar2(size),varchar2的性能更優,是變長,最長可存放4000個字符,字母佔一個字節,中文佔兩個字節。

nchar(size),是unicode數據類型,定長,最大2000字符。不論是英文仍是中文,能存放size個字符。unicode的好處:爲了知足各國不一樣大小容量的文字。

nvarchar2(size),unicode數據類型,變長,最大4000個字

clob(character large object),字符型大對象,最大8tb

blob(binary large object),二進制數據,能夠存放圖片/聲音8tb

number(p,s),數值類型,變長,p爲整數,s爲小數位 ;範圍:1<=p<=38,-84<=s<=127,保存數據泛微-1.0e-130<=number1.0e+126,p爲有效位,從左往右數每個非0的數就是每個有效位如number(5,2) 範圍-999.99-999.99;number 什麼都不寫,保持原數;number(6,-2),存123.55——存入100,167.98——存入200;

date,日期型,默認的日期格式是美國格式(「DD-MM-YY"),若是要用習慣的格式的話要用oracle函數,timestamp(n)遊戳類型,當數據更新時,日期自動更新;日期類型必須加單引號。to_date(string,'format');

 

2.基本語法

 修改表名:rename 舊錶名 to 新表名

查看錶結構:desc 表名

修改列名:alter table 表名  modify (列名 列類型); 當寫where語句爲空時 where name is null

刪除列名:alter table 表名 drop(列名1,列名2);

增長列名:alter table 表名 add(列名 列類型);

刪除行後找回:delect * from mytable ;找回數據 先 savepoint a;而後rollback to a ;   truncate table 表名 刪除之後沒法找回。

查詢:select [distinct] * from mytable;distinct去重複數據。sql語句(如表名、字段名)不區分大小寫,內容是區分大小寫的。

soundex:返回一個與給定的字符串讀間相同的字符串。select * from table1 where soundex(name)=soundex(‘weather’);

ABS:返回指定值的絕對值。select abs(price),abs(-100) from dual;

ACOS:給出反餘弦的值。ATANT:返回一個數字的反正切值。COS:返回一個給定數據的餘弦。select cos(-3.1415926) from dual ;———— -1

CEIL:返回大於或等於給出數字的最小整數。 select ceil(3.14) from dual;FLOOR:對給定的數據取整數;LN:返回一個數據的對數;

3.基本運算

 nvl(字段名,0):用於處理數據爲null時的問題,若是字段爲空時不取0,若是不爲空取自己值。

||   鏈接字符串。 select name ||」年齡是「|| age from table1;  // 張三年齡是25

alter user scott account lock;用戶鎖定之後,只是不能登陸,可是表仍是能夠訪問

to_char:字符格式的轉換;//如:where to_char(birthday,'yyyy-mm-dd')>'1995-1-1';  4月出生的:to_char(birthdat,'mm')='4'

like:%表示0到多個字符,_ 表示一個字符;

order by:是對查詢結果進行排序。默認是升序asc。支持別樣查詢。order by後面是能夠加表達式的。

數據分組:max、min、avg、sum、count,當返回一個值時能夠放 在一塊兒查詢,當返回的結果條數不同時一塊兒查詢會出錯;avg(SAL),當SAL爲null時不會統計。//統計帶空的時 select sum(SAL)/count(*) from table1; count統計時也會排除null的項。

 SQL語句的執行順序:一、默認狀況下是從右向左執行;

group by 和 having:group by 用於對查詢的結果分組統計,group by 字段1,字段2  ;having子句用於過濾分組顯示的結果,即至關於group by的查底結果where 的做用。

自查詢:select * from table1 t1,table1 t2 where t1.name1=t2.grad1(+);必定要取別名不然會出錯。(+)是外聯的附號,(+)寫在左邊是右外聯,寫在右邊是左外聯。

4.子查詢

單行子查詢:子查詢只返回一條記錄。

 多行子查詢:子查詢返回多條記錄。any指結果中的任一一條數據都知足條件。

多列子查詢:查詢查詢結果知足兩列條件  //如查詢與smith的部門和崗位徹底相同的全部僱員 :select * from emp where (detpno,job)=select (depno,job)from emp; 

注:oracle支持數字排序,可是不能數字不能超過列數;子查詢的時候必須指定別名;where上面取個別名,前面的語句將沒法識別;desc顯示錶結構。

//顯示部門最高工資的人的詳細信息

 

 分頁查詢:

mysql分頁:select * from 表名 where limit  從第幾條取,條數

sql server分頁:select top 10 * from (select rownum,tb1.* from tb1 where rownum>=10 );

oracle分頁:三層過慮 select t2.* from(select t1.* ,rownum rn  from (select * from emp) t1 where rownum<=6) t2  where t2.rn>=4;

顯示上級的個數(distinct mgr)去掉重複的了再統計;count(列名)統計一列;

 

 

 模擬10W條數據

  1. 建立一張表:create table mytest as select empno,ename,sal,comm,deptno,job from emp;
  2. 自我複製:insert into mytest (empno,ename,sal,comm,deptno,job) select empno,ename,sal,comm,deptno,job from mytest;

 5.合併查詢

union:取得兩個結果集的並集。會自動去掉結果集中的重複行。

union all:和union類似,可是不會去掉重複行,也不會排序。

intersect:取交集

minus:取差集,A1集合-A2集合。cube立方體 select avg(sal),deptno,job from emp group by cube(empno,job)先對empno分組、再組job分組,再對empno和job分組

6.內鏈接和外鏈接

內鏈接:就是利用where子句對兩張表的迪卡爾集進行篩選。 select ... tb1 inner join tb2 where tb1.id=tb2.id;(只有兩張表兩邊都匹配的時候才被選擇

外鏈接:左外連,右外連,徹底外連 。

left join...on(左側的表徹底顯示);另一種寫法select * from stu ,emam where stu.id=exam.id(+)

right join...on (右邊的表徹底顯示);另一種寫法select * from stu ,emam where stu.id(+)=exam.id;

full join...on (左邊的表和右邊的表都顯示);

 7.小結

  1. 分組函數(avg...)只能出如今選擇列表、having、order by子句中
  2. 若是在select語句中同時包含group by,having,order by那麼他們順序是group by,having,order by
  3. 在選擇列中若是有列、表達式和分組函數,那麼這些列和表達式必須有一個出如今group by子句中,不然會出錯。
相關文章
相關標籤/搜索