創建與管理表

創建與管理表
以上幾次總結中我主要介紹了Oracle的查詢操作及組函數、group by字句 having子句等基本內容這一節我將繼續介紹Oracle表的一些基本概念及使用方式,希望能夠對學習數據庫同學有所幫助,以後我將會繼續總結oracle的一些知識,總結的知識內容自認爲比較全面、實用,希望大家能夠有所收益。下面我們來學習oracle的用戶、模式和表。
Oracle是通過“模式”來組織和管理這些數據庫對象的。Oracle系統中的模式是一系列邏輯數據結構或對象的集合,一個模式只能夠被一個數據庫用戶所擁有,並且模式名稱與該用戶的名稱相同。

數據庫中對象包括:表、視圖、索引、序列、同義詞等。
 表:基本的數據存儲的集合,由行與列組成
 視圖:從表中抽出的邏輯上相關的數據集合。
 序列: 提供有規律的數值
 索引:提高查詢效率
 同義詞:給對象起的別名。

Oracle數據庫中的表
1、 用戶自定義表
表名和列名的命名規範:
 必須以字母開頭
 必須在 1–30 個字符之間
 必須只能包含 A–Z, a–z, 0–9, _, $, 和 #
 必須不能和用戶定義的其他對象重名
 必須不能是Oracle 的保留字

創建表必須具備的條件:
 必須具備:
CREATE TABLE權限
存儲空間
 必須指定:
表名
列名, 數據類型, 尺寸

創建表的語法
CREATE TABLE [schema.]table
(column datatype [DEFAULT expr][, ...]);

數據類型如下:

數據類型 描述
VARCHAR2(size) 可變長字符數據
CHAR(size) 定長字符數據
NUMBER(p,s) 可變長數值數據
DATE 日期型數據
LONG 可變長字符數據,最大可達到2G
CLOB 字符數據,最大可達到4G
RAW (LONG RAW) 原始的二進制數據
BLOB 二進制數據,最大可達到4G
BFILE 存儲外部文件的二進制數據,最大可達到4G
ROWID 行地址


創建表的分析:
在數據庫中必須遵循一定的規範 這些規範稱爲範式.目前關係數據庫有6種方式,數據庫只需要滿足3NF即可,需要使用範式對數據庫中表進行處理.

下面我以學生信息爲例分析:
學號,學生姓名,出生日期,學生性別,所屬班級,所屬院系,系主任姓名,課程編號,成績.
分析:
學號:sid 數據類型 varchar2
學生姓名:sname
出生日期:sbirth date
學生性別:ssex
所屬班級:sclass
所屬院系:sdep
系主任姓名:dname
課程編號:cid
成績 grade number(5,2)
創建學生信息表
根據如上信息可以創建存儲的表 學生信息表 包含醫以上的全部信息,但非規範。

分析設計過程:
必須滿足3NF範式 但前提必須滿足1,2NF
1、 屬性不可再分(1NF) ==一對多關係
學生信息表:Sid,sname,sbirth,ssex,sclass,sdep,dname
成績表: sid cid grade
2、 (前提必須滿足1NF )表中的所有非主屬性都完全依賴於任一候選鍵。
Sid->Sname
sid->sbirth
sid->ssex
sid->sclass
sdep->dname
--其他普通屬性不應當存在部分依賴於主要屬性->此普通屬性應當被分離到新的表中去
s(sid,sname,sbirth,ssex,sclass,sdep)
d(sdep,dname)
g(sid,cid,grade)


3、 (前提滿足2NF)表中的每一個非主屬性都不傳遞依賴於任何候選鍵。

s(sid,sname,sbirth,ssex,sclass,sdep)
d(sdep,dname)
g(sid,cid,grade)

在滿足2NF後 分析:
Sid->sclass
Sclass->sdep
Sid->sdep
s(sid,sname,sbirth,ssex,sclass)
cd(sclass,sdep)
d(sdep,dname)
g(sid,cid,grade)

2、 Oracle數據字典
2.1查詢用戶自定義表
//查詢用戶定義的表的名稱
SQL> select table_name from user_tables;
//查詢用戶自定表的詳細特徵
SQL> select * from user_tables
//等效於
SQL> select * from tabs;

2.2查詢用戶定義的各種數據庫對象
SQL> select distinct object_type from user_objects;
OBJECT_TYPE
-------------------
INDEX PARTITION
SEQUENCE
QUEUE
TABLE PARTITION
PROCEDURE
LOB
PACKAGE
PACKAGE BODY
TRIGGER
SYNONYM
TABLE
INDEX
VIEW
TYPE

14 rows selected
2.3 查看用戶定義的表、視圖、序列和同義詞
SQL> select * from user_catalog;

TABLE_NAME TABLE_TYPE
------------------------------ -----------
USESS TABLE
ABC TABLE
DEPT TABLE
EMP TABLE
SALGRADE TABLE
PRODUCT_SEQ SEQUENCE
ORDERS_SEQ SEQUENCE
ORDERITEM_SEQ SEQUENCE
USERS TABLE
PRODUCT TABLE
ORDERS TABLE
ORDERITEM TABLE
TMP TABLE
PAGES TABLE
STUDENT TABLE
COURSE TABLE
SC TABLE
TEST TABLE

