手机
当前位置:查字典教程网 >编程开发 >mssql数据库 >sql server 综合总结
sql server 综合总结
摘要:面向抽象编程接口-抽象类-父类-具体类1、复习T-SQL->数据库的建立、表的建立和约束(DDL)->建库if(db_id(数据库名))is...

面向抽象编程

接口-抽象类-父类-具体类

1、 复习T-SQL

-> 数据库的建立、表的建立和约束(DDL)

-> 建库

if(db_id(数据库名)) is not null

drop database 数据库名;

create database 数据库名;

-> 建表

if(object_id('表名', 'U')) is null

create table 表名

(

字段 类型 [约束],

字段 类型 [约束],

字段 类型 [约束]

);

-> 建约束

alter table 表名 add constraint 约束名 约束条件

-> 主键约束(PK_表名_字段名)

primary key(字段)

-> 默认约束(DF_表名_字段名)

default(值) for 字段

-> 检查约束(CK_表名_字段名)

check(表达式)

-> 唯一约束(UQ_表名_字段名)

unique(字段)

-> 外键约束(FK_外键表_主键表_字段名)

*

alter table 外键表 add

constraint FK_外键表_主键表_字段名

foreign key(字段名) references 主键表(字段名);

-> 数据库操作语言(DML)

-> 基本语言

insert into 表名(字段列表) values(值列表);-- 表是存在的

select 字段列表 into 新表名 from 旧表; -- 要求新表不存在

insert into 表名(字段列表) select查询;

删(主外键关联的时候,删除有时会出问题)

delete from 表名 where 条件;

truncate table 表名;-- 所有的数据归零

drop database 数据库;

drop table 表名;

update 表名 set 字段=值, 字段=值, … where条件;

查(***)

-> from子句

-> where子句

-> group by子句

-> having子句

-> select top distinct 以及运算表达式

-> order by子句

核心记住流程

-> 高级部分

case语法

-> if else if结构

case

when 表达式1 then 显示1

when 表达式2 then 显示2

else 显示n

end

-> switch-case结构

case 字段

when 值1 then 显示1

when 值2 then 显示2

else 显示n

end

连接

-> 交叉联接

ANSI-89的语法:select * from 表1, 表2;

ANSI-92的语法:select * from 表1 cross join 表2;

-> 内连接

ANSI-89的语法:select * from 表1, 表2 on 条件;

ANSI-92的语法:select * from 表1 inner join 表2 on 条件;

-> 外连接

ANSI-92的语法:

select * from 表1 left join 表2 on 条件;

select * from 表1 right join 表2 on 条件;

-> 自连接、多表连接

表1

inner join

表2

on 条件

inner join

表3

on 条件

子查询

将一个查询的结果作为另一个查询的条件

分清出内部查询(子查询)和外部查询

-> 独立标量子查询字段 = (子查询)

-> 独立多值子查询字段 in (子查询)

表表达式

-> 派生表

将查询的"结果集"作为数据源 --不能使用order by

select * from

(

select

row_number() over(order by stuId) as num,

*

from

Student

) as tbl

where

tbl.num between @count * (@page - 1) + 1 and @count * @page;

2、 公用表表达式(CTE)

就是将一个查询得到的结果集用一个表的形式临时存放,并用一个变量名指定

后面再查询直接使用变量名即可

with 别名

as

(

结果集

)

查询

3、 考虑派生表和CTE都是临时的,而且比较臃肿,所以希望将常用的查询结构定义到数据库中

每次使用的时候,直接使用数据库中的这个对象,这个对象中记录了这个复杂的查询规范

由数据库执行查询

那么就有了视图(虚拟表)

create view vw_视图名

as

查询

注意:视图不具备存储数据的能力,但是使用的时候就好像一张表一样

4、 (*介绍)内联表值函数

带有参数的试图

create function fn_名字

(@参数 类型, …) returns table

as

return 查询

5、 SQL中的变量与流程控制

-> SQL是一个脚本语言,可以认为基本的编程语句都支持

-> 定义变量

declare @变量名 类型名;

-> 赋值

set @变量名 = 值;

-> 补充

使用select进行赋值

select @变量=字段 from 表名…(支持多值查询)

使用子查询进行赋值

