时间:2021-07-01 10:21:17 帮助过:18人阅读
1.1收集信息
1.2概念设计(E-R图)
1.3详细设计(数据库模型图)
1.4审核数据库(三大范式)
2.1 E-R
矩形:实体
椭圆:属性
菱形:关系
3.1 映射关系
一对一,一对多,多对一,多对多
4.1 三大范式
第一范式:每一列都要保证原子性,分的不能再分了
第二范式:在满足1NF基础上,每一张表只能表述一件事(有主键)
第三范式:在满足2NF基础上 ,确保除主键之外的列都必须和主键有直接的关系,而不是间接地关系
建库: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 增长率 不能加百分号
)
Create table 表名
(
列 数据类型 数据特性(null or not null)
)
自动增长列 identity(1,1)
比如
Create table student
( id int identity(1,1) not null
)
删除表 drop table 表名
删除数据 delete 表名,truncate 表名
Alter table 表名
Add constraint pk_约束名 primary key (列名)
Alter table 表名
Add constraint uq_约束名 unique (列名)
Alter table 表名
Add constraint ck_约束名 check (列名<=100)
Alter table 表名
Add constraint df_约束名 default(‘默认值’) for 列名
Alter table 外键表
Add constraint fk_约束名 foreign key 列名 references 主键表(列名)
Alter table 表名
Drop constraint 约束名
If exists (select * from sys.objects where name=’视图名’)
Drop view 视图名
Create view 视图名 as sql语句
注意: 视图中不能单独的使用order by 必须与top 同时出现
Alter view 视图名
局部变量Declare @变量名 数据类型=值
全部变量 @@error 错误号,@@identity 获取最近一次的值 @@version版本号
set @变量名=值 or(set @变量名=(子查询)) ,一次只能给一个变量赋值
Select @变量名 =值 ,select @变量名=字段,@变量名=字段 from 表,可以给多个变量赋值;当返回多个数据的时候取最后一个
Convert (数据类型,变量)
特殊的可以对datetime 类型的字段转换 比如convert(字段,102)
Cast(变量名 as 数据类型)
If (条件)
Begin
---sql
End
Else
Begin
--sql
end
While(条件)
Begin
End
Case when 条件 then 结果
When 条件 then 结果
Else
End
批处理,把多条sql打个包一起发送服务器执行,执行速度加快
select * from ( 子查询 )别名
Select * from 表名 where 列名 in(子查询)
Select * from 表名 where 列名 in(‘’,’’,’’)
Select * from 表名 where 列名 not in(子查询)
Select * from 表名 where 列名 not in(‘’,’’,’’)
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效率高
Create proc 存储过程名称
As
Sql 语句
Go
Creta proc 存储过程名称
@变量名 数据类型
As
Sql 语句
Go
Creta proc 存储过程名称
@变量名 数据类型=’默认值’
As
Sql 语句
Go
Create proc 存储过程名
@输入变量 数据类型,
@输出变量 数据类型 output
As
Sql语句
Go
Exec 存储过程名称
Execute 存储过程名称
经验:当遇到go的时候 exec 可以省略
开启事务 begin transaction
提交事务 commit transaction
事务回滚 rollback transaction
不能有相同的两行数据,当创建一个唯一约束的时候系统自动分配一个唯一索引
特殊的唯一索引,当创建一个主键约束的时候,系统自动分配一个聚集的主键索引
注意:如果不想让主键占用聚集索引,可以在创建的时候,把非聚集表现出来
根据系统算法排列的,一张表只能有一个聚集索引(类似与拼音查字典)
根据数据逻辑排列,一张表可以有多个非聚集索引(类似与偏旁部首和笔画)
针对于大型的数据文本类型比如(long,text),key查询;
其它索引都是匹配查询
说明:可以给多列创建一个索引
Create [unique][nonclustered][clustered]
Index ix_索引名称 on table (列名,列名..)
With fillfactor=20 (不能加百分号)
Drop index table.索引名称
Select * from table with(index=索引名称) where …
T-SQL
标签:foreign database cut let 唯一约束 子查询 过程 tor 三范式