18 rows selected
用戶自定表詳解
使用 ALTER TABLE 語句可以:
 追加新的列
 修改現有的列
 爲新追加的列定義默認值
 刪除一個列
使用 ALTER TABLE 語句追加, 修改, 或刪除列的語法.
追加
ALTER TABLE table
ADD (column datatype [DEFAULT expr]
[, column datatype]...);
修改
ALTER TABLE table
MODIFY (column datatype [DEFAULT expr]
[, column datatype]...);

刪除
ALTER TABLE table
DROP column (column_name);

修改列的名稱
ALTER TABLE table_name rename column old_column_name
to new_column_name


案例:
//採用子查詢創建customer表 表的結構域users表完全一致
SQL> create table customer as select * from users;
Table created
SQL> commit; //事務提交
Commit complete
//爲customer表添加新的列 email 類型varchar2(20).
SQL> alter table customer add email varchar2(20);//追加
Table altered
SQL> commit;
SQL> desc customer;
Name Type Nullable Default Comments
-------- ------------ -------- ------- --------
USERNAME VARCHAR2(20) Y
PASSWORD VARCHAR2(20)
NAME VARCHAR2(20)
ADDRESS VARCHAR2(20) Y
ZIP NUMBER(6) Y
EMAIL VARCHAR2(20) Y
//修改某個字段的類型
SQL> alter table customer modify email number(4);//修改

Table altered

SQL> commit;

Commit complete

SQL> desc customer;
Name Type Nullable Default Comments
-------- ------------ -------- ------- --------
USERNAME VARCHAR2(20) Y
PASSWORD VARCHAR2(20)
NAME VARCHAR2(20)
ADDRESS VARCHAR2(20) Y
ZIP NUMBER(6) Y
EMAIL NUMBER(4) Y
//刪除某個字段
SQL> alter table customer drop column email;
Table altered
SQL> commit;
Commit complete
SQL> select * from customer;
//修改表的某個字段的名稱
SQL> alter table customer rename column address to addr;
Table altered
SQL> commit;

刪除表
 數據和結構都被刪除
 所有正在運行的相關事物被提交
 所有相關索引被刪除
 DROP TABLE 語句不能回滾
修改對象的名稱
 執行RENAME語句改變表, 視圖, 序列, 或同義詞的名稱
 必須是對象的擁有者
//修改對象的名稱操作
SQL> rename customer to customers;
清空表
 TRUNCATE TABLE 語句:
刪除表中所有的數據
釋放表的存儲空間
 TRUNCATE語句不能回滾
 可以使用 DELETE 語句刪除數據
//清空表的操作
SQL> truncate table customers;

總結:您已經學會如何使用DDL語句創建, 修改, 刪除, 和重命名錶.
語句 描述
CREATE TABLE 創建表
ALTER TABLE 修改表結構
DROP TABLE 刪除表
RENAME 重命名錶
TRUNCATE 刪除表中的所有數據,並釋放存儲空間


Oracle數據庫中的視圖
視圖是從一個表或多個表中導出的虛表,它與常規表不同之處在於它並不存儲數據—它只是在一個存儲的查詢中定義.視圖同真實表一樣,也包含一系列帶有名稱的列和數據。

視圖建立在已有表的基礎上, 視圖賴以建立的這些表稱爲基表。
向視圖提供數據內容的語句爲 SELECT 語句, 可以將視圖理解爲存儲起來的 SELECT 語句.
視圖向用戶提供基表數據的另一種表現形式

視圖分爲簡單視圖和複雜視圖

簡單視圖:
所謂簡單的視圖是隻引用一個表,並且它只從基礎表中檢索數據,不允許修改其中的數據;
複雜的視圖是引用多個表,視圖越複雜、視圖內再查詢的表達式就越多越複雜.
創建視圖的語法:
CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view
[(alias[, alias]...)]
AS subquery
[WITH CHECK OPTION [CONSTRAINT constraint]]
[WITH READ ONLY [CONSTRAINT constraint]];

注意:在創建視圖時應先賦予創建視圖的權限,create view或create any view權限
//切換到管理員然後賦予權限(兩種賦予權限的方法)
SQL> grant create any view to dxl;
SQL> grant create view to dxl;

爲什麼使用視圖?
控制數據訪問:提供了一種安全機制,通過視圖顯示數據時,屏蔽用戶不應該知道的數據.
簡化查詢:select語句構造了一個複雜的查詢語句,每次使用必須都得調用它,根據複雜查詢的語句創建一個視圖,來簡化查詢。

//創建視圖時在子查詢中給列定義別名
SQL> create view usersview as select username name,password pass from users;
//查詢視圖
SQL> select * from usersview;
//檢索視圖的定義
SQL> select * from user_views;

複雜視圖:

是通過多個表的連接查詢獲得的,又稱爲連接視圖
//創建複雜視圖(創建兩個表的視圖 dept和emp表)
//需要查詢出兩個表的所有字段(使用內連接查詢)然後再根據整合後的字段創建視圖
SQL> create view empdept as (select e.*,d.dname,d.loc from emp e inner join dept d on e.deptno=d.deptno);

修改視圖CREATE OR REPLACE VIEW 子句
SQL> create or replace view usersview as(select * from users);
//創建帶有函數,group by子句的視圖
SQL> create or replace view gde as ( select deptno,count(*) cou from emp group by deptno);
//創建連接視圖 帶有函數 group by子句 order by 子句
SQL> create view gdeo as select e.deptno,count(*) cou from emp e inner join dept d on e.deptno=d.deptno group by e.deptno order by e.deptno;
//在上面的基礎上帶有having子句
SQL> create view gdeoh as select e.deptno,count(*) cou from emp e inner join dept d on e.deptno=d.deptno group by e.deptno having count(*)>3 order by e.deptno;
SQL> create or replace view gdea as(select deptno,count(*) cou from emp group by deptno having count(*)>3 order by deptno);//這個是錯誤的 不能加括號 語法錯誤


刪除視圖的操作
Drop view 視圖名;

Oracle數據庫中的序列
序列: 是oacle提供的用於產生一系列唯一數字的數據庫對象。
 自動提供唯一的數值
 共享對象
 主要用於提供主鍵值
 將序列值裝入內存可以提高訪問效率
創建序列:
要有創建序列的權限 create sequence 或 create any sequence
創建序列的語法
CREATE SEQUENCE sequence //創建序列名稱
[INCREMENT BY n] //遞增的序列值是n 如果n是正數就遞增,如果是負數就遞減 默認是1
[START WITH n] //開始的值,遞增默認是minvalue 遞減是maxvalue
[{MAXVALUE n | NOMAXVALUE}] //最大值
[{MINVALUE n | NOMINVALUE}] //最小值
[{CYCLE | NOCYCLE}] //循環/不循環
[{CACHE n | NOCACHE}];//分配並存入到內存中

NEXTVAL 返回序列中下一個有效的值,任何用戶都可以引用
CURRVAL 中存放序列的當前值
NEXTVAL 應在 CURRVAL 之前指定 ,二者應同時有效

SQL> create sequence seq increment by 2 start with 1 maxvalue 10 minvalue 1 nocycle nocache;
Sequence created

修改序列
修改序列的增量, 最大值, 最小值, 循環選項, 或是否裝入內存
修改序列語法:
alter SEQUENCE sequence //創建序列名稱
[INCREMENT BY n] //遞增的序列值是n 如果n是正數就遞增,如果是負數就遞減 默認是1
[START WITH n] //開始的值,遞增默認是minvalue 遞減是maxvalue
[{MAXVALUE n | NOMAXVALUE}] //最大值
[{MINVALUE n | NOMINVALUE}] //最小值
[{CYCLE | NOCYCLE}] //循環/不循環
[{CACHE n | NOCACHE}];//分配並存入到內存中
修改序列的注意事項:
 必須是序列的擁有者或對序列有 ALTER 權限
 只有將來的序列值會被改變
 改變序列的初始值只能通過刪除序列之後重建序列的方法實現
刪除序列
 使用DROP SEQUENCE 語句刪除序列
 刪除之後,序列不能再次被引用
SQL> alter sequence seq increment by 2 maxvalue 5 nocycle nocache;
Sequence altered
Oracle數據庫中的同義詞
同義詞是表、索引、視圖等模式的一個別名。同義詞只在Oracle數據庫字典中保存其定義描述,因此同義詞並不佔用任何實際的存儲空間。
Oracle中同義詞分爲兩種類型:共有同義詞和私有同義詞。
共有同義詞在數據庫中所有的用戶都可以使用
私有同義詞由創建它的用戶所擁有
語法格式:
CREATE [PUBLIC] SYNONYM synonym_name FOR schema_oject
//創建同義詞
SQL> create public synonym merch_info for emp;
Synonym created
//刪除同義詞
SQL> drop public synonym merch_info;
Synonym dropped
//若定義爲公有同義詞 刪除時必須添加關鍵詞public
SQL> drop synonym merch_info;
drop synonym merch_info
ORA-01434: 要刪除的專用同義詞不存在
//查看同義詞的信息
SQL> desc dba_synonyms;
Name Type Nullable Default Comments
------------ ------------- -------- ------- --------------------------------------------------------
OWNER VARCHAR2(30) Username of the owner of the synonym
SYNONYM_NAME VARCHAR2(30) Name of the synonym
TABLE_OWNER VARCHAR2(30) Y Owner of the object referenced by the synonym
TABLE_NAME VARCHAR2(30) Name of the object referenced by the synonym
DB_LINK VARCHAR2(128) Y Name of the database link referenced in a remote synonym
以上是除索引外的所有數據庫對象,索引將在下一篇文章中詳細講解,請查看下篇文章…
發佈了4 篇原創文章 · 獲贊 1 · 訪問量 2388
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章