set @变量 = (单值子查询); (只支持单值查询)

>sql 2008 新的语法

declare @name varchar(5)='大鑫';

select @name;

-> 判断

if(bool表达式) begin end就等于程序中的大括号()

begin

-- 语句

end

else if(表达式)

begin

-- 语句

end

else

begin

-- 语句

end

-> 循环

while(bool表达式)

begin

-- 语句

end

循环练习

--求1到100的和

declare @jkSum int;

declare @i int;

set @jkSum = 0;

set @i = 1;

while (@i <= 100)

begin

set @jkSum = @jkSum + @i;

--set @i = @i + 1;

****--sql里面循环执行后要把@i+1 赋值然后执行下一次循环提供的新值

set @i += 1;

end

select @jkSum;

go

6、 为什么要有事务,事务是什么

事务,就是SQL中一个独立执行过程

这结果是会影响到数据库的数据结果的

这个事务(执行过程)与其他的执行过程无关

事务执行的时候是一个整体,要么全部成功,也么全部失败

事务的原子性、持久性、隔离性、一致性(不能违反约束)

SQL中每一个SQL语句实际上都是一个事务(隐式事务)

事务就是一个最小的执行单位

常见的全局变量 @@version, @@error(最后一个错误的T_SQL的信息)

@@identity (最后的一个插入表的自增id)

//查询中文的错误信息试图

select * from sys.messages where where language_id=2052;

显示声明事务

begin transaction -- 简写begin tran

事务内部

-- 提交事务或回滚事务

commit transaction-- 表示事务内部的所有事情执行成功

rollback transaction-- 表示撤销事务内部所有的事情

-> 使用try-catch块处理事务中的异常错误

begin try

end try

begin catch

end catch

7、 存储过程就是将一些列的执行步骤记录到数据库中,有点类似于方法

-> 无参数,无返回值的存储过程

-> 有参数,无返回值的存储过程

-> 带有默认参数的存储过程

-> 带有默认参数与参数返回值的存储过程

声明一个带默认参数@stuNameTemp nvarchar(20)='all'

---> []可以有,可以无

---> 多条语句必须要加begin end 如果是一条语句可以省略begin end

CREATE PROC[EDURE] USP_存储过程名

@参数1 数据类型 [= 默认值] [OUTPUT],

@参数n 数据类型 [= 默认值] [OUTPUT]

AS

BEGIN

SQL语句

END

exec 存储过程 参数;

exec 存储过程 参数名=参数;

exec 存储过程 参数,参数n output;

8、 使用执行SQL的方法

-> 没有返回值的存储过程

-> 带有参数返回值的存储过程

-> 连接字符串

-> SQL语句(存储过程的名字)

-> 创建参数

如果是执行参数返回值的存储过程

定义要返回的参数,不要赋值,设定Direction

string sql = "usp_TransMoney";

SqlParameter[] ps =

{

new SqlParameter("@from",from),

new SqlParameter("@to", to),

new SqlParameter("@money",money),

new SqlParameter("@isAccess", SqlDbType.Int)

};

ps[3].Direction = ParameterDirection.Output;

-> 连接通道SqlConnection

-> 创建执行对象SqlCommand(设定CommandType)

-> 加入参数

-> 打开连接

-> 执行方法

9.触发器

->特殊的存储过程。 inserted表 和 deleted表 2个临时表

insert into back(cid,balance) output inserted.*

values('0004',10000);

for 或者 after 触发器 是执行完才能触发

instead of 代替

--添加一个触发器,删除所有数据后,在把数据插回来

create trigger tr_DelUseInfo on 表名(bank)

for delete

as

insert into bank select * from deleted;

go

【sql server 综合总结】相关文章:

sqlserver FOR XML PATH 语句的应用

sqlserver 2005连接超时采用bat命令解决

sql server 2008 用户 NT AUTHORITYIUSR 登录失败的解决方法

使用Sqlserver事务发布实现数据同步(sql2008)

sqlserver链接数据库

sqlserver 中一些常看的指标和清除缓存的方法

SQL Server 数据库备份和还原认识和总结

sqlserver 数据类型转换小实验

sql server 2008数据库无法启动的解决办法(图文教程)

SQL Server 2008性能和扩展基础教程

精品推荐
分类导航