oracle數據庫入門


oracle  數據庫入門。

 

1、數據

2、數據存儲的地方:變量 數組 容器 (內存中),文件,數據庫(文件)

3、數據庫系統:sqlserver 2000   2005  2008  mysql 5.5 oracle 9i 10g 11g db2

4、oracle 數據

5、oracle 數據庫不同於其他的數據庫,一個數據庫下面有好多用戶:

用戶模式:sys system scott  默認用戶

 

 

老師這里認為 實例等價於數據庫、用戶等價於模式、表空間

oracle 里面 一個 實例 就對應一個 數據庫。 用戶 等價於 開啟一種特定對應的模式,比如普通權限的用戶或者 超級管理員 等等等。

 

好吧 還是 看那個 ppt  吧,實例指的是:數據庫服務器的內存與相關處理程序。

 

 

 

 

吼吼吼!這個 ORACLE SQL*Plus 是默認自帶安裝的。

當 當前表中沒有數據的時候,返回的結果是:

 

如果是使用PL/SQL Developer 的話,返回的結果是:

 

Sys權限最高是超級用戶。具有最高權限。擁有sysdba角色。特色在於擁有create database也就是創建數據庫的權限。

System是用戶管理員。具有很大的權限,沒有創建創建數據庫的權限,除此之外權限相同。

其他的今本上都是普通用戶了。

 

1、連接 conn 語法:

 

SQL> conn system/lifei23

已連接。

SQL> conn sys/lifei23

ERROR:

ORA-28009: connection as SYS should be as SYSDBA or SYSOPER

 

警告您不再連接到 ORACLE

SQL> show user;

USER 為 ""

SQL> 

 

一旦用戶名密碼輸入錯誤,則與oracle的連接斷開,所以此時不再能連接到數據庫,再次展示用戶,用戶為空。

可見每次執行 conn 命令時,是先退出當前用戶,隨即登錄最新的用戶,如果用戶名密碼正確允許登錄,如果錯誤則失去連接(因為之前登錄用戶已經退出)。

SQL> conn system/lifei23

已連接。

SQL> conn sys/lifei23

ERROR:

ORA-28009: connection as SYS should be as SYSDBA or SYSOPER

 

警告您不再連接到 ORACLE

SQL> show user;

USER 為 ""

SQL> conn lifei/lifei

ERROR:

ORA-01017: invalid username/password; logon denied

警告您不再連接到 ORACLE

 

可是兩種登錄失敗,是有本質上差距的。不知道 那個 系統用戶如何才能登錄成功,至少現在不知道。

 

 

警告您不再連接到 ORACLE

 

2disc命令

SQL> disc

SQL> show user;

USER 為 ""

SQL> conn scott/lifei23;

已連接。

SQL> disc

從 Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - Production

With the Partitioning, OLAP and Data Mining options 斷開

SQL> 

 

登錄當前用戶,然后退出。

 

 

3、更改密碼:  password 命令

 

SQL> conn scott/lifei23

已連接。

SQL> show user;

USER 為 "SCOTT"

SQL> password

更改 SCOTT 的口令

舊口令: *******

新口令:******

重新鍵入新口令:******

口令已更改

SQL> conn scott/123456

已連接。

這個 是當前用戶 修改自己的密碼,所以需要原來的密碼。

 

下面利用管理員權限修改密碼,這個時候相當於要求管理員修改密碼,那么管理員是可以不記得某個具體用的密碼的,所以當管理員在修改密碼的時候,是不需要原來的密碼的。

SQL> conn system/lifei23

已連接。

SQL> password scott

更改 scott 的口令

新口令:*******

重新鍵入新口令:*******

口令已更改

SQL> conn scott/lifei23;

已連接。

 

4exit命令

exit 命令就直接退出了,好在 需要記錄的內容都被記錄了。

 

 

這里如果 剛剛最終修改的結果是lifei23 那么一切安全,要不登錄都登陸不上去了。。。

 

5、導入命令 start 或者 @

 

