java索引序列_视图、序列、索引
視圖
視圖(VIEW)也被稱作虛表,即虛擬的表,是一組數據的邏輯表示。
視圖對應于一個SELECT語句,結果集被賦予一個名字,即視圖名字。
視圖本身并不包含任何數據,它只包含映射到基表的一個查詢語句,當基表數據發生變化,視圖數據也隨之變化。
使用視圖的兩種情況:
使用的查詢基于非常復雜的查詢之上。
查詢的時候希望屏蔽數據庫中真實的字段名和數據
CREATE [OR REPLAC] VIEW view_name[(alias[, alias...])] AS subquery [WITH CHECK OPTION];
視圖創建后,主要是查詢Subquery是SELECT查詢語句,對應的表稱為基表。
根據所對應的子查詢種類分為:簡單視圖,復雜視圖,連接視圖。
先根據我們需要查詢的視圖所對應的SQL將數據檢索出來,然后再根據我們對視圖查詢的需求,檢索視圖查詢出來的數據,所以使用視圖是兩次查詢。
極其不推薦對視圖進行DML操作
視圖中沒有出現的字段,插入的時候都為NULL,所以有非空約束的時候,插入失敗。
WITH CHECK OPTION具有檢查約束的功能。
還可以創建只讀視圖。
CREATE [OR REPLAC] VIEW view_name[(alias[, alias...])] AS subquery [WITH CHECK OPTION];
創建復雜視圖必須為子查詢的表達式或函數定義別名。
刪除視圖:DROP VIEW view_name;
通過查詢user_views獲取相關信息
和視圖相關的數據字典:
USER_OBJECTS 保存用戶的所有數據庫對象,表,視圖,索引,序列等
USER_VIEWS 保存了用戶所創建的視圖
USER_UPDATE_COLUMNS
MySQL的字典不同。
序列
序列(SEQUENCE)是一種用來生成唯一數字值的數據庫對象;通常我們用來生成主鍵。
序列是獨立的數據庫對象,和表是獨立的對象,序列并不依附于表;
通常情況下,一個序列為一個表提供主鍵值,但一個序列也可以為多個表提供主鍵值。盡可能不要共用,避免主鍵斷裂。
CREATE SEQUENCE [schema.]sequence_name
[START WITH i] [INCREMENT BY j]
[MAXVALUE m|NOMAXVALUE]
[MIN VALUE n|NOMIN VALUE]
[CYCLE|NOCYCLE][CACHE p|NOCACHE]
CREATE SEQUENCE emp_seq START WITH 100 INCREMENT BY 10;
sequence_name是序列名,將創建在schema方案下;
序列的第一個序列值是i ,步進是j;
如果j是正數,表示遞增,如果是負數,表示遞減。
START WITH默認值是1,INCREMENT BY默認值是1,NOCYCLE默認,CACHE默認開啟,默認值是20;
**MySQL自增長與Oracle序列的區別:
自增長只能用于表中的其中一個字段
自增長只能被分配給固定表的固定的某一字段,不能被多個表共用.
自增長會把一個未指定或NULL值的字段自動填上.
mysql的AUTO_INCREMENT可以設置起始值,但是不能設置步長,其步長默認就是1. **
序列有兩種偽列:
NEXTVAL:獲取序列的下一個值;
CURRVAL:獲取序列的當前值;
注意,序列創建以后,必須先執行一次NEXTVAL才能使用CURRVAL。
刪除序列:
DROP SEQUENCE sequence_name;
索引
索引是用來加快對某一張表的查詢效率的。
CREATE [UNIQUE] INDEX index.name ON table_name(column[, column...]);
index_name表示索引名稱
table_name表示表名
column表示列名,可以建立單列索引或復合索引,也可以是函數。
UNIQUES表示唯一索引
CREATE INDEX idx_emp_ename ON emp(ename);
CREATE INDEX idx_emp_job_sal ON emp(job,sal);
CREATE INDEX idx_emp_ename_upper ON emp(UPPER(ename));
查詢的時候自動使用索引。
修改重建索引:
ALTER INDEX index_name REBUILD;
刪除索引:
DROP INDEX index_name;
合理使用索引提升查詢效率:
為經常出現在WHERE子句中的列創建索引
為經常出現在ORDER BY、DISTINCT后面的字段建立索引。如果建立的是復合索引,索引的字段順序要和這些關鍵字后面的字段順序一致
為經常作為表的連接條件的列上創建索引
不要在經常做DML操作的表上建立索引
不要在小表上建立索引
限制表上的索引數目,索引并不是越多越好
刪除很少被使用的、不合理的索引
數據訪問很頻繁,檢索所占的比重占2%~4%,宜加索引
檢索的字段有大量的null時
約束
約束(CONSTRAINT)的全稱是約束條件,也稱作完整性約束條件。
約束條件包括:
非空約束(Not Null),簡稱NN
唯一性約束(Unique),簡稱UK
主鍵約束(Primary Key),簡稱PK
外鍵約束(Foreign Key),簡稱FK
檢查約束(Check),簡稱CK
非空約束
建表是添加NOT NULL,NOT NULL只能在聲明和修改時設置非空約束。
可以如下方法添加:
CREATE TABLE employees(
eid INT(6),
name VARCHAR(30) NOT NULL,
salary FLOAT(7,2),
hiredate DATE
CONSTRAINT employees_hiredate_nn NOT NULL
);
NOT NULL是列級約束,在聲明列的同時加的約束。
表級約束:單獨定義的約束(定義列之后)。
修改表是添加非空約束:
可以通過修改表的定義,添加非空約束:
ALTER TABLE employees MODIFY eid INT(6) NOT NULL;
取消非空約束:
ALTER TABLE employees MODIFY eid INT(6) NULL;
唯一性約束
唯一性(Unique)保證字段不出現重復值。
允許有NULL,唯一性可以是列級,也可以是表級。null不是任何值,可以有多個null。
CREATE TABLE employees(
--以下是列級約束
eid INT(6) UNIQUE,
name VARCHAR(30),
email VARCHAR(50),
salary FLOAT(7,2),
hiredate DATE,
--以下是表級約束
CONSTRAINT employees_email_uk UNIQUE(email)
);
NOT NULL是列級約束,列級約束只能設置一個,所以列級的時候設置NOT NULL,再將UNIQUE設置為表級約束
建表后添加唯一性約束條件:
ALTER TABLE employees ADD CONSTRAINT employees_name_uk UNIQUE(name);
主鍵約束
主鍵(Primary Key)約束條件非空 (NUT NULL)且唯一(UNIQUE),一個表只允許一個主鍵約束。
主鍵應是對系統無意義的數據;
主鍵不應該包含動態變化的數據,如時間戳;
主鍵應自動生成,不要人為干預,以免使它帶有除了唯一標識一行以外的意義;
常見的主鍵生成的形式:序列,UUID,
ORACLE生成UUID
SELECT sys_guid() FROM DUAL;
INSERT INTO emp VALUES(sys_guid(),'xxxx'....);
添加主鍵約束:
CREATE TABLE employees2(
eid INT(6) PRIMARY KEY,
name VARCHAR(30));
也可以采用表級約束:
CONSTRAINT employees2_eid_pk PRIMARY KEY(eid);
添加主鍵約束:
ALTER TABLE employees3 ADD CONSTRAINT
employees_eid_pk PRIMARY KEY(eid);
外鍵約束
外鍵保存的是另一張表的主鍵。
有外鍵的是子表或從表,對應的表就是父表或者成為主表。
CREATE TABLE employees4(
eid INT(6),
name VARCHAR(30),
deptno INT(4),
CONSTRAINT employees4_deptno_fk
FOREIGN KEY(deptno) #本表的字段
REFERENCES dept(deptno) #主表的主鍵
);
關聯不一定需要外鍵約束:
保證數據完整性可以由程序或觸發器控制
簡化開發,維護數據時不用考慮外鍵約束
大量數據DML操作時不需考慮外鍵耗費時間
檢查約束
檢查(Check)約束條件用來強制在字段上的每個值都要滿足Check中定義的條件。
例如:
ALTER TABLE employees4
ADD CONSTRAINT employees4_salary_check
CHECK(salary > 2000);
CHECK括號中表達是必須是一個Boolean表達式
多對多
兩張表要想形成多對多關系,要引入一張關聯關系表。關聯關系表不需要主鍵。只需要兩個字段,分別記錄兩張表的主鍵。
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的java索引序列_视图、序列、索引的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 看淡一切的网名159个
- 下一篇: 奇葩网名越怪越好83个