數據庫對象
常見:表:存放數據的基本數據庫對象,由行(記錄)和列(字段)組成
約束條件:執行數據校驗,保證數據完整性的系列規則
視圖:表中數據的邏輯顯示
索引:根據表中指定的字段建立起來的順序,用於提高查詢性能
序列:一組有規律的整數值
同義詞:對象的別名
命名:必須以字母開頭。可以包含字母、數據、下劃線、$、#
同一方案(用戶)下的對象不能重名。不能使用Oracle的保留字
補充:Oracle數據庫中的表分為用戶定義的表和數據字典表
用戶定義的表:用戶自己創建並維護的一組表,包含了用戶所需的信息
數據字典表:由Oracle數據庫自動創建並維護的一組表,包含數據庫信息
創建表
概述:創建表需要兩個前提條件,即具備創建表的權限和有可用的存儲空間
創建表時必須指定表名、字段名、字段類型。create table為DDL語句,一經執行不可撤銷
語法:create table [schema.]table(column datatype [default expr][,...]);--缺省是將表創建在當前方案(用戶)下
舉例:create table scott.test1(name varchar2(20),hiredata date default sysdate,salary number(8,2) default 0);
向test1插入新記錄的時候,若沒有指定hiredate值,缺省就會取當前的系統時間。同樣也設置了salsry的缺省值為0
如果插入記錄的時候也沒有指定eid的值,那麼eid的缺省值是null。注意數值型的缺省值不是0,而是null
補充:還可以使用子查詢創建表。這是創建表的另一種方式,但不是很常用。即創建表的同時將子查詢的結果直接插入其中
新建表與子查詢結果的字段列表必須匹配。新建表的字段列表可以缺省,這時字段名就跟子查詢的結果的字段名相同
語法:create table [schema.]table(column[,...]) as subquery;--括號中不可以定義字段類型
舉例:create table myemp2 as select empno,ename,sal*12 from emp;--非法。表達式不可以充當字段,需要指定別名
create table myemp2 as select empno,ename,sal*12 annsal from emp;--合法
create table myemp(編號,姓名,年薪) as select empno,ename,sal*12 from emp;--指定新建表的字段名
修改表結構
概述:使用alter table語句修改表的結構。包括添加、修改、刪除字段。alter語句為DDL語句,一經執行不可撤銷
添加:在alter table語句中使用add子句添加新字段。新字段只能被加到整個表的最後
alter table table add(column datatype [default expr] [column datatype]...);
alter table test1 add(grade number(3),phone varchar2(20) default '無');
修改:在alter table語句中使用modify子句修改現有字段。包括數據類型、大小和默認值。但不可以修改字段名
alter table table modify(column datatype [default expr] [column datatype]...);
alter table test1 modify(grade number(2),phone varchar2(15) default '010-12345678');
修改的缺省值設置,只對此後新插入的記錄有效。修改操作會受到當前表中已有數據的影響
當已有記錄的相應字段只包含空值時,類型和大小都可以修改。如果該字段已包含數值,則修改可能失敗
刪除:在alter table語句中使用drop子句刪除字段。從每行中刪除該字段占據的長度和數據,釋放在數據塊中占用的存儲空間
alter table table drop(column[,column]...);
alter table test1 drop(grade,phone);
清空表數據
概述:使用truncate table可以清空表中數據。清除表中所有記錄,釋放表的存儲空間,它是DDL語句,一經執行不可撤銷
它與DML中的delete語句有很大的差別。delete可以進行條件性的刪除,也可以定義到事務中,對其進行回滾或撤銷
語法:truncate table table;--它清除的並不是表格本身,表的結構還是存在的,只不過變成了一個空表
刪除表
概述:使用drop table語句刪除表,它是DDL語句,一經執行不可撤銷
表中所有數據將被刪除,此前未完成的事務將被提交,所有相關的索引被刪除
語法:drop table table;
重命名表
概述:使用rename語句可以改變現有表的名稱,它是DDL語句,一經執行不可撤銷
也可修改其它數據庫對象(視圖、序列、同義詞等)的名稱。執行重命名操作的必須是對象的所有者
語法:rename old_name to new_name;
舉例:rename test1 to test88;
數據字典
概述:數據字典是Oracle數據庫的核心,用於描述數據庫及其所有對象。數據字典由一系列只讀的表和視圖組成
這些表和視圖屬SYS用戶擁有,由Oracle Server負責維護,用戶可以通過select語句進行訪問
內容:數據庫的物理和邏輯結構。對象的定義和空間分配。完整性約束條件。用戶。角色。權限。審計記錄
視圖:數據字典中的視圖都是只讀的,主要可以分為如下三類
dba(所有方案包含的對象信息)、all(用戶可以訪問的對象信息)、user(用戶方案的對象信息)
舉例:select table_name from user_tables;--查看當前用戶擁有的所有表的名字
select table_name from all_tables;--查看當前用戶可以訪問的所有表的名字
select distinct object_type from user_objects;--查看當前用戶擁有的所有對象的類型
select distinct object_type from all_objects;--返回當前用戶可以查看的所有的對象的類型
select table_name frome dba_tables;--查看所有用戶擁有的所有表的名字
select * from user_constraints;--查看當前方案(用戶)下所有的約束的信息
select * from user_constraints where table_name='student';--查看當前方案(用戶)下的student表中的約束信息
約束(Constraint)
概述:約束是在表上強制執行的數據校驗規則,用於保護數據的完整性
具體包括五種,即not null(非空)、unique key(唯一鍵)、primary key(主鍵)、foreign key(外鍵)、check(檢查)
分類:域完整性約束:not null、check。實體完整性約束:unique、primary key。參照完整性約束:foreign key
說明:約束也是一種數據庫對象。如果創建約束時,用戶沒有指定它的名字,那麼系統會自動的為其命名
在Oracle使用SYS_Cn格式命名約束,也可以由用戶命名。也可以通過數據字典視圖查看約束
可以在建表的同時添加約束,也可以在建表後單獨添加約束。可以在表級或列級定義約束
通常並不太建議在建表之後再添加約束或者建表之後再修改表的結構
查看:查詢用戶字典視圖user_constraints可得到當前用戶的所有約束。即select * from user_constraints;
查詢用戶字典視圖user_cons_columns可獲知約束建立在哪些字段上。即select * from user_cons_columns;
創建:create table [schema.]table(column datatype[default expr][column_constraint],...[table_constraint]);
alter table table add [constraint constraint_name] constraint_type(column);--這是建表後添加約束
比如alter table stu add constraint stu_sid_pk primary key(sid);--原stu表中有sid和name兩個字段
等價alter table stu add primary key(sid);--只不過此時的約束名就會由系統自動設定了
特例:建表後添加約束時,非空約束必須使用modify子句添加。實際上相當於重新定義了某個字段
如alter table stu modify(name not null);或alter table stu modify(name char(8) default 'N/A' not null);
也可以修改多個字段,如alter table stu modify(sid not null,name default 'Stone' not null);
刪除:語法為alter table table drop constraint constraint_name;
alter table table drop primary key;--刪除主鍵的另一種方式。只有主鍵才可以這樣刪除
因為一個表中只可以定義一個主鍵,所以不會有二義性。而其它的約束,都可能定義多個
續一:刪除約束時,若存在與該約束相關聯的其它約束,則刪除操作會失敗。可用cascade子句將其它關聯約束一並刪除
語法為alter table table drop constraint constraint_name cascade;
這個時候一共刪除了兩個約束,一個是主表中的主鍵,一個是子表中的外鍵
續二:刪除表中字段時,若該字段處於多字段聯合約束條件(聯合主鍵、聯合唯一鍵、存在參照當前字段的外鍵)中時
則刪除會失敗。此時可使用cascade constraints子句將與該字段相關的約束一並刪除
語法為alter table table drop(column[,column]...) cascade constraints;
禁用:在alter table中,可使用disable constraint子句禁用已有約束。也可用cascade選項將相關聯的約束也一並刪除
語法為alter table table disable constraint constraint_name [cascade];
禁用跟刪除不同,它還可以啟用。而且約束的具體內容或約束的定義等,還是存在的,只是臨時不起作用了
啟用:在alter table中,可使用enable constraint子句啟用已被禁用的約束
語法為alter table table ena