一.数据库的创建在开发中的步骤
1.1收集信息
1.2概念设计(E-R图)
1.3详细设计(数据库模型图)
1.4审核数据库(三大范式)
2.1 E-R
矩形:实体
椭圆:属性
菱形:关系
3.1 映射关系
一对一,一对多,多对一,多对多
4.1 三大范式
第一范式:每一列都要保证原子性,分的不能再分了
第二范式:在满足1NF基础上,每一张表只能表述一件事(有主键)
第三范式:在满足2NF基础上 ,确保除主键之外的列都必须和主键有直接的关系,而不是间接地关系
二.建库建表建约束
2.1 建库
建库:create database myschool;
三种文件格式:主文件.mdf,次要文件 .ndf,日志文件.ldf
create database myschool
--主文件
on [primary]
(
name='', --逻辑名称
filename=‘。mdf’,-- 文件路径
size=10,--初始大小
maxsize=100 ,--最大大小
filegrowth=10 增长率 不能加百分号
),
--次要文件
(
name='', --逻辑名称
filename=‘.ndf’,-- 文件路径
size=10,--初始大小
maxsize=100 ,--最大大小
filegrowth=10 增长率 不能加百分号
)
on log
(
name='', --逻辑名称
filename=‘.ldf’,-- 文件路径
size=10,--初始大小
maxsize=100 ,--最大大小
filegrowth=10 增长率 不能加百分号
)
给数据库添加文件
alter database myschool
add file
--次要文件
(
name='', --逻辑名称
filename=‘.ndf’,-- 文件路径
size=10,--初始大小
maxsize=100 ,--最大大小
filegrowth=10 增长率 不能加百分号
)
2.2 建表
Create table 表名
(
列 数据类型 数据特性(null or not null)
)
自动增长列 identity(1,1)
比如
Create table student
( id int identity(1,1) not null
)
删除表 drop table 表名
删除数据 delete 表名,truncate 表名
2.3 键约束
2.3.1 主键约束
Alter table 表名
Add constraint pk_约束名 primary key (列名)
2.3.2 唯一约束
Alter table 表名
Add constraint uq_约束名 unique (列名)
2,3.3 检查约束
Alter table 表名
Add constraint ck_约束名 check (列名<=100)
2.3.4 默认约束
Alter table 表名
Add constraint df_约束名 default(‘默认值’) for 列名
2.3.5 外键约束
Alter table 外键表
Add constraint fk_约束名 foreign key 列名 references 主键表(列名)
2.3.6 删除约束
Alter table 表名
Drop constraint 约束名
2.4建视图
2.4.1 创建
If exists (select * from sys.objects where name=’视图名’)
Drop view 视图名
Create view 视图名 as sql语句
注意: 视图中不能单独的使用order by 必须与top 同时出现
2.4.2 修改
Alter view 视图名
三.sql编程
3.1 定义变量
局部变量Declare @变量名 数据类型=值
全部变量 @@error 错误号,@@identity 获取最近一次的值 @@version版本号
3.2 赋值
3.2.1 set
set @变量名=值 or(set @变量名=(子查询)) ,一次只能给一个变量赋值
3,2,2 select
Select @变量名 =值 ,select @变量名=字段,@变量名=字段 from 表,可以给多个变量赋值;当返回多个数据的时候取最后一个
3.3 转换数据类型
3.3.1 convert
Convert (数据类型,变量)
特殊的可以对datetime 类型的字段转换 比如convert(字段,102)
3.3.2 Cast
Cast(变量名 as 数据类型)
3.4 if else
If (条件)
Begin
---sql
End
Else
Begin
--sql
end
3.5 while
While(条件)
Begin
End
3.6Case
Case when 条件 then 结果
When 条件 then 结果
Else
End
3.7 GO
批处理,把多条sql打个包一起发送服务器执行,执行速度加快
四:子查询
select * from ( 子查询 )别名
4.1 in
Select * from 表名 where 列名 in(子查询)
Select * from 表名 where 列名 in(‘’,’’,’’)
4,2 not in
Select * from 表名 where 列名 not in(子查询)
Select * from 表名 where 列名 not in(‘’,’’,’’)
4.3 exists and not exists
exists 用法1
if exists (select * from table ===) 判断是否能查出数据,如果能则返回true,否则返回false
exists 用法2
select * from student where exists(select * from grade where grade.gradeid=student.gradeid)
注意:exists 用法2比in 用法2效率高
五.存储过程
5.1 创建一个无参的存储过程
Create proc 存储过程名称
As
Sql 语句
Go
5.2 创建一个有输入参数的存储过程
Creta proc 存储过程名称
@变量名 数据类型
As
Sql 语句
Go
5.3 创建一个有默认值的存储过程
Creta proc 存储过程名称
@变量名 数据类型=’默认值’
As
Sql 语句
Go
5.4 创建一个有输入有输出的存储过程
Create proc 存储过程名
@输入变量 数据类型,
@输出变量 数据类型 output
As
Sql语句
Go
5.5 调用存储过程
Exec 存储过程名称
Execute 存储过程名称
经验:当遇到go的时候 exec 可以省略
5.6 事务
开启事务 begin transaction
提交事务 commit transaction
事务回滚 rollback transaction
六.索引
6.1 唯一索引
不能有相同的两行数据,当创建一个唯一约束的时候系统自动分配一个唯一索引
6.2 主键索引
特殊的唯一索引,当创建一个主键约束的时候,系统自动分配一个聚集的主键索引
注意:如果不想让主键占用聚集索引,可以在创建的时候,把非聚集表现出来
6.3 聚集索引
根据系统算法排列的,一张表只能有一个聚集索引(类似与拼音查字典)
6.4 非聚集索引
根据数据逻辑排列,一张表可以有多个非聚集索引(类似与偏旁部首和笔画)
6.5 全文索引
针对于大型的数据文本类型比如(long,text),key查询;
其它索引都是匹配查询
6.6 复合索引
说明:可以给多列创建一个索引
6.7 创建索引
Create [unique][nonclustered][clustered]
Index ix_索引名称 on table (列名,列名..)
With fillfactor=20 (不能加百分号)
6.9 删除索引
Drop index table.索引名称
6.10 指定索引查询
Select * from table with(index=索引名称) where …