使用SQL建立一个小数据库

Posted 望山海

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用SQL建立一个小数据库相关的知识,希望对你有一定的参考价值。

在SQL Server 2012环境下运行通过。

结果如下所示:

代码如下:

if exists(select * from master.dbo.sysdatabases where name = \'STUDENT_DATA_LYP\')
    drop database STUDENT_DATA_LYP;  --如果这个数据库存在,则删除它。
    while(exists(select 1 from information_schema.table_constraints where constraint_type = \'foreign key\'))
    --while循环,在information_schema.table_constraints中查找数据库所有的约束,并依次取出,是外码则执行,不是则跳过。
    begin
        declare @sql nvarchar(max) --@标识了一个自定义变量,长度无限大(在SQL Server 中是2^31-1个字节)。
        select top 1 @sql=(\'alter table \' + table_name + \' drop constraint \' + constraint_name) --将@sql定义为一条"alter table 表名 drop constraint 约束名"的命令以删除外码。
        from information_schema.table_constraints
        where constraint_type = \'foreign key\';
        exec (@sql) --执行@sql这条命令。
    end
go

create database STUDENT_DATA_LYP; --重建数据库。

if exists(select * from master.dbo.sysobjects where name = \'DEPARTMENT\' and type = \'U\')
    drop table DEPARTMENT; --如果这个表存在,则删除它。
go

create table DEPARTMENT (

Dno char(4) primary key, --Dno为主码。
Dname char(20) unique, --Dname不能重复。
Head char(20),

);

insert into DEPARTMENT values(\'1\', \'计算机系\', \'王凯峰\');
insert into DEPARTMENT values(\'2\', \'数学系\', \'李永军\');
insert into DEPARTMENT values(\'3\', \'物理系\', \'唐键\');
insert into DEPARTMENT values(\'4\', \'中文系\', \'秦峰\');
--为DEPARTMENT表的各项赋值。

select * from DEPARTMENT; --读取DEPARTMENT表。

if exists(select * from master.dbo.sysobjects where name = \'DORM\' and type = \'U\')
    drop table DORM; --如果这个表存在,则删除它。
go

create table DORM (

Dormno char(5) primary key check(Dormno like \'[0-9][0-9][0-9][0-9]\'), --Dormno为主码,且必须为四位数字。
Tele char (7) check(Tele like \'[0-9][0-9][0-9][0-9][0-9][0-9][0-9]\') unique, --Tele必须为七位数字且不可重复。

);

insert into DORM values(\'2101\', \'8302101\');
insert into DORM values(\'2202\', \'8302202\');
insert into DORM values(\'2303\', \'8302303\');
insert into DORM values(\'2404\', \'8302404\');
insert into DORM values(\'2505\', \'8302505\');
--为DORM表的各项赋值。

select * from DORM; --读取DORM表。

if exists(select * from master.dbo.sysobjects where name = \'COURSE\' and type = \'U\')
    drop table COURSE;  --如果这个表存在,则删除它。
go

create table COURSE (

Cno char(2) primary key check(Cno like \'[0-9][0-9]\'), --Cno为主码,且必须为两位数字。
Cname char(20) unique, --Cname不可重复。
Cpno char(2) null, --Cpno可为空(即不存在先行课)。
Credit int check(Credit > 0), --学分大于零。
Teacher char(8),

constraint FK_COURSE_Cpno foreign key(Cpno) references COURSE(Cno), --Cpno引用了Cno,Cpno为Cno的外码。

);

insert into COURSE(Cno, Cname, Credit, Teacher) values(\'01\', \'数据库原理\', \'4\', \'王凯\'); 
insert into COURSE(Cno, Cname, Credit, Teacher) values(\'02\', \'高等数学\', \'6\', \'张风\');
insert into COURSE(Cno, Cname, Credit, Teacher) values(\'03\', \'信息系统\', \'2\', \'李明\');
insert into COURSE(Cno, Cname, Credit, Teacher) values(\'04\', \'操作系统\', \'4\', \'许强\');
insert into COURSE(Cno, Cname, Credit, Teacher) values(\'05\', \'数据结构\', \'4\', \'路飞\');
insert into COURSE(Cno, Cname, Credit, Teacher) values(\'06\', \'算法设计\', \'2\', \'黄海\');
insert into COURSE(Cno, Cname, Credit, Teacher) values(\'07\', \'C语言\', \'3\', \'高达\');
/*
因为在先前语句中定义了Cpno为Cno的外码,所以应当先为Cno赋值,否则会发生错误。
如果使用insert into XXX values(YYY,ZZZ)的方式必须为所有项同时赋值,而insert into XXX(AAA) values(YYY)的方式就可以先只为某一项或几项先行赋值。
*/

update COURSE set Cpno = \'05\' where Cno = \'01\'; 
update COURSE set Cpno = NULL where Cno = \'02\';
update COURSE set Cpno = \'01\' where Cno = \'03\';
update COURSE set Cpno = \'06\' where Cno = \'04\';
update COURSE set Cpno = \'07\' where Cno = \'05\';
update COURSE set Cpno = NULL where Cno = \'06\';
update COURSE set Cpno = \'06\' where Cno = \'07\';
--用update语句为Cpno赋值。where是限定条件,在本段中,它的含义是在Cno为某个值时为对应行的Cpno赋特定值。

select * from COURSE;
--读取COURSE表。

if exists(select * from master.dbo.sysobjects where name = \'STUDENT\' and type = \'U\')
    drop table STUDENT; --如果这个表存在,则删除它。
go

create table STUDENT (

Sno char(6) primary key check(Sno like \'[0-9][0-9][0-9][0-9][0-9][0-9]\'), --Sno为主码,且必须为六位数字。
Sname char(8),
Sex char(2) check(Sex = \'\' or Sex = \'\'), --Sex必须为"男"或"女"。
Sage int check(Sage >= 10 and Sage <= 100), --Sage必须介于10和100之间。
Dno char(4),
Dormno char(5) null check(Dormno like \'[0-9][0-9][0-9][0-9]\'), --Dormno必须为四位数字,可以为空(即没有寝室)。

constraint FK_STUDENT_Dno foreign key(Dno) references DEPARTMENT(Dno), --STUDENT表的Dno引用了DEPARTMENT表的Dno。
constraint FK_STUDENT_Dormno foreign key(Dormno) references DORM(Dormno), --STUDENT表的Dormno引用了DORM表的Dormno。

);

insert into STUDENT values(\'990101\', \'原野\', \'\', \'21\', \'1\', \'2101\');
insert into STUDENT values(\'990102\', \'张原\', \'\', \'21\', \'1\', \'2101\');
insert into STUDENT values(\'990103\', \'李军\', \'\', \'20\', \'1\', \'2101\');
insert into STUDENT values(\'990104\', \'汪远\', \'\', \'20\', \'1\', \'2101\');
insert into STUDENT values(\'990105\', \'齐欣\', \'\', \'20\', \'1\', \'2101\');
insert into STUDENT values(\'990201\', \'王大鸣\', \'\', \'19\', \'2\', \'2202\');
insert into STUDENT values(\'990202\', \'徐东\', \'\', \'19\', \'2\', \'2202\');
insert into STUDENT values(\'990301\', \'张扬\', \'\', \'21\', \'1\', \'2303\');
insert into STUDENT values(\'990302\', \'于洋\', \'\', \'20\', \'3\', \'2303\');
insert into STUDENT values(\'990303\', \'姚志旬\', \'\', \'19\', \'4\', \'2404\');
insert into STUDENT values(\'990401\', \'高明镜\', \'\', \'19\', \'4\', NULL);
insert into STUDENT values(\'990402\', \'明天\', \'\', \'21\', \'4\', \'2404\');
--为STUDENT表的各项赋值。

select * from STUDENT;
--读取STUDENT表。

if exists(select * from master.dbo.sysobjects where name = \'GRADE\' and type = \'U\')
    drop table GRADE; --如果这个表存在,则删除它。
go

create table GRADE (

Sno char(6) check(Sno like \'[0-9][0-9][0-9][0-9][0-9][0-9]\'), --Sno必须为六位数字。
Cno char(2) check(Cno like \'[0-9][0-9]\'), --Cno必须为两位数字。
Score decimal(4,1) null check(Score >= 0 and Score <= 100), --Score小数点左边有四位有效数字,小数点右边有一位有效数字。Score可以为空,如不为空,必须在0到100之间。

constraint PK_GRADE primary key(Sno,Cno), --Sno与Cno共同作为主码。
--因为二者共同作为主码,因此它们每一个本身都不是主码,因此可以为外码。
constraint FK_GRADE_Sno foreign key(Sno) references STUDENT(Sno), --GRADE表的Sno引用了STUDENT表的Sno
constraint FK_GRADE_Cno foreign key(Cno) references COURSE(Cno), --GRADE表的Cno引用了COURSE表的Cno

);

insert into GRADE values(\'990101\', \'01\', \'85\');
insert into GRADE values(\'990101\', \'03\', \'65\');
insert into GRADE values(\'990101\', \'04\', \'83\');
insert into GRADE values(\'990101\', \'07\', \'72\');
insert into GRADE values(\'990102\', \'01\', NULL);
insert into GRADE values(\'990102\', \'02\', \'80\');
insert into GRADE values(\'990102\', \'04\', \'81\');
insert into GRADE values(\'990103\', \'01\', \'74\');
insert into GRADE values(\'990103\', \'02\', \'70\');
insert into GRADE values(\'990103\', \'04\', \'70\');
insert into GRADE values(\'990103\', \'06\', \'74\'); insert into GRADE values(\'990103\', \'07\', \'74\'); insert into GRADE values(\'990104\', \'01\', \'55\'); insert into GRADE values(\'990104\', \'02\', \'42\'); insert into GRADE values(\'990104\', \'06\', \'0\'); insert into GRADE values(\'990105\', \'03\', \'85\'); insert into GRADE values(\'990105\', \'06\', NULL); insert into GRADE values(\'990301\', \'01\', \'46\'); insert into GRADE values(\'990301\'以上是关于使用SQL建立一个小数据库的主要内容,如果未能解决你的问题,请参考以下文章

Android课程---Android Studio使用小技巧:提取方法代码片段

微信小程序代码片段

EntityFramework 映射片段问题

Android小部件,启动一个片段?

sql 这些代码片段将演示如何逐步使用PolyBase。你应该有一个blob存储和存储秘密方便

SQL记录-PLSQL-DBMS输出