準備數據:
賦予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-創建表空間-本地管理:該區每個數據文件保留一個位圖,跟蹤記錄塊的使用狀態,空閒狀態。每個位對象一個/組塊。
字典管理用於老舊版本中,現在一般採用本地管理。
Oracle 數據庫對象
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.