數字字典表 --查看當前用戶下麵有哪些張表 select * from user_tables; select table_name from user_tables; --查看當前用戶下麵有哪些視圖 select * from user_views; select view_name from u... ...
數字字典表
--查看當前用戶下麵有哪些張表
select * from user_tables;
select table_name from user_tables;
--查看當前用戶下麵有哪些視圖
select * from user_views;
select view_name from user_views;
--查看當前用戶下麵有哪些約束
select * from user_constraints;
select constraint_name from user_constraints;
--查看當前用戶下麵的約束在哪些表上面
select constraint_name, table_name from user_constraints;
--select * from dictionary;
像上面這樣的表被稱作數據字典表,存在dictionary中。
索引
索引的概念
索引是一個資料庫對象,索引就相當於我們字典里那個索引;當為某個欄位建立索引,查詢這個欄位的時候效率就會更高。
需要註意的是,索引的建立只是提供了查詢效率,修改卻更慢了,因為需要附加修改索引表。
什麼時候建索引
查詢某個欄位,訪問量特別大的時候,而且效率比較低的時候,這個時候可以考慮建立索引。但不要輕易建立索引,因為建立所以也會增加而外的維護開銷。
創建索引
--給stu表的email欄位創建索引
create index stu_email_index on stu(email);
刪除索引
--刪除stu表的email欄位的索引stu_email_index
drop index stu_email_index;
序列
序列的概念
create table stu
(
id number(10) ,
...
constraint stu_id_pk primary key(id),
...
);
在創建stu表的時候,我們制定了id作為主鍵,主鍵是唯一的,這就要求每次插入一條記錄,都要插入一個新的id,但是在多線程的環境下同時插入大量記錄,如何保證每次插入的id是不同的,而且這個id應該是有序遞增的?一般資料庫都會提供這樣的機制:專門產生一個獨一無二的數,然後每次自己往上遞增一個1或者指定增量。Oracle里,這種機制稱為序列sequence。sequence是一個對象,可以使用裡面的屬性nextval作為主鍵id的值,這就能保證主鍵id是唯一的。
創建序列
create sequence seq;
select seq.nextval from dual;
--指定增量
create sequence seq2 start with 1 increment by 2;
刪除序列
drop sequence seq;
序列作為主鍵使用
insert into stu(id,name,email) values(seq.nextval,'lisi','[email protected]');
insert into stu(id,name,email) values(seq.nextval,'wangwu','[email protected]');
insert into stu(id,name,email) values(seq.nextval,'chenliu','[email protected]');
三範式
範式的由來
資料庫設計時的一些規則,而這些規則是由一個姓範的人規定的,所以叫範式。
範式的目標
不存在冗餘數據(同樣的數據不存第二遍)。
第一範式
第一範式的要求:1.要有主鍵(設計任何表都要有主鍵) 2.列不可分
第二範式
第二範式的要求:當一張表裡面有多個欄位作為主鍵的時候,非主鍵的這些欄位,不能依賴於部分主鍵。簡單的說:不能存在部分依賴。
第三範式
第三範式的要求:不能存在傳遞依賴(除了主鍵之外的其他欄位必須直接依賴於主鍵)。