一、第一个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)是外键表和字段