日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java索引序列_视图、序列、索引

發布時間:2023/12/3 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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索引序列_视图、序列、索引的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。