(二).約束關鍵字,約束課堂SQL
阿新 • • 發佈:2018-12-29
constraint 約束
PRIMARY 主要的
UNIQUE 獨一無二的
CHECK 檢查,核對
FOREIGN 外交的
KEY 關鍵字
REFERENCES 把...引做參考
約束
什麼是約束?
約束就是為了完成資料庫中資料的完整性與一致性的一種檢查機制
通過定義在資料庫中的表來完成約束條件
有哪些約束?
- 主鍵約束 PRIMARY KEY 唯一加非空
–作用:識別一個行
–要求:在給一個列建立主鍵時不能重複不能為空
注意:推薦使用無意義且有序的數字作為主鍵,例如1,2,3,4....一張表只能有一個主鍵 SELECT * FROM STUDENT;
建表後加上主鍵約束
ALTER TABLE STUDENT ADD CONSTRAINT PK_STU_ID PRIMARY KEY (ST_ID);
更新主鍵使其符合約束條件
UPDATE STUDENT SET ST_ID=7 WHERE ST_NAME ='娜娜'; INSERT INTO STUDENT(ST_ID) VALUES(8); CREATE TABLE T_USER( T_ID NUMBER(4), --PRIMARY KEY,--CONSTRAINT PK_USER_ID PRIMARY KEY,--行級定義 T_NAME VARCHAR2(20), CONSTRAINT PK_USER_ID PRIMARY KEY(T_ID) --表級定義 ) SELECT * FROM T_USER;
2.唯一約束 UNIQUE
作用:確保被指定的欄位每行資料不重複,可以為空
建表後建立
ALTER TABLE STUDENT ADD CONSTRAINT UN_STU_NAME UNIQUE(ST_NAME);
建表時建立
CREATE TABLE T_USER(
T_ID NUMBER(4),
T_NAME VARCHAR2(20),--UNIQUE, CONSTRAINT UN_USER_NAME UNIQUE 行級定義
CONSTRAINT UN_USER_ID UNIQUE(ST_NAME) --表級定義
)
3.非空約束
作用:指定欄位必填
建表後建立
ALTER TABLE STUDENT MODIFY ST_NAME NOT NULL;
建表時建立
CREATE TABLE T_USER(
T_ID NUMBER(4),
T_NAME VARCHAR2(20) NOT NULL
)
4.檢查約束(自定義約束) CHECK
–作用:
建表後建立
ALTER TABLE STUDENT ADD CONSTRAINT CK_STU_SEX
CHECK(((ST_SEX='男') OR (ST_SEX='女')) AND (ST_SEX IS NOT NULL));
建表時建立
CREATE TABLE T_USER(
T_ID NUMBER(4),
T_NAME VARCHAR2(20) CHECK(T_NAME='小王子')
)
5.外來鍵約束 FOREIGN KEY
作用:用來強制兩個表關係,該約束要求定義外來鍵中的每個值必須與引用鍵相匹配
外來鍵:從表中引用主表中的引用鍵的列
引用鍵:被外來鍵引用的主鍵或者唯一鍵
CREATE TABLE T_CLASS(
C_ID NUMBER(5),
C_NO NUMBER(5),
C_TEACHER VARCHAR2(20)
)
建唯一鍵
ALTER TABLE T_CLASS ADD CONSTRAINT UN_CLASS_CNO UNIQUE(C_NO);
INSERT INTO T_CLASS VALUES(1,1809,'樑辰');
INSERT INTO T_CLASS VALUES(2,1810,'驚蟄');
CREATE TABLE T_STU(
S_ID NUMBER(5),
S_NAME VARCHAR2(20),
C_NO NUMBER(5)
)
定義外來鍵
ALTER TABLE T_STU ADD CONSTRAINT FK_STU_CNO
FOREIGN KEY (C_NO) REFERENCES T_CLASS(C_NO);
INSERT INTO T_STU VALUES(1,'談笑人生',1810);
INSERT INTO T_STU VALUES(2,'哈哈哈',1810);
INSERT INTO T_STU VALUES(3,'番茄',1809);
INSERT INTO T_STU VALUES(4,‘再也沒有’,1809);
INSERT INTO T_STU VALUES(5,'孫悟空',1811);
SELECT * FROM T_STU;
SELECT * FROM T_CLASS;
DELETE FROM T_STU WHERE S_ID=1;
DELETE FROM T_CLASS WHERE C_ID=1;
級聯關係
--ON DELETE CASCADE (刪除主表資料順帶刪除對應子表整行資料)
ALTER TABLE T_STU ADD CONSTRAINT FK_STU_CNO
FOREIGN KEY (C_NO) REFERENCES T_CLASS(C_NO) ON DELETE CASCADE;
--ON DELETE SET NULL(刪除主表資料把子表對應外來鍵資料設定為NULL)
ALTER TABLE T_STU ADD CONSTRAINT FK_STU_CNO
FOREIGN KEY (C_NO) REFERENCES T_CLASS(C_NO) ON DELETE SET NULL;