定义基本表
CREATE TABLE <表名>(<列名><数据类型> [列级完整性约束条件]
[,<列名> <数据类型> [列级完整性约束条件]
[,<表级完整性约束条件>]);
- 其中<表名>是所要定义的基本表的名字,它可以由一个或多个属性(列)组成。<列名>是所要定义的列的名字,完整性约束条件表示表中数据需要满足的约束条件。
- 完整性约束条件被存入系统的数据字典中,当用户操作表中数据时由DBMS自动检查该操作是否违背这些完整性约束条件。
- 如果完整性约束条件涉及到该表的多个属性列,则必须定义在表级上;
- 如果只涉及一个属性列,则既可以定义在列级也可以定义在表级。在表中,可以指定许多种完整性约束
约束
sql中约束分为以下6种
- 主码约束(primary key)pk_Course
- 外码约束(foreign key)fk_C
- 非空约束 (not null)n_k
- 唯一约束 (unique)u_k
- 条件约束 (check)c_k
- 默认值约束 (default)d_k
主码约束
例3-1 建立一个课程表Course,由课程号Cno、课程名Cname、先行课程号Ccpno、学分Ccredit四个属性组成。
CREATE TABLE Course2
(Cno number(4) constraint pk_Course primary key,
Cname char(20),
Cpno number(4),
Ccredit number(4));
例3-2 对例3-1的约束改为表级约束。
CREATE TABLE Course
(Cno number(4),
Cname char(20),
Cpno number(4),
Ccredit number(4),
Constraint pk_Course primary key(Sno));
外码约束
例3-3 创建表的同时创建表级外码约束。
CREATE TABLE SC
(Sno number(12),
Cno VARCHAR2(4),
Grade number(3),
Constraint pk_SC primary key (Sno,Cno),
Constraint fk_c foreign key (Cno) references Course(Cno)
);
约束外码要格外注意,SC(Cno)的定义要与Course表中的Cno相同
比如(Course)Cno为varchar(4)那么建表Cno number(4)会报错。
例3-4 对例3-3的表级外码约束改为列级。
CREATE TABLE SC
(Sno number(12),
Cno VARCHAR2(4) Constraint fk_c references Course(Cno),
Grade number(3),
Constraint pk_SC primary key (Sno,Cno)
);
一个外码自身参照的例子
CREATE TABLE Cou
(Cno number(4) constraint pk_Cou primary key,
Cname char(20),
Cpno VARCHAR2(4) constraint fk_cp references Course (Cno),
Ccredit number(4)
);
例3-6 将例3-5的列级改为表级约束
CREATE TABLE Cou
(Cno number(4) constraint pk_Cou primary key,
Cname char(20),
Cpno VARCHAR2(4) constraint fk_cp references Course(Cno),
Ccredit number(4)
);
//注意点:Ccredit number(4)后面不用加逗号
否则报错ORA-00904: : invalid identifier
条件约束
例3-7 添加一个CHECK约束来保证每个学生的考试成绩在0到100之间。
CREATE TABLE SC
(Sno VARCHAR2(12),
Cno VARCHAR2(4),
Grade number(3) check(Grade>=0 AND Grade<=100),
Constraint pk_SC primary key (Sno,Cno),
Constraint fk_sg foreign key (Sno) references Student(Sno),
Constraint fk_cg foreign key (Cno) references Course(Cno));
create table test(
id NUMBER(5),
name VARCHAR(10) not null,
sex VARCHAR(2) Constraint c_k check (sex in ('男','女'))
);
drop table test;
非空约束
create table test(
name VARCHAR(2) constraint n_t not null
);
drop table test;
unique约束
create table test(
name VARCHAR(2) constraint u_t unique
);
drop table test;
default约束
CREATE TABLE Studen
(Sno number(12),
Sname char(20),
Ssex char(2) default ('男'),
Sage number(3),
Sdept char(10));
drop table Studen;