一、建立資料庫及模式
-- 建立示例資料庫
create tablespace BOOKSHOP datafile 'BOOKSHOP.dbf' size 150;
-- 建立模式
create schema resources authorization sysdba;
/
create schema person authorization sysdba;
/
create schema sales authorization sysdba;
/
create schema production authorization sysdba;
/
create schema purchasing authorization sysdba;
/
create schema other authorization sysdba;
/
1、表空間
在 DM 資料庫中,表空間由一個或者多個資料檔案組成。DM 資料庫中的所有對象在邏輯上都存放在表空間中,而實體上都存儲在所屬表空間的資料檔案中。在建立 DM 資料庫時,會自動建立 5 個表空間:SYSTEM 表空間、ROLL 表空間、MAIN表空間、TEMP 表空間和 HMAIN 表空間。
1. SYSTEM 表空間存放了有關 DM 資料庫的字典資訊,使用者不能在 SYSTEM 表空間建立表和索引。
2. ROLL 表空間完全由 DM 資料庫自動維護,使用者無需幹預。該表空間用來存放事務運作過程中執行 DML 操作之前的值,進而為通路該表的其他使用者提供表資料的讀一緻性視圖。
3. MAIN 表空間在初始化庫的時候,就會自動建立一個大小為 128M 的資料檔案MAIN.DBF。在建立使用者時,如果沒有指定預設表空間,則系統自動指定 MAIN 表空間為使用者預設的表空間。
4. TEMP 表空間完全由 DM 資料庫自動維護。當使用者的 SQL 語句需要磁盤空間來完成某個操作時,DM 資料庫會從 TEMP 表空間配置設定臨時段。如建立索引、無法在記憶體中完成的排序操作、SQL 語句中間結果集以及使用者建立的臨時表等都會使用到 TEMP表空間。
5. HMAIN 表空間屬于 HTS 表空間,完全由 DM 資料庫自動維護,使用者無需幹涉。當使用者在建立 HUGE 表時,未指定 HTS 表空間的情況下,充當預設 HTS 表空間。
每一個使用者都有一個預設的表空間。對于 SYS、SYSSSO、SYSAUDITOR 系統使用者,預設的使用者表空間是 SYSTEM,SYSDBA 的預設表空間為 MAIN,新建立的使用者如果沒有指定預設表空間,則系統自動指定 MAIN 表空間為使用者預設的表空間。如果使用者在建立表的時候,指定了存儲表空間 A,并且和目前使用者的預設表空間 B 不一緻時,表存儲在使用者指定的表空間 A 中,并且預設情況下,在這張表上面建立的索引也将存儲在 A 中,但是使用者的預設表空間是不變的,仍為 B。一般情況下,建議使用者自己建立一個表空間來存放業務資料,或者将資料存放在預設的使用者表空間 MAIN 中。
SYSTEM、ROLL、MAIN 和 TEMP 表空間檢視語句:
SELECT * FROM V$TABLESPACE;
HMAIN 表空間檢視語句:
SELECT * FROM V$HUGE_TABLESPACE;
2、模式
使用者的模式(SCHEMA)指的是使用者賬号擁有的對象集,在概念上可将其看作是包含表、視圖、索引和權限定義的對象。在 DM 中,一個使用者可以建立多個模式,一個模式中的對象(表、視圖等)可以被多個使用者使用。模式不是嚴格分離的,一個使用者可以通路他所連接配接的資料庫中有權限通路的任意模式中的對象。系統為每一個使用者自動建立了一個與使用者名同名的模式作為其預設模式,使用者還可以用模式定義語句建立其它模式。
采用模式的原因有幾點:
1. 允許多個使用者使用一個資料庫而不會幹擾其它使用者;
2. 把資料庫對象組織成邏輯組,讓它們更便于管理;
3. 第三方的應用可以放在不同的模式中,這樣可以避免和其它對象的名字沖突。模式類似于作業系統層次的目錄,隻不過模式不能嵌套。
DM 模式可以通過 SQL 語句進行操作。DM 模式主要包含以下的模式對象:
1. 表;
2. 視圖;
3. 索引;
4. 觸發器;
5. 存儲過程/函數;
6. 序列;
7. 全文索引;
8. 包;
9. 同義詞;
10. 類;
11. 外部連結。
在引用模式對象的時候,一般要在模式對象名前面加上模式名。具體格式如下:
[模式名].對象名
當然,在目前模式和要引用的模式對象所屬的模式相同時,可以省略模式名。如果我們通路一個表時,沒有指明該表屬于哪一個模式,系統就會自動給我們在表前加上預設的模式名。類似地,如果我們在建立對象時不指定該對象的模式,則該對象的模式為使用者的預設模式。模式對象之外的其他對象統一稱為非模式對象,非模式對象主要包括以下幾種對象:
1. 使用者;
2. 角色;
3. 權限;
4. 表空間。
二、建立表
set schema XXX ; -- 指定模式
-- 設定目前模式為 person
SET SCHEMA person;
-- 建立表
-- create address
drop table if exists person.address;
create table person.address(
addressid int identity(1,1) primary key,
address1 varchar(60) not null default '預設位址',
address2 varchar(60),
city varchar(30) not null,
postalcode varchar(15) not null
) storage (on BOOKSHOP);
comment ON table person.address is '位址表';
comment ON column person.address.addressid is '位址id';
comment ON column person.address.address1 is '位址1';
comment ON column person.address.address2 is '位址2';
comment ON column person.address.city is '城市';
comment ON column person.address.postalcode is '郵編';
drop table if exists person.address_type;
-- create address_type
create table person.address_type(
address_typeid int identity(1,1) primary key,
name varchar(50) not null
)storage (on bookshop);
-- create person
create table person.person(
personid int identity(1,1) cluster primary key,
sex char(1) not null,
name varchar(50) not null,
email varchar(50),
phone varchar(25)
) storage (on BOOKSHOP);
-- create person_type
create table person.person_type(
person_typeid int identity(1,1) primary key,
name varchar(256) not null
) storage (on BOOKSHOP);
三、初始化資料
DM資料庫存在閃回操作,是以每次的DML操作會加入到事務中,我們可以對其進行rollback或者commit;
set schema person;
-- insert person_type
insert into person_type(name)
values('采購經理'),
('采購代表'),
('銷售經理'),
('銷售代表');
-- insert person
insert into person(sex,name,email,phone)
values('F','李 麗','[email protected]','02788548562'),
('M','王 剛','','02787584562'),
('M','李 勇','','02782585462'),
('F','郭 豔','','02787785462');
INSERT INTO PERSON.PERSON(SEX,NAME,EMAIL,PHONE) VALUES('F',' 孫 麗
','','13055173012');
INSERT INTO PERSON.PERSON(SEX,NAME,EMAIL,PHONE) VALUES('M',' 黃 非
','','13355173012');
INSERT INTO PERSON.PERSON(SEX,NAME,EMAIL,PHONE) VALUES('F',' 王 菲
','','13255173012');
INSERT INTO PERSON.PERSON(SEX,NAME,EMAIL,PHONE) VALUES('M',' 張 平
','','13455173012');
INSERT INTO PERSON.PERSON(SEX,NAME,EMAIL,PHONE) VALUES('M',' 張 紅
','','13555173012');
INSERT INTO PERSON.PERSON(SEX,NAME,EMAIL,PHONE) VALUES('F',' 劉 佳
','','13955173012');
INSERT INTO PERSON.PERSON(SEX,NAME,EMAIL,PHONE) VALUES('F',' 王 南
','','15955173012');
INSERT INTO PERSON.PERSON(SEX,NAME,EMAIL,PHONE) VALUES('F',' 李 飛
','','15954173012');
INSERT INTO PERSON.PERSON(SEX,NAME,EMAIL,PHONE) VALUES('F',' 張大海
','','15955673012');
INSERT INTO PERSON.PERSON(SEX,NAME,EMAIL,PHONE) VALUES('F',' 王宇軒
','','15955175012');
INSERT INTO PERSON.PERSON(SEX,NAME,EMAIL,PHONE) VALUES('F',' 桑澤恩
','','15955173024');
INSERT INTO PERSON.PERSON(SEX,NAME,EMAIL,PHONE) VALUES('F',' 劉 青
','','15955173055');
INSERT INTO PERSON.PERSON(SEX,NAME,PHONE) VALUES('F',' 楊鳳蘭
','02785584662');
--insert address_type
insert into address_type(name) values('發貨位址');
INSERT INTO ADDRESS_TYPE(NAME) VALUES('送貨位址');
insert into person.address_type(name)
values('家庭位址'),('公司位址');
-- 插入資料
-- insert address
insert into person.address(address1,address2,city,postalcode)
values('洪山區 369 号金地太陽城 56-1-202','','武漢市洪山區','430073'),
('青山區青翠苑 1 号','','武漢市青山區','430080'),
('武昌區武船新村 115 号','','武漢市武昌區','430063'),
('漢陽大道熊家灣 15 号','','武漢市漢陽區','430050');
INSERT INTO PERSON.ADDRESS(ADDRESS1,ADDRESS2,CITY,POSTALCODE) VALUES('洪山
區保利花園 50-1-304','','武漢市洪山區','430073');
INSERT INTO PERSON.ADDRESS(ADDRESS1,ADDRESS2,CITY,POSTALCODE) VALUES('洪山
區關山春曉 51-1-702','','武漢市洪山區','430073');
INSERT INTO PERSON.ADDRESS(ADDRESS1,ADDRESS2,CITY,POSTALCODE) VALUES('江漢
區發展大道 561 号','','武漢市江漢區','430023');
INSERT INTO PERSON.ADDRESS(ADDRESS1,ADDRESS2,CITY,POSTALCODE) VALUES('武昌
區武船新村 1 号','','武漢市武昌區','430063');
INSERT INTO PERSON.ADDRESS(ADDRESS1,ADDRESS2,CITY,POSTALCODE) VALUES('洪山
區關山春曉 55-1-202','','武漢市洪山區','430073');
INSERT INTO PERSON.ADDRESS(ADDRESS1,ADDRESS2,CITY,POSTALCODE) VALUES('洪山
區光谷軟體園 C1_501','','武漢市洪山區','430073');
commit;