SQL表的创建和基本约束

    xiaoxiao2021-03-25  42

    学习用SQL语句创建表的过程中遇到的一个例子,学生数据库中包含了三个表,创建表的同时为表中的列加上相应的约束,具体如下:

    学生数据库的创建

    USE master GO --创建数据文件 CREATE DATABASE SStudent ON ( NAME = SStudent_data, FILENAME = 'D:\SQL\Student\SStudent_data.mdf', SIZE = 5MB, MAXSIZE = 10MB, FILEGROWTH = 5% ) --创建日志文件 LOG ON ( NAME = SStudent_log, FILENAME = 'D:\SQL\Student\SStudent_log.ldf', SIZE = 2MB, MAXSIZE = 10MB, FILEGROWTH = 1MB ) GO

    表的创建

    在这个数据库中新建三个表格,分别是Student(学生信息表)、Course(课程表)、SC(选课表)三个表。其中:

    Sudent表中有学号(Sno)、姓名(SName)、性别(Ssex)、年龄(Sage)、所在系(Sdept)等属性列。

    Course表中有课程号(Cno)、课程名(Cname)、先行课(Cpno)、学分(Ccredit)等属性列。

    SC表中有学号(Sno)、课程号(Cno)、成绩(Grade)等属性列。

    显然可以看出这三个表之间存在联系,比如SC表中的Sno、Cno这两列分别与Student表和Course表中的这两列是一样的,那么它们之间一定存在着引用和被引用的关系。

    这里Student表中的Sno、Course表中的Cno分别为这两个表的主键,那么SC表中的Sno、Cno则为外键,它们之间的数据库关系图应该是这样的:

    此外,为了保证表中的数据完整性,我们还应为这三个表中的其他列设置相应的约束,

    比如:

    学生信息表中的学号必须为一个固定的位数(这里为设为9位),学生的年龄限制在18至30岁;

    为课程表中的先行课有一个默认值;

    选课表中的分数范围在0至100分;

    下面是创建这三个表的代码:

    USE SStudent GO IF EXISTS(SELECT * FROM sysobjects WHERE name = 'Student') DROP TABLE Student --判断学生表是否存在,如果存在先删除它再创建 CREATE TABLE Student ( Sno nchar(9) NOT NULL CONSTRAINT Sno_Len CHECK(LEN(Sno)=9) CONSTRAINT PK_SNo PRIMARY KEY CLUSTERED, SName nvarchar(20) NOT NULL CONSTRAINT UN_SName UNIQUE NONCLUSTERED, --姓名不允许有重复值 Sage int NOT NULL CHECK(Sage > 18 and Sage < 30), --添加检查约束,年龄在18至30岁 Sdept char(2) NOT NULL, Ssex char(2) NOT NULL ) GO IF EXISTS(SELECT * FROM sysobjects WHERE name = 'Course') DROP TABLE Course --创建课程名 CREATE TABLE Course ( Cno int NOT NULL --课程号 CONSTRAINT PK_Cno PRIMARY KEY CLUSTERED, Cname varchar(10) NOT NULL, --课程名 Cpno int NULL --先行课 CONSTRAINT DF_Cpno DEFAULT(0), Ccredit int NOT NULL, --学分 ) GO IF EXISTS(SELECT * FROM sysobjects WHERE name = 'SC') DROP TABLE SC --创建学生选课表 CREATE TABLE SC (--参照表 Sno nchar(9) NOT NULL FOREIGN KEY(Sno) REFERENCES Student(Sno), --外键引用 Cno int NOT NULL FOREIGN KEY(Cno) REFERENCES Course(Cno), Grade int Not NULL CONSTRAINT CK_Grade CHECK(Grade>0 and Grade<100) ) GO 创建好后的表

    转载请注明原文地址: https://ju.6miu.com/read-36575.html

    最新回复(0)