一、第一個oracle練習
建表,外鍵約束。
---學生表----
create table STUDENT(
sno NUMBER(4) PRIMARY KEY,
sname VARCHAR2(10),
age NUMBER(4)
);
---班級表---
create table CLASS(
ClassId NUMBER(4) PRIMARY KEY,
cname VARCHAR2(10),
sno NUMBER(4)
);
---成績表-----
create table GRADE(
GRANO NUMBER(4) PRIMARY KEY,
grade NUMBER(10),
sno NUMBER(4) UNIQUE
);
--建立外鍵關係
alter table GRADE add constraint fk_GRADE_SNO foreign key(sno) references STUDENT(sno);
--往學生表加數據
select * from STUDENT;
INSERT INTO STUDENT VALUES (1801,'mark',17);
INSERT INTO STUDENT VALUES (1802,'jack',15);
INSERT INTO STUDENT VALUES (1803,'lily',16);
INSERT INTO STUDENT VALUES (1804,'roy',15);
INSERT INTO STUDENT VALUES (1805,'karry',16);
INSERT INTO STUDENT VALUES (1806,'lay',17);
--往成績表加數據
select * from GRADE;
INSERT INTO GRADE VALUES (11,77,1801);
INSERT INTO GRADE VALUES (12,87,1802);
INSERT INTO GRADE VALUES (13,90,1803);
INSERT INTO GRADE VALUES (14,85,1804);
INSERT INTO GRADE VALUES (15,58,1805);
INSERT INTO GRADE VALUES (16,72,1806);
--查詢
select * from GRADE for update;
--刪除表
drop table GRADE;
--刪除外鍵約束
ALTER TABLE GRADE drop constraint fk_GRADE_SNO;
二、約束語法
約束放置在表中,有以下五種約束:
NOT NULL 非空約束C 指定的列不允許爲空值
UNIQUE 唯一約束U 指定的列中沒有重複值,或該表中每一個值或者每一組值都將是唯一的
PRIMARY KEY 主鍵約束P 唯一的標識出表的每一行,且不允許空值值,一個表只能有一個主鍵約束
FOREIGN KEY 外鍵約束R 一個表中的列引用了其它表中的列,使得存在依賴關係,可以指向引用自身的列
CHECK 條件約束C 指定該列是否滿足某個條件
約束命名規則
如果不指定約束名Oracle server 自動按照SYS_Cn 的格式指定約束名,也可手動指定,
推薦的約束命名是:約束類型_表名_列名。
NN:NOT NULL 非空約束,比如nn_emp_sal
UK:UNIQUE KEY 唯一約束
PK:PRIMARY KEY 主鍵約束
FK:FOREIGN KEY 外鍵約束
CK:CHECK 條件約束
三、外鍵約束
外鍵約束是用來維護從表和主表的引用完整性的,所以外鍵約束要涉及兩個表。
FOREIGN KEY: 在表級指定子表中的列
REFERENCES: 標示在父表中的列
ON DELETE CASCADE: 當父表中的列被刪除時,子表中相對應的列也被刪除
ON DELETE SET NULL: 子表中相應的列置空
語法:
alter table 表1-表名
add constraint 外鍵名稱 foreign key (要設爲外鍵的列名)
references 表2-表名(與哪個表有關聯) (表2中該列列名);
外鍵名:(一般外鍵名稱爲”fK_數據表_字段”)
例如:
alter table GRADE add constraint fk_GRADE_SNO foreign key(sno) references STUDENT(sno);
GRADE是主表 constraint 是約束 fk_GRADE_SNO是外鍵約束名 foreign key(sno) 中sno是GRADE的外鍵字段。
STUDENT(sno)是外鍵表和字段