SQL> start f:/test/chaoshen.sql

 

未選定行

 

那應該是寫對了在 f:/test 目錄下新建了一個 文件 叫做 chaoshen.sql 里面有一句話:

Select * from goods_tb;按照之前的結果 如果 表中沒有結果 那么返回的結果就是:未選定行。

 

這個 利用也可以實現。就是 在這里面start 和 是等效的。

然后有一個 edit 命令 可以用來修改 這個 文件,要加全路徑。

然后再次執行看看什么效果:

 

未選定行

 

6、編輯命令  edit

 

SQL> edit f:/test/chaoshen.sql

 

SQL> @ f:/test/chaoshen.sql

 

已創建 行。

 

看這意思 insert 語句 是對的。

 

嘿嘿

 

 

SQL> edit f:/test/chaoshen.sql

 

SQL> start f:/test/chaoshen.sql

 

GOODS_ID GOODS_NAME                     GOODS_PRICE GOODS_CA

-------- ------------------------------ ----------- --------

GOODS_PROVIDER

------------------------------

1        shangpin1                               50 weijin

33

 

 

SQL> show linesize

linesize 80

SQL> set linesize 120

SQL> show linesize

linesize 120

SQL> @ f:/test/chaoshen.sql

 

GOODS_ID GOODS_NAME                     GOODS_PRICE GOODS_CA GOODS_PROVIDER

-------- ------------------------------ ----------- -------- ------------------------------

1        shangpin1                               50 weijin   33

 

 

SQL> alter table goods_tb modify(goods_name varchar2(10));

 

表已更改。

 

SQL> select * from goods_tb

  2  

SQL> select * from goods_tb;

 

GOODS_ID GOODS_NAME GOODS_PRICE GOODS_CA GOODS_PROVIDER

-------- ---------- ----------- -------- -----------------

1        shangpin1           50 weijin   33

 

嘿嘿,這樣就很好看了。

 

最起碼很整齊。

 

SQL> select * from goods_tb;

 

GOODS_ID GOODS_NAME GOODS_PRICE GOODS_CA GOODS_PROVIDER

-------- ---------- ----------- -------- ----------------------------

1        shangpin1           50 weijin   33

2        weijin              35 yongpin  33

 

 

7、導出命令:spool 【會覆蓋更新】

SQL> spool f:/test/record.txt

SQL> insert into goods_tb values(3,'qiaokeli',30,'shipin',letben)

  2  

SQL> insert into goods_tb values(3,'qiaokeli',30,'shipin',letben);

insert into goods_tb values(3,'qiaokeli',30,'shipin',letben)

                                                     *

第 行出現錯誤:

ORA-00984: 列在此處不允許

 

 

SQL> insert into goods_tb values(3,'qiaokeli',30,'shipin','letben');

 

已創建 行。

 

SQL> spool end;

 

然后就可以 到上面加黑字體路徑下面找到那個 文件,發現這樣一些內容。

 

linesize 好像剛剛我們試驗過。

 

SQL> spool f:/test/record.txt

SQL> select * from goods_tb;

 

GOODS_ID GOODS_NAME GOODS_PRICE GOODS_CA GOODS_PROVIDER

-------- ---------- ----------- -------- --------------

1        shangpin1           50 weijin   33

2        weijin              35 yongpin  33

3        qiaokeli            30 shipin   letben

 

SQL> spool off;

發現spool off 具有 跟 end 一樣的效果。

然后 如果 文件名相同的話,之前的內容會被覆蓋更新。也就是 不復存在。所以 在創建時,要留心,判定一下是否要 執行覆蓋操作。

 

Show linesize 展示每行展示多少列 默認80列 也就是80個字符。

可以利用  :Set linesize   120;  命令 修改 列長

Show pagesize  展示每頁顯示多少行,默認 14行。

可以 利用 set pagesize 30

在 Oracle SQL*Plus  這個界面里面,  pagesize 為 1或者 2的時候,顯示效果是相同的,都是只有 那單獨的一行查詢結果:

 

