SQL数据库基础二:建库、建表、建约束
USE master
GO
IF EXISTS (SELECT * FROM sysdatabases WHERE name = 'MySchool') --判断库是否存在
DROP DATABASE MySchool --若存在先删除
GO
CREATE DATABASE MySchool
ON
(
NAME = ' MySchool_data', --主数据文件的逻辑名
FILENAME = 'G:\MySchool_data.mdf' , --主数据文件的物理名
SIZE = 10 MB, --主数据文件初始大小
MAXSIZE=100MB, --主数据文件最大100M
FILEGROWTH = 20 % --主数据文件每次增长20%
)
LOG ON
(
NAME = 'MySchool_log',
FILENAME = 'G:\MySchool_log.ldf' ,
SIZE = 3MB,
MAXSIZE = 20MB,
FILEGROWTH = 1MB
)
GO
USE MySchool
GO
--建Subject表
--sysobjects表:存储本库中的对象信息,建表时需查此表判断要创建表是否存在,故需先打开本数据库。
IF EXISTS (SELECT * FROM sysobjects WHERE name='Subject' ) --判断表是否存在
DROP TABLE Subject --若存在先删除表,drop table将表和数据均删除。
GO
CREATE TABLE Subject --创建课程表
(
SubjectNo int IDENTITY(1,1) NOT NULL, --设置标识列(自增列),初始值为1,步长为1
SubjectName nchar(50) NOT NULL, --not null 表示该列不可空,默认为null
ClassHour int NOT NULL,
GradeId int NOT NULL
)
GO
-------------------------开始建约束,录入数据前创建约束,否则数据可能不满足约束要求而出错。
USE MySchool
GO
ALTER TABLE Grade
ADD CONSTRAINT PK_GradeID PRIMARY KEY (GradeID) -主键约束(值不能重复,不能为空)
GO
ALTER TABLE Student --唯一约束(身份证号唯一)
ADD CONSTRAINT UQ_stuID UNIQUE (IdentityCard) --唯一约束(可有一个为空,值不能为重复)
ALTER TABLE Student --默认约束(地址不详)
ADD CONSTRAINT DF_stuAddress DEFAULT ('地址不详') FOR Address --默认约束(用户不填写时,自动填写的值,可为常亮、函数值,不能涉及其他字段)
ALTER TABLE Student --检查约束(出生日期是自1980年1月1日以后)
ADD CONSTRAINT CK_stuBornDate CHECK(BornDate>='1980-1-1') --Check约束(值带入表达式后,若表达式值为true,值可进入表,否则出错)
ALTER TABLE Student --添加外键约束
ADD CONSTRAINT FK_Grade
FOREIGN KEY(GradeID) REFERENCES Grade(GradeID) --外键约束(外键引入主键,所以他们两个类型宽度等要一致,主键字段必须要设置成主键)
约束的重要实例:
ALTER TABLE Book ADD CONSTRAINT ck_bid CHECK(BID LIKE 'ISBN%') --以ISBN开头
ALTER TABLE Book ADD CONSTRAINT ck_pubdate CHECK(PubDate <getDate()) --出版日期在当前日期之前
ALTER TABLE Borrow ADD CONSTRAINT DF_lenddate DEFAULT (getDate()) FOR LendDate --借阅日期默认为当天
ALTER TABLE Borrow ADD CONSTRAINT DF_willdate DEFAULT(DateADD(mm,1,getDate())) FOR willdate --默认日期为当天假一个月
ALTER TABLE Penalty ADD CONSTRAINT ck_ptype CHECK(PType LIKE '[1-3]') --PType值为1-3

浙公网安备 33010602011771号