基本表的定义

本文深入解析SQL中的六种完整性约束,包括主码、外码、非空、唯一、条件及默认值约束,通过实例演示如何在创建表时应用这些约束,确保数据的一致性和准确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

定义基本表

CREATE TABLE <表名>(<列名><数据类型> [列级完整性约束条件]
[,<列名> <数据类型> [列级完整性约束条件]
[,<表级完整性约束条件>]);

  • 其中<表名>是所要定义的基本表的名字,它可以由一个或多个属性(列)组成。<列名>是所要定义的列的名字,完整性约束条件表示表中数据需要满足的约束条件。
  • 完整性约束条件被存入系统的数据字典中,当用户操作表中数据时由DBMS自动检查该操作是否违背这些完整性约束条件。
  • 如果完整性约束条件涉及到该表的多个属性列,则必须定义在表级上
  • 如果只涉及一个属性列,则既可以定义在列级也可以定义在表级在表中,可以指定许多种完整性约束

约束

sql中约束分为以下6种

  1. 主码约束(primary key)pk_Course
  2. 外码约束(foreign key)fk_C
  3. 非空约束 (not null)n_k
  4. 唯一约束 (unique)u_k
  5. 条件约束 (check)c_k
  6. 默认值约束 (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;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值