當設置pagesize 為 3的時候 ,才能顯示齊全的效果。

SQL> set pagesize 2;

SQL> select * from goods_tb;

 

1        shangpin1           50 weijin   33

 

2        weijin              35 yongpin  33

 

3        qiaokeli            30 shipin   letben

 

SQL> set pagesize 3;

SQL> select * from goods_tb;

 

GOODS_ID GOODS_NAME GOODS_PRICE GOODS_CA GOODS_PROVIDER

-------- ---------- ----------- -------- ---------------

1        shangpin1           50 weijin   33

 

GOODS_ID GOODS_NAME GOODS_PRICE GOODS_CA GOODS_PROVIDER

-------- ---------- ----------- -------- ---------------

2        weijin              35 yongpin  33

 

GOODS_ID GOODS_NAME GOODS_PRICE GOODS_CA GOODS_PROVIDER

-------- ---------- ----------- -------- ---------------

3        qiaokeli            30 shipin   letben

 

SQL> set pagesize 1;

SQL> select * from goods_tb;

 

1        shangpin1           50 weijin   33

 

2        weijin              35 yongpin  33

 

3        qiaokeli            30 shipin   letben

8、 Create 命令  創建用戶命令

創建用戶 必須要給出密碼,如果不給,是不允許創建的

SQL> create user lifei identified by 111;

create user lifei identified by 111

                                *

第 行出現錯誤:

ORA-00988: 口令缺失或無效

 

新創建的用戶並不具有,鏈接數據庫的權限。

 

SQL> create user lifei identified by lifei;

create user lifei identified by lifei

                                *

第 行出現錯誤:

ORA-01031: 權限不足

 

SQL> conn system/lifei23;

已連接。

SQL> create user lifei identified by lifei;

 

用戶已創建。

 

SQL> conn lifei/lifei;

ERROR:

ORA-01045: user LIFEI lacks CREATE SESSION privilege; logon denied

 

 

 

警告您不再連接到 ORACLE

 

在可視化界面上是可以看到這樣一個 用戶的存在的。但是由於沒有權限的緣故 並不能夠登錄。

 

所以 要先 drop 掉 這個 用戶 然后 在增加,一個 用戶。

9、刪除一個 用戶。Drop user  userName

SQL> conn system/lifei23;

已連接。

SQL> show user;

USER 為 "SYSTEM"

SQL> drop user lifei;

 

用戶已刪除。

 

創建用戶並且 修改密碼,這里面的修改 也只能 跟當時創建一樣,不能用數字開頭。

SQL> show user;

USER 為 "SYSTEM"

SQL> create user lifei identified by lifei;

 

用戶已創建。

 

SQL> alter user lifei identified by letben;

 

用戶已更改。

 

【實例是數據庫服務器內存和相關處理程序】

 

有三個 可以 賦給 用戶的權限 connect  dba 和 resource  

Connect:分別代表獲得鏈接的權限允許當前用戶可以登錄上這個   數據庫文件編輯系統。

dba 最高權限

Resource 資源  數據庫的 增刪改查權限。

所以按照 權限大小進行划分是:

Connect 只連接

Resource 增刪改查

Dba最高權限 新建數據庫。

 

 

10、授權

可是 不級聯的話,表 哪去了?

數據庫下面有很多人,人的下面有很多表。如果刪了人,那  表怎么辦?

 

SQL> conn system/lifei23;

已連接。

SQL> create user lifei1 identified by lifei1;

 

用戶已創建。

 

SQL> grant resource to lifei1;

 

授權成功。

 

SQL> connect lifei1/lifei1;

ERROR:

ORA-01045: user LIFEI1 lacks CREATE SESSION privilege; logon denied

 

 

警告您不再連接到 ORACLE

 

新建用戶之后,不過 不賦權限 連登陸都登錄不上去。。。

 

如果 用戶身上本身就是有表的,此時刪除該用戶時 不指定 cascade的話 還不可以刪除。由於這個表的緣故。

 

