首页 > 代码库 > T-SQL

T-SQL

 

.数据库的创建在开发中的步骤

 

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 用法2in 用法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

 

T-SQL