Oracle 數據庫對象

準備數據:

賦予scott創建各種資源的權限。
grant resource to scott;

create table staff (id varchar2(2),name varchar2(10),sex varchar2(2),corpid varchar2(2));
insert into staff(id,name,sex,corpid) values('01','李成','男','01');
insert into staff(id,name,sex,corpid) values('02','趙蘭','女','05');
insert into staff(id,name,sex,corpid) values('03','劉豐','男','03');
insert into staff(id,name,sex,corpid) values('04','錢峯山','男','04');
insert into staff(id,name,sex,corpid) values('05','張凱','男','02');
insert into staff(id,name,sex,corpid) values('07','李想','男','04');
insert into staff(id,name,sex,corpid) values('06','劉麗','女','02');
insert into staff(id,name,sex,corpid) values('09','周恆久','男','04');
insert into staff(id,name,sex) values('08','孫小萍','女');

create table corp (id varchar2(2),name varchar2(10));
insert into corp(id,name) values('01','辦公室');
insert into corp(id,name) values('02','財務科');
insert into corp(id,name) values('03','質量科');
insert into corp(id,name) values('04','生產部');
insert into corp(id,name) values('05','銷售部');
insert into corp(id,name) values('06','後勤科');

01、表
⑴定義表
create table student (
    id number(8) primary key,
    name varchar2(20) constraint student_name_nn not null,
    sex number(1) constraint staff_check_sex check(sex=1 or sex=0);
    age number(3),
    register_date date,
    grade number(2) default 1,
    class number(4),
    email varchar2(50)),
    constraint student_name_email_uni unique(email, name)
    constraint student_class_fk foreign key (class) references class(id)
);
 
create table class (
    id number(4) primary key,
    name warchar2(20) not null
);

⑵約束表
列約束,寫在列名後,不能將多個約束聯合起來,只有表級約束可以組合多個約束條件。
五種約束:非空,檢查,唯一,主鍵,外鍵。外鍵約束中被引用的列必須是主鍵。

⑶修改表
alter table add(addr varchar2(100));
alter table student drop (addr);
alter table student modify (addr varchar2(150));
alter table student drop constraint student_pk;
alter table student constraint student_pk primary key(id);
alter table student drop constraint student_class_fk;
alter table student add constraint student_class_fk foreignkey (class) references class(id);

⑷刪除表
drop table student;
刪除後,檢查列表:
select * from tab;
會發現有一些名爲BIN$....==$0 的表,這是10g的新特性“閃回表”。
purge recyclebin;  --用來刪除回收站中所有的表
purge table class; --用來刪除class表
flashback table student to before drop; --用來閃回被刪除的表
drop table student purge;  --徹底刪除表

⑸系統對象
desc dictionary;
select table_name from dictionary where table_name like 'USER%';

desc dba_constraints;
desc all_constraints;
desc user_constraints;
select constraint_name,constraint_type from user_constraints where table_name='STAFF';

desc user_tables;
select table_name from user_tables;

02、索引
添加主鍵約束/唯一約束時自動建立索引
索引,高效讀,低效寫,慎重使用索引

create unique index staff_unique_index on staff(id);
create index idx_student_email on student(email);
drop index idx_student_email;

desc user_indexes;
select index_name from user_indexes;

03、視圖
將常用子查詢創建爲視圖,簡化查詢,保護私有數據;但也增加了維護成本。
create or replace view myview
as
    select empno,ename,job,mgr,sal,comm,deptno from emp where deptno>20;

scott 權限不足,執行本語句前,先賦權限:
grant create view to scott;

執行視圖:
select * from myview;

create or replace view myview
as
    select * from abc where c>10 whith check option ;

帶有check option,則插入數據時,如果c小於10,則不允許插入。


create or replace view scview(id,name,sex,corpid,company)
as
select s.id,s.name,s.sex,c.id,c.name from staff s,corp c where s.corpid=c.id;

在這裏,視圖中不能有重名的列,否則創建失敗。
create or replace view scview
as
select s.id,s.name,s.sex,c.id as corpid,c.name as corp from staff s,corp c where s.corpid=c.id;

只讀視圖
create or replace view staff_ro_view
as
    select id,name from staff with read only ;

存儲視圖對象的系統表:
dba_views;
all_views;
user_views;

desc user_views;
select view_name from user_views;

查看視圖文本,視圖名必須用大寫:
select text from user_views where view_name='STAFF_RO_VIEW' ;

04、同義詞
一個用戶訪問另一個用戶數據對象時,一定要加上用戶名前綴:
select deptno,dname,loc from scott.dept;
爲了使用非前綴形式,需要創建同義詞。同義詞分兩類:
公共同義詞:dba建立
私有同義詞:當前用戶建立(默認)

create synonym dept for scott.dept;
create public synonym t_staff for tom.t_staff;

sys 授權scott創建同義詞
grant create any synonym to scott;

scott爲tom用戶創建同義詞:
create synonym t_staff for tom.t_staff;

sys:創建公共同義詞
drop sysnonym t_staff;
create public synonym t_staff for tom.t_staff;

存儲同義詞的系統表:
desc dba_synonyms
desc user_synonyms;
select synonym_name,table_name,table_owner from user_synonyms;


05、序列
用來產生唯一的不間斷的數字序列,一般用來做主鍵

create sequence myseq
start with 1      --開始,默認爲1
increment by 1 --遞增,默認爲1
order                --排序
nocycle;            --禁止循環

select myseq.nextval from dual;
select myseq.currval from dual;
drop sequence myseq;

使用了nextval之後,currval纔會有效。

create table auto(a number,b varchar2(10));
insert into auto values(myseq.nextval,'test...');

alter sequence myseq increment by 3;
可以修改序列遞增量,不能修改當前值。

desc dba_sequences; /all_sequences/user_sequences
select sequence_name,sequence_owner from dba_sequences where sequence_owner='TOM';


06、表空間
一個表空間對應多個數據文件。
conn / as sysdba;

create tablespace myts
datafile 'c:/oracle/product/10.2.0/oradata/orcl/myts.dbf' size 10M;
alter user tester default tablespace myts;

grant unlimited tablespace,dba to tester;
conn tester/test;

create table tre(t char(10),re number);
create table ty(t char(10),y varchar2(10)) tablespace users;

通過OEM管理:http://localhost:1158/em/
OEM-表空間,編輯myts,myts脫機,用於備份。
OEM—表-方案:TESTER,對象tre/ty,可以檢查它們的表空間。
OEM-創建表空間-本地管理:該區每個數據文件保留一個位圖,跟蹤記錄塊的使用狀態,空閒狀態。每個位對象一個/組塊。
字典管理用於老舊版本中,現在一般採用本地管理。

發佈了44 篇原創文章 · 獲贊 5 · 訪問量 21萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章