第一章
(1)。 存在一对多关系, 一般会转换为主外键约束
(2)。 存在多对多关系,一般会转换成表.
第二章(数据库的创建)
1.用SQL语句创建数据库
IF EXISTS(Select * from sysdatabases where name='Myschool') --判断系统表中是否存在这个数据库
Drop DATABASE Myschool --删除数据库。
Create DATABASE MySchool --创建数据库
on
(
Name = 'MySchool', --主数据文件的逻辑名称
FileName = 'D:\project\MySchool.mdf',--主数据文件的文件路径
SIZE = 10MB , --主数据文件的初始大小
--MAXSIZE = 10MB, 主数据文件的文件最大值
Filegrowth = 20% --主数据文件的增长率
), --加个逗号创建次要文件
(
Name = 'MySchool', --次要数据文件的逻辑名称
FileName = 'D:\project\MySchool.ndf',--次要数据文件的文件路径
SIZE = 10MB , --次要数据文件的初始大小
--MAXSIZE = 10MB, 次要数据文件的文件最大值
Filegrowth = 20% --次要数据文件的增长率
)
LOG on
(
Name = 'MySchoolLog', --日志文件的逻辑名称
FileName = 'D:\project\MySchool_Log.ldf',--日志文件的文件路径
SIZE = 3MB , --日志文件的初始大小
MAXSIZE = 20MB, --日志文件的文件最大值
Filegrowth = 1MB --日志文件的增长率
)
2. 设置自动增长 在数据类型后面加 identity(1,1)
3.用SQL语句创建表
Use MySchool //到这个数据库去
GO
if exists(select * from sys.objects where name='Grade') //判断系统表集合中存在这表没有
drop table Grade //删除此表
CREATE TABLE Grade --创建学生信息表
--列名 | 数据类型 | 列的特征
id int primary key identity(1,1) not null, 带主键和自动增长
GradeID int identity(1,1) Not NULL,
GradeName nvarchar(50) Not NULL
)
3.1 创建临时表 select * into #temp from titles 前面加#号创建的表就是临时表
4 用SQL语句添加约束
Use MySchool
GO
alter table Student --设置主键约束
ADD CONSTRAINT PK_StudentNo primary key (StudentNo) -- add constraint 约束名 约束类型
alter table Student --设置唯一约束
add constraint UQ_IDENTITYCard unique (IDENTITYCard)
alter table Student --设置默认约束
add constraint DF_Address DEFAULT('地址不详') for Address
alter table Student --设置检查约束 如果在表名后面加上with nocheck 则可以对表中现有记录不做检查 但会导致以后插入或更新数据出现错误
add constraint CK_BornDate check(BornDate >='1980-01-01')
alter table Student --设置外键约束
add constraint FK_stuNo
foreign KEY(GradeId) references Grade(GradeID)
5 删除约束
alter table Student
drop constraint 约束名
6 DATEADD(mm,1,getdate()) 日期函数 添加时间 根据一个时间的基础上
7 添加列
--往book表添加BTotal列
USE Library
go
ALTER TABLE Book --修改表
ADD BTotal int --添加列
8 FileGroup 组名 创建组.
(
)
9 修改列
ALTER TABLE Result
ALTER Column StudnetResult Decimal(5,2)
第三章 (SQL编程)
1.声明变量和赋值变量
声明 declare @变量名 数据类型
如declare @name varchar(10)
赋值 SET @name = '小剑' 或者 SELECT @name = '小剑'
SET 一般用于给变量指定数据常量 ,, 不支持同时对多个变量赋值
SELECT 一般用于从表中查询数据再赋值, 注意。 要求查询出来的数据只能有一条 , 多了会把最后的一条数据赋值
支持对多个变量同时赋值
2.输出语句 和 不显示受影响的行数
PRINT '服务器名称:'+ @@SERVERNAME 输出在消息里面显示
set nocount on
SELECT @@SERVERNAME as 服务器名称 输入在结果里面显示
3.begin - end 流程控制语句 等同于C#中的 {}
if else ... 类似。。
while 你懂得。。。
4. bttween 6 and 11. 范围取值..
5 . 批处理 GO关键字 ,简化数据库管理
一个GO代表批处理的结束
6 case 多分支语句 --根据条件获得不同的值
case when 条件 then 值
when 条件 then 值
end
7 数据类型转换
Convert(数据类型,要转换的值)
Cast(要转换的值 as 数据类型)
8 常用全局变量
@@ERROR 最后一个T-SQL错误的错误号
@@IDENTITY 最后一次插入的标识值
@@ROWCOUNT 上一个SQL语句受影响的行数
第4章 高级查询
1.子查询。 select * from Student where StudentNo in(select StudentNo .....) --先执行括号里的子查询
2.exists子查询 判断是否存在
if exists(select * from sysdatabases where name = 'Student')
drop database Student
--把所有有成绩的学生显示出来
SELECT * FROM Student --先查询出这些数据
WHERE EXISTS (
SELECT * FROM Result
WHERE StudentNo = Student.StudentNo ) --然后再和exists里面的数据对比 比较 然后显示数据
3.Union 连接查询
2.去除重复关键字distinct;
select distinct * from Student
第6章 事务 视图 索引
1.事务 -- 单个的工作单元,
begin transaction 开始事务。
commit transaction 事务成功,保存数据
rollback transaction 事务失败 时光倒流 倒流到开始事务之前.
一般配合@@ERROR
判断事务是否出现错误, 如果没出现错误 则commit transaction
否则 rollback transaction
事务四个特性
(1)原子性 : 事务是以个完整的操作,事务的各步操作是不可分的(原子的):要么都执行,要么都不执行
(2)一致性 : 当事务完成时,数据必须处于一致状态
(3)隔离性 : 并发事务之间彼此隔离,独立,他不应以任何方式依赖于或影响其他事务
(4)永久性 : 事务完成后,它对数据库的修改被永久保持
事务分为 : 显示事务, 隐式事务, 自动提交事务
sqlserver默认是自动提交事务的,有的数据库不一定。
隐式事务:是指默认情况下,在执行下一条sql语句时开启事务,但是需要你手动提交事务
set implicit_transactions no --默认事务,锁定表,如果不提交事务或回滚事务,别的对这个表的操作都必须等待
update Studnet set StudentName = '张三丰' where studentName='武林'
commit transaction 不执行的话 别的操作会等待
--新开一条事务
update Studnet set StudentName = '武林' where studentName='张三丰'
commit transaction 不执行的话, 也会等待,因为上面已经提交,这里是新的事务
2.视图
视图的优点: 可以从特殊的角度来赋予权限,不同人看到不同数据,保证安全性,降低sql的复杂度
Use MySchool
Go
if exists(select * from sys.objects where name = 'view_Student_Result') --判断是否有这个视图 有就删除
drop view view_Student_Result --删除
GO
Create view view_Student_Result --创建视图, as 然后加 查询语句 ,
as
select st.StudentName 姓名,st.StudentNo 学号,st.Phone 联系电话,g.GradeName 学期,SUM(r.StudnetResult) 成绩 from Result r
join Student st on r.StudentNo = st.StudentNo
join Subject sb on r.SubjectNo = sb.SubjectNo
join Grade g on sb.GradeID = g.GradeID
group by g.GradeName,st.StudentName,st.StudentNo,st.Phone
GO
select * from view_Student_Result --查看视图
3.索引.
(1).频繁搜索的列,经常用作查询选择的列,经常排序 分组的列,经常用作连接的列(主外键) 建立索引标准
(2).仅包含举个不同值的列,小型表 , 不要使用这些列做索引
(3)创建索引.
Create [可选部分] index 索引名
on 表名(列名)
[WITH FILLFACTOR = 5] --可不写 指定填充因子数
可选部分可以填. UNIQUE 唯一索引 , CLUSTERED 聚集索引 , NONCLUSTERED 非聚集索引
聚集索引:如果一个列经常被查, 而且有重复的数据, 那么用它
非聚集索引: 如果一个列经常被查,但没什么重复数据, 用它
(4)删除索引
DROP INDEX 表名.索引名
注意:删除表时候,该表所有索引会同时被删除,如果要删除表的所有索引,首先要删除非聚集索引,然后再
删除聚集索引
(5)按指定索引查询
select * from Student
with (index = 索引名)
(6)查看索引
select * from sys.index
第7章 存储过程 --(((((非常类似于C#中的方法))))))
(1)存储过程分为 系统存储过程 sp_ 扩展存储过程 xp_ 自定义存储过程 usp_
(2)常用的系统存储过程:
exec sp_database --列出当前系统中的数据库
exec sp_renamedb 'MyBank','Bank' --改变数据库名称 (单用户访问)
Use Myschool
go
exec sp_tables --当前数据库中可查询对象的信息
exec sp_columns Student --查看表Student中列的信息
exec sp_help Student -- 查看表Student的所有信息
exec sp_helpconstraint Student -- 查看Student表的约束
exec sp_helptext '视图名称.' -- 查看视图的语句文本
exec sp_stored_procedures -- 返回当前数据库中的存储过程列表
exec sp_password --填充或修改登录账户的密码
(3)创建存储过程
Create procedure 存储过程名 as sql语句
(4)删除存储过程
drop procedure 存储过程名
(5)带参数的存储过程 --参数分为输入参数和输出参数, 输出参数关键字output 加在参数的数据类型后面
参数也可以设置默认值 设置了默认值之后 调用的时候这个参数是可填可不填的
Create procedure 存储过程名 [参数列表] as sql语句
(6)返回值的存储过程示例
Create procedure usp_StudentInfo
@count int output -- output相当于C#中的ref关键字。
as
select @count = Count(*) from Student
go
declare @count int
exec usp_StudentInfo @count output 这样就可以获取值了
注:或者用return获取返回值, return 只能获取int值!
Create procedure usp_StudentInfo
as
declare @count int
select @count = Count(*) from Student
return @count
go
declare @count int
exec @count = usp_StudentInfo 这样就可以获取值了
(7)存储过程的调用 exec[ute] 存储过程名 [参数列表] 。 也可以直接用 存储过程名称调用, 不需要exec
(8)raiserror 用户自定义的报错信息
raiserror('报错信息。。。',16,1)
第一个参数为报错的信息,第二个 错误的严重级别 0-18级可选 第三个 错误的状态 1为默认
(9)
使用sql 操作系统
--启动sp_configure ,0是关闭 ,1是打开
exec sp_configure 'show advanced options',1
GO
reconfigure --重新配置sp_configure
GO
--启动xm_cmdshell ,0是关闭, 1是打开 必须先启动sp_configure
exec sp_configure 'xp_cmdshell',1
GO
reconfigure --重新配置xp_cmdshell
GO
--使用cmd的DOS系统命令创建文件夹
exec xp_cmdshell 'mkdir E:\测试。\gmg'
--不出现提示的情况下删除指定目录和目录下的文件
exec xp_cmdshell 'rd E:\测试。\fff /q/s'
第 9 章 项目
随机数的算法,没有重复的。随机种子=当前的月份数*100000+当前的秒数*1000+当前毫秒数
RAND(DATEPART(mm,getdate())*100000+DATEPART(ss,getdate())*1000
+DATEPART(MS,GETDATE()))
优化Myschool数据库设计
猜你喜欢
转载自514041590.iteye.com/blog/2212453
今日推荐
周排行