Oracle的四個主要用戶
-
超級管理員 sys/change_on_install
-
普通管理員 system/manager
-
普通用戶 scott/tiger
-
大數據用戶 sh/sh
簡單查詢 -
查詢表結構 DESC 表名
-
簡單查詢 SELECT [DISTINCT] |[字段 [別名]] [,字段 [別名]] …
FROM 表名 [別名]
(1) 查詢時也可以使用四則運算,如:SELECT (字段x)+y FROM 表名
(2) 可以使用“||”連接字段與字符串,如:
select '工作與工資:' || job || sal 工作工資 from emp
執行結果: -
限定查詢 SELECT [DISTINCT] *|[字段 [別名]] [,字段 [別名]] …
FROM 表名 [別名]
[WHERE 條件(s)]
(1) Where字句后可以增加多個條件,最常見的條件就是最基本關系運算:>、<、>=、<=、!=(<>)、BETWEEN…AND、LIKE、IN(指定范圍)、IS NULL(為空)、AND(且)、OR(或)、NOT(非)。
(2) 多個條件可以使用AND與OR連接。
例如:select * from emp where sal>1300 and sal<4000
(3) 范圍判斷BETWEEN…AND:BETWEEN 最小值 AND 最大值(大于等于最小值,小于等于最大值),BETWEEN…AND 對數字、日期都可以使用!!!
例如:select * from emp where sal between 1300 and 4000
例如:select * from emp where hiredate between '01-1月-1981' and '31-12月-1981'
(4) 判斷為空IS (NOT) NULL
例如:select * from emp where comm is null
例如:select * from emp where comm is not null
例如:select * from emp where not comm is null
(5) 指定范圍的判斷(NOT) IN
例如:select * from emp where empno in(7369,7566,7799)
例如:select * from emp where empno not in(7369,7566,7799)
注意:如果NOT IN 范圍里出現了NULL則查詢不到任何結果!!!
(6) 模糊查詢LIKE,‘_’匹配一個字符。‘%’匹配任意個字符。
例如:select * from emp where empno like '7%'
例如:select * from emp where empno like '77__' -
數據排序 SELECT [DISTINCT] *|[字段 [別名]] [,字段 [別名]] …
FROM 表名 [別名]
[WHERE 條件(s)]
[ORDER BY [字段 [ASC | DESC]] [,字段 [ASC | DESC]] …]
(1) “ORDER BY”子句是寫在所有SQL語句最后的,排序時可以指定多個字段,ASC為升序是默認的,DESC是降序使用時需要指定。
單行函數
- 字符函數
(1) 首字母大寫:Initcap(char)
例如:Select initcap(‘hello’) from dual
結果:Hello
(2) 轉換為大寫:Upper(char)
例如:Select upper(‘sun’) from dual
結果:SUN
(3) 轉換為小寫:Lower(char)
例如:Select lower(‘FUN’) from dual
結果:fun
(4) 左剪裁:Ltrim(char,set)
例如:Select ltrim( ‘xyzadams’,’xyz’) from dual
結果:adams
(5) 右剪裁:Rtrim(char,set)
例如:Select rtrim(‘xyzadams’,’ams’) from dual
結果:xyzad
(6) 按字符翻譯:Translate(char, from, to)
例如:Select translate(‘jack’,’j’ ,’b’) from dual
結果:back
(7) 字符串替換:Replace(char, searchstring,[rep string])
例如:Select replace(‘jack and jue’ ,’j’,’bl’) from dual
結果:black and blue
(8) 查找子串位置:Instr (char, m)
例如:Select instr (‘worldwide’,’d’) from dual
結果:5
(9) 取子字符串:Substr (char, m, n)
例如:Select substr(‘abcdefg’,3,2) from dual
結果:cd
Oracle數據庫的字符串的下標0或1都是指字符串的第一個字母,如:
Select substr(‘abcdefg’,0,2) from dual
結果:ab
Select substr(‘abcdefg’,1,2) from dual
結果:ab
Substr (char, m, n)中參數n可以不寫,不寫表示截取完整個字符串,如:
Select substr(‘abcdefg’,2) from dual
結果:cdefg
Substr (char, m)中參數m可以是負數表示從后截取字符串,如:
Select substr(‘abcdefg’,-3) from dual
結果:efg
(10) 連接字符串:Concat (expr1, expr2)
例如:Select concat (‘Hello’,’ world’) from dual
結果:Hello world
(11) 字符串長度:Length(char)
例如:Select length(‘lizhiwei’) from dual
結果:8 - 數字函數
(1) 四舍五入:Round(m,n)
例如:Select round(100.5) from dual
結果:101
例如:Select round(100.256,2) from dual
結果:100.26
當n=-1時,表示取整數的四舍五入,得到一個個位是0的整數,如下:
例如:Select round(103.256,-1) from dual
結果:100
例如:Select round(105.256,-1) from dual
結果:110
(2) 截斷:Trunc(m,n)
例如:Select trunc(100.256,2) from dual
結果:100.25
(3) 取余數:Mod(m,n)
例如:Select mod(10,3) from dual
結果:1 - 日期函數
(1) 可以使用SYSDATE取得當前日期,如:SELECT SYSDATE FROM DUAL。
(2) 日期的運算:日期+數字=日期(若干天后的日期)、日期-數字=日期(若干天前的日期)、日期-日期=數字(兩個日期之間的天數)。如:
Select sysdate+300 from dual
Select sysdate-300 from dual
Select sysdate-hiredate from emp
(3) 返回指定日期當月的最后一天的日期值: Last_day(d)
例如:Select last_day('23-8月-07') from dual
結果:2007-8-31
(4) 下一個星期幾的日期(1<=integer<=7): Next_day(d,[day|integer])
例如:Select next_day('5-5月-08','星期三') from dual
結果:2008-5-7
注意:integer =1對應的是星期日,則星期三對應的integer=4。
例如:Select next_day('5-5月-08',4) from dual
結果:2008-5-7
(5) 求若干月后的日期,d是日期,n表示月數: Add_months(d,n)
例如:Select add_months(sysdate,12) from dual
結果:2008-8-1 19:47:57
(6) 返回兩個日期之間的月數:Months_between(d1,d2)
例如:Select months_between('06-5月-13','06-5月-08') from dual
結果:60 - 轉換函數
(1) 數字日期格式化:To_char( d | n [,fmt] )
注意:d表示日期,n表示數值,fmt為轉換的格式
例如:Select to_char(sysdate,'yyyy"年"MM"月"fmDD"日" hh24:mi:ss' from dual
結果:2007年08月01日 16:40:54
注意:加入“fm”可以除去多余的0,“hh24”表示24小時制格式
例如:Select to_char(sysdate,'yyyy"年"fmMM"月"fmDD"日" hh24:mi:ss') from dual
結果:2007年8月01日 16:40:54
注意:使用數字格式化是“9”表示一位數字,“L”表示當前語言環境下的貨幣符號!
例如:Select to_char(1234567890,'999,999,999,999') from dual
結果:1,234,567,890
例如:Select to_char(1234567890,'L999,999,999,999') from dual
結果:¥1,234,567,890
(2) 字符串轉換為日期數據類型:To_date( char [,fmt] )
例如:Select to_date('2007-8-1','yyyy-mm-dd') from dual
結果:01-08月-07
(3) 將數椐字符串轉換為 number 數據類型:To_number(char)
例如:Select to_number('100')+ to_number('123') from dual
結果:223
注意:不使用此函數也可以完成運算!
例如:Select '100'+ '123' from dual
結果:223 - 通用函數
(1) 處理NULL的函數:NVL(字段,值)
注意:當某字段為NULL時,則此字段經過四則運算后的就結果也為空!使用了NVL(字段,值)后,當字段為空時Oracle就會使用用戶為字段設置的值進行計算!
例如:select ename , NVL(comm,10)*12 from emp
(2) 多值判斷函數:DECODE(數值|字段,判斷值1,顯示值1 ,判斷值2,顯示值2,…)
例如:Select DECODE('li','li','李','zhi','志') from dual
結果:李
例如:select job,decode(job,'CLERK','辦事員') from emp
復雜查詢
- 多表查詢 SELECT [DISTINCT] |[字段 [別名]] [,字段 [別名]] …
FROM 表名 [別名] [,表名 [別名]] [,表名 [別名]]…
[WHERE 條件(s)]
[ORDER BY [字段 [ASC | DESC]] [,字段 [ASC | DESC]] …]
注意:當不知道一個表中的數據量時,應先查詢表中的數據量,若查詢所有的數據,當表中的數據量很大時就很容死機!查詢數據量的語句如下:
SELECT count() FROM 表名
(1) 多表查詢時,當多個表中有相同的字段時,要使用該字段應該在字段前加上表名,即“表.字段”。
例如:SELECT * FROM emp , dept WHERE emp.deptno=dept.deptno
(2) 但查詢的表名較長時,可使用表的別名來簡化查詢的代碼。
例如:SELECT e.empno, d.deptno FROM emp e , dept d WHERE e.deptno=d.deptno
注意:當表的數據量很大時,使用多表查詢的性能將會很低,應盡量避免使用。
(3) 多表查詢的限定條件不止能用“=”還可用其他的判斷條件。
例如:SELECT e.ename,s.grade FROM emp e , salgrade s WHERE e.sal BETWEEN s.losal AND s.hisal - 左、右連接
(1) 左、右鏈接意義:當多表查詢的限定條件含有的字段在數據表里存在某些數據元素的該字段為空值時,即使這些數據元素的其他字段不為空,則查詢結果里就不會有這些數據元素。相應的使用左、右連接就可以在查詢結果里顯示這些數據元素。
(2) 左、右鏈接規則:在使用多表查詢時,若限定條件使用了“=”就可以在“=”的左右邊加上“(+)”;“(+)=”表示右連接,“=(+)”表示左連接。
注意:“(+)=、(+)”這種左右連接表示方法是Oracle數據庫的獨有的。
(3) 左右連接的標準SQL語句(SQL的1999年語法)
交叉連接:SELECT * FROM 表1 CROSS JOIN 表2(用于產生笛卡爾積)
例如:SELECT * FROM emp CROSS JOIN dept
自然連接:SELECT * FROM 表1 NATURAL JOIN 表2(自動匹配關聯字段)
注意:自然連接時,設置關聯字段需要使用約束制定。
例如:SELECT * FROM emp NATURAL JOIN dept
自定義關聯字段:SELECT * FROM 表1 JOIN 表2 USING(字段)
例如:SELECT * FROM emp JOIN dept USING(deptno)
自定義關聯條件:SELECT * FROM 表1 JOIN 表2 ON(關聯條件)
例如:SELECT * FROM emp JOIN dept on(emp.deptno=dept.deptno)
自定義連接方向:SELECT * FROM 表1 [LEFT | RIGHT | FULL OUTER] JOIN表2 ON(關聯條件) (其中LEFT:左連接,RIGHT:右連接,FULL:全連接)
例如:SELECT * FROM emp LEFT OUTER JOIN dept on(emp.deptno=dept.deptno)
例如:SELECT * FROM emp RIGHT OUTER JOIN dept on(emp.deptno=dept.deptno)
例如:SELECT * FROM emp FULL OUTER JOIN dept on(emp.deptno=dept.deptno) - 統計函數與分組查詢
(1) 統計函數
統計查詢結果數:COUNT(字段 | *)
例如:SELECT COUNT(ename) FROM emp
統計平均值:AVG(字段)
例如:SELECT AVG(sal) FROM emp
求和:SUM(字段)
例如:SELECT SUM(sal) FROM emp
求最大值:MAX(字段)
例如:SELECT MAX(sal) FROM emp
求最小值:MIN(字段)
例如:SELECT MIN(sal) FROM emp
注意1:使用統計函數當統計的字段都為空時,只有COUNT函數一定會返回結果(可能是0),而其他的函數可能不會返回結果!!!
注意2:統計函數可以在沒有分組的時候單獨使用,而不能與其他字段同時使用,如:select sum(sal) ,ename from emp就是sum函數與ename字段同時使用而導致查詢出錯。
(2) 分組查詢
SELECT [DISTINCT] *|[[分組字段1 [別名]] [,分組字段2 [別名]]…]|統計函數
FROM 表名 [別名] [,表名 [別名]] [,表名 [別名]]…
[WHERE 條件(s)]
[GROUP BY 分組字段1 [,分組字段2]…]
[ORDER BY [字段 [ASC | DESC]] [,字段 [ASC | DESC]] …]
例如:select job,max(sal),min(sal) from emp group by job
例如:select d.deptno, d.dname, d.loc,count(e.empno),nvl(avg(e.sal),0)
from dept d,emp e
where d.deptno=e.deptno(+)
group by d.deptno, d.dname,d.loc
注意1:在使用分組查詢時,SELECT子句后只能出現分組字段和統計函數,而不能出現其他字段,如:select job,ename,max(sal),min(sal) from emp group by job中select子句含有非分組字段ename而導致查詢出錯。
注意2:統計函數可以嵌套,但是嵌套之后的統計函數不能與任何字段同時使用,如:select job,max(avg(sal)) from emp group by job中就是因為job字段與嵌套的統計函數同時使用而導致查詢出錯的。
(3) 使用HAVING進行分組后的過濾查詢
SELECT [DISTINCT] *|[[分組字段1 [別名]] [,分組字段2 [別名]]…]|統計函數
FROM 表名 [別名] [,表名 [別名]] [,表名 [別名]]…
[WHERE 條件(s)]
[GROUP BY 分組字段1 [,分組字段2]…]
[HAVING 分組后的過濾條件(可以使用統計函數)]
[ORDER BY [字段 [ASC | DESC]] [,字段 [ASC | DESC]] …]
例如:select job,max(sal),min(sal),avg(sal)
from emp
group by job
having avg(sal)>2000
注意:WHERE與HAVING的區別,where是使用在group by之前的過濾條件,having是使用在where與group by之后的過濾條件。 - 子查詢
SELECT [DISTINCT] *|[[分組字段1 [別名]] [,分組字段2 [別名]]…]|統計函數
(,子查詢)
FROM 表名 [別名] [,表名 [別名]] [,表名 [別名]]…(,子查詢)
[WHERE 條件(s) (,子查詢)]
[GROUP BY 分組字段1 [,分組字段2]…]
[HAVING 分組后的過濾條件(可以使用統計函數)]
[ORDER BY [字段 [ASC | DESC]] [,字段 [ASC | DESC]] …]
(1) 當子查詢在where子句中,則此時子查詢會返回單行單列、多行單列、多行單列的數據。
例如:select * from emp where sal>(select avg(sal) from emp)(返回單行單列)
例如:select * from emp where (job,sal)=(select job,sal from emp where ename= 'ALLEN ')(返回單行多列,此類型出現很少)
例如:select * from emp where sal in(select sal from emp where job='MANAGER')
(返回多行單列)
注意:但返回多行單列時需要使用判斷符:IN、ANY、ALL,IN表示指定范圍;>ANY表示大于其中的最小值,<ANY表示小于其的最大值,=ANY表示等于其中的任何值;>ALL表示大于其中的最大值,<ALL表示小于其中的最小值。
(2) 當子查詢在from子句中,則此時子查詢會返回多行多列。
例如:select d.deptno,d.dname,d.loc,temp.con,temp.av
from dept d,( select deptno dno,count(empno) con,avg(sal) av
from emp
group by deptno) temp
where d.deptno=temp.dno(+)
注意:此例使用多表查詢也可以達到效果,但使用嵌套查詢可以大大的提高性能。 - 數據的更新操作
(1) 數據增加:INSERT INTO 表名 [(字段1,字段2…)] VALUES (值1,值2…)
(使用Oracle的復制表操作復制emp表:CREATE TABLE myemp AS SELECT * FROM emp)
例如:insert into myemp (empno,ename,hiredate,sal,mgr,job,comm)
values (1234, '李志偉',to_date(' 1993-06-11', ' yyyy-mm-dd'),8000,7369, ' 程序員',1000)
(2) 數據修改:UPDATE 表名 SET 字段1=更新值1, 字段2=更新值2… [WHERE 條件(s)]
例如:update myemp set sal=10000 where empno= '7369'
若更新數據時沒有更新條件,則表示更新所有。但最好不要這樣使用,因為當表中的數據很大時,這樣更新會很慢,性能極低!
(3) 數據刪除:DELETE FROM 表名 [WHERE 刪除條件(s)]
例如:delete from myemp where ename= '李志偉'
注意:數據的查詢要比數據的更新安全!所以更新時一般要進行事務處理。 - 事務處理
(1) 事務的回滾與提交
回滾命令:ROLLBACK,更新操作回到原點。
提交命令:COMMIT,提交數據的更新,一旦提交后就無法回滾了。
(2) 需要注意的是:每一個用戶的每一次與數據庫連接都相當于與數據庫的一次會話(session),當前會話的數據更新未提交時,其他用戶的更新操作就需要等待當前的數據更新提交后才能進行,以確保數據的安全。(這就是死鎖) - 數據偽列
(1) ROWNUM
例如:select rownum,ename,sal from emp where rownum<10
rownum就是查詢結果所在的序號數,其應用主要是分頁顯示。
例如:select * from (
select rownum rn,ename,sal from emp
where rownum<=10) temp
where temp.rn>5(顯示結果的第6—10行)
(2) ROWID
rowid表示數據庫里每條數據保存的物理地址,所以每條數據的rowid都不會重復。
例如:select rowid,ename,sal from emp
執行結果:
以AAAR3sAAEAAAACXAAA為例,說明rowid的組成:
數據對象號:AAAR
相對文件號:3sAAE
數據塊號:AAAACX
數據行號:AAA
rowid的應用:如果某次操作向數據庫里插入了大量重復無用的數據,則可以利用“插入越早的數據其rowid就越小”的特性找到剛插入的無用的數據并刪除。
8. 集合操作
(1) UNION:連接兩個查詢,相同部分不顯示。
(2) UNION ALL:連接兩個查詢,相同部分顯示。
(3) INTERSECT:返回兩個查詢中相同的部分。
(4) MINUS:返回兩個查詢中不同的部分。
例: select * from emp where comm is null
UNION
select * from emp where comm is not null
DDL與DCL
- 表的創建及管理
(1) 創建表時常用的數據字段
數據類型 關鍵字 描述
字符串 Varchar2(n) n表示字符串所能保存的最大長度,基本上保存200個左右的類容
整數 Number(n) N表示最多可以保存的整數數,有時可以用int代替
小數 Number(n,m) 其中m為小數位n-m為整數位,有時可以用float代替
日期 Date 存放日期-時間
大文本 Clob 可以存放海量文字(4G)
大對象 Blob 用于存放二進制數據
在開發之中blob很少用,因為blob可以存放最大4G的二進制數據,使得數據庫龐大且讀取不方便。
(2) 表的創建
Create table 表名(
字段1 數據類型 [default 默認值],
字段2 數據類型 [default 默認值],
…
字段n 數據類型 [default 默認值],
);
例如:create table member(
Name varchar2(50) default '無名氏',
Age number(3),
Birthday date default SYSDATE,
Content clob
);
(3) 表的復制
Create table 復制表名稱 as 子查詢
例如:create table emp20 as select * from emp where deptno=20
注意:當子查詢無結果時,只會復制表的結構。
(4) 表的重命名
Rename 舊的表名稱 to 新的表名稱(Oracle獨有)
例如:rename member to person
重命名后可以使用以下代碼查看當前的表名稱:
Select * from tab;(查看當前所有表)
Select * from user_tables;(查看當前所有表的信息)
(5) 截斷表
截斷表與刪除表數據不同,刪除表數據可以進行事物的回滾(即刪除表后不會立即釋放數據的資源),但是截斷表會徹底釋放一張表所占用的全部資源(表空間、索引等等)且無法回滾!操作代碼如下:truncate table 表名稱,但是此語法是Oracle所獨有的。(刪除表數據:delete from 表名稱)
(6) 表的刪除
Drop table 表名稱
a) 當用戶使用“drop table 表名”刪除表后,再通過“select * from tab”查詢時雖然發現被刪除的表沒有了,但是留下了一些痕跡。這就是Oracle 10g之后為了防止用戶誤刪除表而提供的回收站功能,用戶可以通過回收站而進行表的恢復操作,這種技術稱為“閃回技術”。
b) 查看回收站操作:select * from user_RECYCLEBIN
c) 恢復刪除的表操作:flashback table 表名稱 to before drop
d) 刪除回收站里的表:purge table 表名稱
e) 清空回收站:purge recyclebin
f) 如果想徹底刪除一張表,不希望其到回收站可用:drop table 表名 purge
(7) 修改表結構
a) 向表中增加字段:
alter table 表名稱 add(
字段1 數據類型 [default 默認值],
字段2 數據類型 [default 默認值],
…)
b) 修改已有字段結構:
alter table 表名稱 modify(
字段1 數據類型 [default 默認值],
字段2 數據類型 [default 默認值],
…)
注意:最好不要修改表的結構,因為修改表結構可能會影響性能。應該刪除表后重建新的表。
(8) 表字段的約束
a) 約束的定義方式:
例如,定義無名約束:
create table member(
Name varchar2(50) default '無名氏',
Age number(3) UNIQUE,
Birthday date default SYSDATE,
Content clob
);
例如,定義有名約束(名為“UK_age”):
create table member(
name varchar2(50) default '無名氏',
age number(3),
birthday date default SYSDATE,
content clob,
constraint UK_age UNIQUE(age)
);
注意:定義有名的約束,當增加的數據不滿足約束時,數據庫會提示出錯的位置!
b) 非空約束:NOT NULL(NK),表示數據不為空。
c) 唯一約束:UNIQUE(UK),表示數據不能重復。
d) 主鍵約束:Primary Key(PK),主鍵約束=非空約束+唯一約束。
e) 檢查約束:Check(CK),主要是對數據字段的約束。
例如:constraint ck_sex Check (sex IN ('男','女'))
例如:constraint ck_age Check (age between 0 and 150)
f) 外鍵約束:Foreign Key(FK),定義外鍵的字段值是參照其它表的主鍵值的。例如:
(9) 修改表的約束
a) 為表增加約束:alter table 表名稱 add constraint 約束名 約束類型(字段)
b) 刪除表約束:alter table 表名稱 drop constraint 約束名
c) 可以發現如果要維護約束,一定要給約束取名。
注意:非空約束是一個特殊的約束,無法對它進行修改。也最好不要修表的約束,因為修改表的約束可能會降低性能。
(10) 查詢約束
查詢所有約束名:select * from user_constraints
查詢所有約束的字段:select * from user_cons_columns
(11) 序列的設置 - 視圖
(1) 視圖的介紹:視圖就是用來包裝SQL的查詢語句的,把復雜的查詢語句包裝起來有利于程序的設計,而這些查詢語句的結果就是視圖的內容,所以視圖是一種虛擬的表,所以最好不要修改視圖的內容。
(2) 創建視圖的語法 create [or replace] view 視圖名稱 as 子查詢
例如:create view myemp as select * from emp where sal>1500(創建視圖)
例如:create or replace view myemp as select * from emp where sal>2000(若視圖“myemp”存在則替換視圖,不存在則創建視圖)
(3) 刪除視圖:drop view 視圖名
(4) 創建視圖時可以使用的兩個選項:
a) 當視圖創建后,可以使用以下語法來更新視圖里的數據(很類似修改表數據):
update 視圖名 set字段1=更新值1, 字段2=更新值2… [where條件(s)]
b) 第一個選項:with check option
創建視圖是加上該選項,就不能更新視圖條件了!
例如,視圖的創建語句如下:
create view myemp as select * from emp where sal>1500 with check option
若使用以下語句更新視圖就不會成功:
update myemp sal=1000 where ename is not null
c) 第二個選項:with read only
創建視圖是加上該選項,就不能更新視圖內容了(即只讀視圖)!創建視圖時建議使用該選項。 - 同義詞
(1) 同義詞的概念說明:在Oracle中“同義詞”就是一種別名,例如給emp表起一別名“myemp”,則select * from emp與select * from myemp效果相同。但在Oracle中把myemp叫做emp的同義詞。
(2) 創建同義詞的語法 create [public] synonym 同義詞名 for 用戶名.表名
例如:create synonym myemp for scott.emp
說明:沒有加public則表示此同義詞“myemp”只能當前用戶使用,若加上public則所有用戶可以使用。 - 索引
(1) 索引的概念說明:索引的主要功能就是提升數據庫的性能。在Oracle中創建索引存在兩種方式:主鍵約束,Oracle會自動給一張表的主鍵創建索引;手動創建,通過SQL語句創建。
(2) 創建索引 create index 索引名 on 表名(字段)
注意:雖然索引會增加數據查詢的性能,但是當一張表需要頻繁的修改時增加索引會降低其修改數據的性能,此時最好不要加索引。 - 用戶管理
(1) 創建用戶 create user 用戶名 identified by 密碼
創建用戶需要登錄具有創建用戶權限的system與sys兩個用戶進行操作,但是新創建的用戶沒有任何的權限,甚至不能登錄,這就需要授權了。
(2) 授權操作 grant 權限 to 用戶名
例如:grant create session to mydb(授予登錄權限)
例如:grant create table to mydb(授予建表權限)
例如:grant select,insert on scott.emp to mydb(授予mydb用戶查詢、增加scott用戶emp表的數據權限)
但是這種權限很多,授權就很麻煩,這時候就可以使用角色,每個角色會包含很多權限。
(3) 給予角色 grant 角色1 [,角色2]… to 用戶名
例如:grant connect,resource to mydb
(4) 用戶密碼管理
a) 修改用戶密碼 alter user 用戶 identified by 新密碼
b) 讓用戶密碼失效 alter user 用戶名 password expire
c) 鎖定用戶 alter user 用戶名 account lock
d) 解鎖用戶 alter user 用戶名 account unlock
(5) 回收權限 revoke 權限1 [,權限2]…from 用戶名
(6) 刪除用戶 drop user 用戶名 [cascade]
加上cascade表示級聯刪除,會刪除用戶數據 - 數據備份
(1) 數據的導出
a) 進入Windows的cmd,用cd命令把目錄設置到導出文件的位置
b) 輸入exp命令,再輸入要導出的用戶數據的用戶名和密碼
c) 設置導出的文件名,在按回車默認導出數據設置直到開始導出數據。
(2) 數據的導入
a) 在Windows的cmd下使用cd命令進入要導入的文件位置
b) 輸入imp命令,再輸入要把數據導入的用戶的用戶名和密碼
c) 按回車鍵,直到出現“導入整個導出文件(yes/no):no>”輸入yes回車后開始導入。
(3) 數據表的冷備份
a) 數據庫的冷備份概念的說明:就是關閉數據庫實例,再備份數據庫文件。如要進行冷備份,則要備份數據庫的核心文件,如:控制文件、重做日志文件、數據文件、表空間文件、核心操作的配置文件。
b) 找到備份數據庫的核心文件可以通過以下方式(在sys用戶下找):
控制文件:select * from V$CONTROLFILE
重做日志文件:select * from V$LOGFILE
數據文件:select * from V$DATAFILE
表空間文件:select * from V$TABLESPACE
核心操作的配置文件:show paramter pfile
c) 在找到數據庫的核心文件之后,關閉數據庫實例,使用:shutdown immediate
d) 備份數據庫的核心文件之后,啟動數據庫實例,使用:startup(備份完成)
浙公網安備 33010602011771號