/*本示例只适合初学者阅读对与各大高手来说有点浪费时间 如果高手来此指点一下臭棋将倍感荣幸在此代谢:非常感谢! 希望对初学者能尽绵薄之力感谢各位提出宝贵意见*/ /*说明本人对数据库只是略知一二 本示例只包含简单的数据库 的创建与修改数据的完整性表的创建 修改 添加 视图与索引的 创建与使用还有存储过程的创建与使用 */ --------------------------student数据库------------------------- use master go --打开master数据库 if exists(select * from sysdatabases where name='student') drop database student go --查找是否已存在student数据库若存在则删除student数据库 CREATE database student --新建student数据库 on primary --数据库所属的primary组 ( name='student_data', filename='d:/project/student_data.mdf', size=2mb, maxsize=5mb, filegrowth=1 ) log on --日志文件的创建 ( name='student_log', filename='d:/project/student_data.ldf', size=2mb, maxsize=5mb, filegrowth=1 ) go --执行 --filegrowth文件大小增长方式 maxsize 文件的最大容量 USE master exec xp_cmdshell 'mkdir d:/project'--exec是dos的启动函数cmd是命令mkdir在dos中的创建目录命令 go USE master --打开系统数据库文件关闭studnet数据库文件 go alter database student --这是修改的 增加文件大小只能增加 modify file ( name='student_data', size=6mb ) go sp_detach_db student --分离数据库 必须在停止使用后分离 go sp_attach_db student, --加载数据库 @filename1='d:/project/student_data.mdf' go drop database student --删除数据库 go ----------------------------------------supermarket数据库---------------------- use master --打开master数据库 go if exists(select * from sysdatabases where name='supermarket') drop database supermarket go --查找是否已存在supermarket数据库 use master exec xp_cmdshell 'mkdir d:/project'--启动master创建文件夹 go create database supermarket --创建数据库 on primary ( name='supermarket_data', filename='d:/project/supermarket_data.mdf', size=2mb, maxsize=3mb, filegrowth=1 ) log on --日志文件的生成 ( name='supermarket_log', filename='d:/project/supermarket_log.ndf', size=2mb, maxsize=3mb, filegrowth=1 --文件大小的增长方式 ) go alter database supermarket --修改数据库 增加数据库大小 modify file ( name='supermarket_data', size=3mb ) go sp_detach_db supermarket --分离数据库 go sp_attach_db supermarket, --加载数据库 @filename1='d:/project/supermarket_data.mdf' go --通过更改路径来修改文件所在磁盘分区的位置 drop database supermarket --删除数据库 go ------------------------------------------company数据库----- use master --打开系统数据库 go if exists(select * from sysdatabases where name='company') drop database company go --查找是否已存在company数据库若存在则删除原数据库 --打开数据库主要是为了调用系统函数帮助完成用户数据库的创建 --sysdatabases是一个系统表包含以创建的数据库信息 use master exec xp_cmdshell 'mkdir d:/project'--启动master创建文件夹 go create database company --创建数据库 on primary ( name='company_data', filename='d:/project/company_data.mdf', size=2mb, maxsize=3mb, filegrowth=1 ) log on --日志文件的生成 ( name='company_log', filename='d:/project/company_log.ndf', size=2mb, maxsize=3mb, filegrowth=1 ) go alter database company --修改数据库 增加数据库大小 modify file --可通过修改数据库filename值来移动文件的存储位置 ( name='company_data', size=3mb ) go sp_detach_db company --分离数据库 go sp_attach_db company, --加载数据库 @filename1='d:/project/supermarket_data.mdf' go drop database company --删除数据库 go ------------------------------------------student表---------------------- /*创建student中的表 先打开数据库student 创建表定义字段 创建表的格式为: create table 表名() go */ use student go create table studentInfo --表studentInfo ( stuID char(10) not null , stuName char(10) not null, stuAge tinyint, stuTel char(20) , stuDorm char(3), Class char(4) ) go create table selectInfo --表selectInfo ( stuID char(10) not null, subjectID char(10), subjectName varchar(30), stuScore float ) go create table subjectInfo --表sujectInfo ( subjectID char(10) not null, subjectName varchar(30), subjectTeacher char(12), subjectRemark varchar(30) ) go create table slmarksInfo --表s1marksInfo ( examID int not null, stuID char(8) not null, stuName char(10), stuClass char(6) not null, writtenExam int, labExam int ) go -----------------------------------------------supermarket表---------------------- /*在数据库supermarket创建表*/ use supermarket go create table sellinInfo --创建表中的各个字段 ( sellID char(8) not null, sellName varchar(30) not null, sellinPrice money not null, sellinMount int not null, sellinDate datetime, deliverID char(8) ) go create table selloutInfo --同上 ( sellID char(8) not null, selloutMount int not null, selloutPrice money not null, selloutDate datetime, ) go create table deliverInfo --同上 ( deliverID char , deliverName varchar(30), deliverRemark varchar(50) ) go -------------------------------------------------company表------------------------------- use company --打开company数据库 go create table Departments --创建表 ( DeptNo int not null,--定义字段数据类型是否为空 DeptName varchar(20) ) go create table Employee --创建Employee表 ( EmpNo int not null, EempName varchar(10), EempSex char(4), EmpAge int, JobNo int, Salary money, DeptNo int, HireDate datetime, Address varchar(50) ) go create table Jobs --创建jobs表 ( JobNo int not null, JobName varchar(40) ) go create table Products --创建Products表 ( PID int not null, PBrand varchar(50), PSort varchar(10), MinPrice money, Storage int ) go --------------------------------------------------------数据完整性约束------------------------ use student go /*主键约束用来强制数据的实体完整性,它是在表中定义一个主键来唯一标识表中的每行记录。 特点:①每个表中只能有一个主键 ②主键值必须唯一并且不能为空 */ alter table subjectInfo --对subject表中的subjectid创建主键约束 add constraint pk_subjectId primary key(subjectId) go --对课程名创建唯一约束subjectName用来强制数据的实体完整性,限制表的非主键列中不允许输入重复 /* 特点:①一个表中可以定义多个唯一约束 ②空值可以出现在某列中一次*/ alter table subjectInfo add constraint uk_subjectName unique(subjectName) go /*检查约束用来强制数据的域完整性, 它使用逻辑表达式来限制表中的列可以接受哪些数据值*/ alter table scoreInfo --创建check检查约束是在一定范围内 add constraint ck_score_c check (c>=0 and c<=100) go select * from scoreInfo -- 显示表的信息 alter table studentInfo --为studentInfo 中的stuId 创建主键约束保证唯一性并且不能为空 add constraint pk_stuId primary key(stuId) go /*默认约束用来强制数据的域完整性,它为表中某列建立一个默认值, 当用户插入记录时,如果没有为该列提供输入值,则系统会自动将默认值赋给该列 特点:①默认值可以是常量、内置函数或表达式 ②使用默认约束可以提高输入记录的速度 */ alter table studentInfo --位列提供默认值提高输入速度默认为男 add constraint dk_stuSex default '男'for stuSex go select * from ScoreInfo alter table /*外键是指一个表中的一列或列组合,它不是该表的主键,却是另一个表的主键 功能:通过外键约束可以为相关联的两个表建立联系,实现数据的参照完整性*/ alter table subjectInfo --在选课表中为科目代码创建外间约束 add constraint fk_subjectInfo foreign key(subjectID) references subjectInfo(subjectID) go exec sp_helpconstraint studentInfo go exec sp_help stuID ---------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------- use student go select 考号=examID,学号=stuID,姓名=stuName,机试成绩=labExam from s1marksInfo /*select * from s1marksInfo where labExam<90 declare @avgscore float, declare @score float select @avgscore=avg(labExam),@score=labExam from s1marksInfo where stuClass='0802' while(1) begin if(@score between 80 and 89) update s1marksInfo set labExam=labExam+1 if(@score between 70 and 79) update s1marksInfo set labExam=labExam+2 if(@score between 60 and 69) update s1marksInfo set labExam=labExam+3 if(@score<60) update s1marksInfo set labExam=labExam+5 select @avgscore=avg(labExam) from s1marksInfo if(@avgscore>=85) break end select * from s1marksInfo where stuClass='0802'*/ --------------------------------------------------------------------- --------------------------/* 存储过程 */------------------------- -----1.查询所有信息的存储过程 --创建存储过程的是为用户查看数据库提供方便 use student --打开数据 go drop proc St_student --删除已存在的存储过程代码 create proc St_student--在student数据库中创建存储过程 as select * from studentInfo go --创建完成 St_student --执行创建的存储过程 create proc St_select--在select数据库中创建存储过程 as select * from selectInfo go --创建完成 St_select --执行创建的存储过程 create proc St_subject--在subject数据库中创建存储过程 as select * from subjectInfo go --创建完成 St_subject --执行创建的存储过程 create proc St_s1marks--在s1marks数据库中创建存储过程 as select * from s1marksInfo go --创建完成 St_s1marks --执行创建的存储过程 -------------------------数据库操作带参数的存储过程--------- ---增加学生数据库的存储过程:st_insert_studentInfo /**/--例: drop proc st_insert_studentInfo --删除已存在的存储过程重建存储过程 create proc st_insert_studentInfo @stuId char(10), @stuName char(10), @stuAge int, @stuTel char(20), @stuDorm char(3), @stuSex char(2) as insert studentInfo values (@stuId,@stuName,@stuAge,@stuTel,@stuDorm ,@stuSex) go --执行 exec st_insert_studentInfo '0801016','杨澜','34','159010112345','504','女' /*注意要插入的值必须与列名一一对应否则将会出现错误*/ select * from studentInfo ---查看结果最后一行显示插入信息 ------------------增加科目信息的存储过程 st_insert_subjectInfo--------- /*创建插入数据的存储过程*/ create proc st_insert_subjectInfo @subjectID char(10), --定义变量 @subjectName varchar(30), @subjectTeacher char(12), @subjectRemark varchar(30) as insert subjectInfo values (@subjectID,@subjectName,@subjectTeacher,@subjectRemark) go exec st_insert_subjectInfo '0000000001','篮球','李宁','null'--执行插入数据 -------------------------增加科目信息的存储过程st_insert_selectInfo---- /*创建一个插入数据的存储过程*/ create proc st_insert_selectInfo @stuID char(10), --定义变量 @subjectID char(10), @subjectName varchar(30), @stuScore float as insert selectInfo --插入数据与字段一一对应 values(@stuID,@subjectID,@subjectName,@stuScore) go exec st_insert_selectInfo '0802001','006','体育','30'--执行 --------------------------------------------查找数据------------------- /*查找指定姓名的学生信息(姓名作为参数输入)*/ --示例:1创建studentInfo中的存储过程 drop proc st_student create proc st_student @name char(10) as select * from studentInfo where stuName=@name go st_student '马云' --执行创建的studentInfo中的存储过程 --1创建subjectInfo中的存储过程 create proc st_student @num char(10) as select * from subjectInfo where subjectID=@num go st_student '006' --执行subjectInfo中的存储过程 --1创建studentInfo中的存储过程 create proc st_student @stunumber char(10) as select * from selectInfo where stuID=@stunumber go exec st_student '0802001' create proc st_student @stuID char(10) as select * from s1marksInfo where stuID=@stuID go exec st_student '0802001' ------------------------------------修改数据----------------------- /*修改指定姓名的电话号码*/ create proc st_student --创建存储过程 @name char(10), @phone char(20) --定义变量 as update studentInfo set stuTel=@phone where stuName=@name go --执行创建 exec st_student '马云','15006834468' --通过创建的存储过程修改信息 select * from studentInfo where stuName='马云'--查看修改结果 drop proc st_student --删除存在的存储过程 create proc st_student @subjectnumber char(10), @teacher char(12) as update subjectInfo set subjectTeacher=@teacher where subjectID=@subjectnumber go st_student '003','郑洁' --在输入信息时可省略exec函数 -----------------------------------------删除数据---------------------------------- /*删除成绩表中指定姓名的成绩信息*/ create proc st_student --创建存储过程 @name char(10) --定义变量指定数据类型 as delete scoreInfo --删除scoreInfo中符合条件的记录信息 where stuID in(select stuID from studentInfo where stuName=@name) go --条件 /*use student go drop proc st_student --若重名则删除原来的存储过程 */ st_student '马云' --执行 通过创建的存储过程删除成绩表中指定姓名的成绩信息 select * from scoreInfo --查看修改后的结果