想了一個這樣的事情,創建lifei1 創建 表,插入 元組,賦給 lifei2查詢權限,然后連帶刪除lifei1,然后再次 創建lifei1和 表,並插入元組,此時再次利用lifei2查詢 並不能查詢到結果。雖然同名同姓,卻  已物是人非。

 

11、Revoke 召回權限

 

Revoke resource from lifei1

 

如果用戶缺少session的話 需要 賦 一個 connect 的權限。

 

Session 是與數據庫溝通的權限。也就是connect

SQL> conn lifei1;

輸入口令: ******

ERROR:

ORA-01045: user LIFEI1 lacks CREATE SESSION privilege; logon denied

 

 

警告您不再連接到 ORACLE

SQL> conn system/lifei23;

已連接。

SQL> grant connect to lifei1;

 

授權成功。

 

SQL> conn lifei1/lifei1;

已連接。

 

好像后面插入的數據還在上面兒呢~

賦予 單獨的某個權限。比如 增加。那修改 刪除,都是這樣的。

SQL> show user;

USER 為 "LIFEI2" 

SQL> conn lifei1/lifei1;

已連接。

SQL> grant insert on test_tb to lifei2;

 

授權成功。

 

SQL> conn lifei2/lifei2;

已連接。

SQL> insert into lifei1.test_tb values(2,'ss');

 

已創建 行。

 

SQL> select * from lifei1.test_tb;

 

   TEST_ID TEST_NAME

---------- --------------------

         2 ss

         1 letben

 

關於表的具體查詢要一個 一個賦值,也可一起賦值 利用 all這個 詞。

SQL> conn lifei1/lifei1;

已連接。

SQL> grant all on test_tb to lifei2;

 

授權成功。

 

賦予所有的功能給lifei2.

 

連接的權限傳遞。

 

關於 這個 連接的權限 就是 拿鑰匙開門的例子。很恰當。

 

傳遞就是:記得在賦權限之余 就是 with admin option

 

系統管理員可以直接取消這個 傳遞出去的權限。

 

然后 對於單個 表上的權限來說的話,傳遞出去 就是 with grant option

實驗。Resource 和 connect 和 create session

 

給權限的時候 沒有都給 但是撤銷的 時候 可以 revoke all on test_tb from lifei2.

 

給大門權限包括 resource和 connect 和 create session 是 with admin option

 

給表權限 是 with grant option

表權限 作為 管理員 貌似 都撤銷不了 但是擁有 表的人 可以 刪除。

 

問題來了:

如果 管理員給了 lifei1 和 lifei2 兩個人 開大門的權限 兩個 人 可以 互相刪除么?

 

可以 誰先下手誰牛逼。

SQL> revoke create session from system;

revoke create session from system

*

第 行出現錯誤:

ORA-01952: 系統權限未授予 'SYSTEM'

 

 

SQL> show user;

USER 為 "LIFEI1"

SQL> conn system/lifei23;

已連接。

SQL> grant connect  to lifei1;

 

授權成功。

 

SQL> revoke connect from lifei1;

 

撤銷成功。

 

SQL> grant connect to lifei1 with admin option;

 

授權成功。

 

SQL> conn lifei1/lifei1;

已連接。

SQL> revoke connect from system

  2  

SQL> revoke connect from system;

revoke connect from system

*

第 行出現錯誤:

ORA-01951: ROLE 'CONNECT' 未授予 'SYSTEM'

 

事實證明  系統管理員的 開門的權限是 無法被剝奪的。

 

1擁有表,1把權限給了2 with grant option2把權限給了3with grant option。當1收回2的權限時,也不再可以查看   1的表了。

 

這個里面有知識點: 對於 大門的權限 可以傳遞 收回了,傳遞出去的依然具有權限。但是 對於查看表的權限,依然可以傳遞,但是 一旦從一個 人那里收回了,傳遞出去的人也不再 不可以 查看了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM