SQL 视图 局部变量 全局变量 条件语句 事务 触发器

一.视图



1.视图是一张虚拟表,他所存储的不是实际数据,而是查询语句,但我们可以对视图进行像数据表一样的操作。

2.为什么使用视图呢?我的理解是:1.在远程传输数据时,可以避免过长的查询字符,减少流量。2.他可以简化繁杂的多表嵌套查询语句。3.安全性,防止非法用户访问敏感数据,因为我们可以通过创建视图展示给用户,我们想要给他们查看的数据。

3.视图的创建

create view vw_city
as
select cityName from city   --这个查询语句可以随便的写,如果是些多层次的嵌套查询语句的话,那么下面使用视图的简易性就突出了。应为只用一句简短的查询语句就能把原本繁杂的搞定

4.视图的查询

select * from vw_city

5.由于视图是以查询语句的形式存储的,所以一般视图只用于查看数据,一般不对视图进行增删改。如果数据库中的表数据改变那么视图中的数据也会随之改变,因为视图就相当于查询语句。



二.局部变量(使用便于写数据库方法,及存储过程等)



1.局部变量的声明(一个@)

declare @n int   --声明变量关键字为declare 然后@加变量名 后面是变量类型
declare @s varchar(36) 

2.局部变量的赋值

set @s=‘f4‘
set @[email protected]+1  --变量的赋值有两种方法,一种是通过set,一种是select 如果变量不附初始值则默认为null,null参与计算的结果还是null,这一行的@n就等于null
select @n=age from students  --如过变量通过select赋值,这里可能在表中查到很多age结果,这里只赋值查询出来的最后一个age结果,如果set使用这种方法会出错。
set @n=(select age from Students where ID=‘1‘)--亦可以这样给他赋值



三.全局变量



1.全局变量是系统自定义,维护的,我们不能修改全局变量的值。以@@开头。

2.全局变量一览

select APP_NAME ( ) as w --当前会话的应用程序

select @@ERROR    --返回最后执行的 Transact-SQL 语句的错误代码(integer)(如果最后一条语句不出错,就一直是0)

select @@IDENTITY   --返回最后插入的标识值

select USER_NAME()    --返回用户数据库用户名

select @@CONNECTIONS  --返回自上次SQL启动以来连接或试图连接的次数。

select GETDATE() --当前时间

select @@CPU_BUSY/100  --返回自上次启动SQL 以来 CPU 的工作时间,单位为毫秒

USE tempdb select @@DBTS  as w  --为当前数据库返回当前 timestamp 数据类型的值。这一 timestamp 值保证在数据库中是唯一的。

select @@IDLE  as w  --返回SQL自上次启动后闲置的时间,单位为毫秒

select @@IO_BUSY AS w   --返回SQL自上次启动后用于执行输入和输出操作的时间,单位为毫秒

select @@LANGID AS w   --返回当前所使用语言的本地语言标识符(ID)

select @@LANGUAGE AS w   --返回当前使用的语言名

select @@LOCK_TIMEOUT as w  --当前会话的当前锁超时设置,单位为毫秒。

select @@MAX_CONNECTIONS  as w  --返回SQL上允许的同时用户连接的最大数。返回的数不必为当前配置的数值

EXEC sp_configure  --显示当前服务器的全局配置设置

select @@MAX_PRECISION as w --返回 decimal 和 numeric 数据类型所用的精度级别,即该服务器中当前设置的精度。默认最大精度38。

select @@OPTIONS  as w  --返回当前 SET 选项的信息。

select @@PACK_RECEIVED as w  --返回SQL自启动后从网络上读取的输入数据包数目。

select @@PACK_SENT as w  --返回SQ自上次启动后写到网络上的输出数据包数目。

select @@PACKET_ERRORS as w  --返回自SQL启动后,在SQL连接上发生的网络数据包错误数。

select @@SERVERNAME as w --返回运行SQL服务器名称。

select @@SERVICENAME  as w --返回SQL正在其下运行的注册表键名

select @@TIMETICKS  as w --返回SQL服务器一刻度的微秒数

select @@TOTAL_ERRORS AS w  --返回 SQL服务器自启动后,所遇到的磁盘读/写错误数。

select @@TOTAL_READ  as w  --返回 SQL服务器自启动后读取磁盘的次数。

select @@TOTAL_WRITE as w  --返回SQL服务器自启动后写入磁盘的次数。

select @@TRANCOUNT  as w  --返回当前连接的活动事务数。

select @@VERSION as w  --返回SQL服务器安装的日期、版本和处理器类型。



四.条件语句



1.条件语句

if(条件表达式)
begin
语句...
end
else
begin
语句...
end

2.循环语句

while
begin
语句....
break/continue
end


五.事务(去不了终点,回到原点)



1.事务:如果你要一起执行多条语句,如果有一条失败你就可以让他们全部都撤销执行。

begin tran  --开启一个事物
delete from city
select * from city ---这里查询没有数据,因为上一句删除了
rollback tran
select * from city  --这里在查询,惊奇的发现,数据又恢复了,因为上一句rollback是 让这个事务回滚的效果,

begin tran  --开启一个事物
delete from city
select * from city ---这里查询没有数据,因为上一句删除了
commit tran
select * from city  --这里在查询,不好意思,数据真的没了,即便下边你在rollback数据也回不来了,因为commit执行了数据真的把数据删掉了

2.事务小案例

---bank表为转账表,MeMoney字段为我的账余额,HeMoney为朋友的账户余额,这个事务完成的是我给朋友转账
begin tran
declare @ersum int        --定义这个局部变量为了记载这个事务过程中是否会出错,如果出错则最终将得不到为0的值,也就完成了我们判断这个事务是否出错过
set @ersum=0
update bank set MeMoney=MeMoney-1000 where ID=me   ---从我卡里扣掉1000
set @[email protected][email protected]@ERROR           --如果不出错这里还是0,如果错了,这里将不是0
update bank set HeMoney=HeMoney+100 where ID=he    ---给我朋友卡里加上1000
set @[email protected][email protected]@ERROR     --如果这里的结果是0将表明没有出错
if(@ersum<>0)  --true有错,false没错
begin
rollback tran  ---回滚事务
end
else
begin
commit tran    --执行事务end



六.触发器



1.触发器,当数据库中的表有所改动(添删改)是会触发一中事件,这样一种机制,就是触发器。

2.触发器种类:after跟for一样,是语句执行完毕后触发事件。instead of :本来你要执行一种操作,结果执行了另外一种操作,原本要执行的操作被替换。

3.触发器的创建

create trigger 触发器名 on 操作表(实际要操作的表)
for|after|instead of  --选其任意一种类型,其中for跟after是一样的
update|delete|insert    --原本要执行哪一种动作
as
sql语句.....    ---你想要执行的sql语句

4.触发器的小案例

--这个例子是,删除Tb1里面的数据,把删除的数据同时备份到Tb1Bak表中
create trigger tri_bak on Tb1  --声明一个tri_bak ,如果Tb1表中的数据变化触发这个触发器
after delete   ---删除完成后执行下面的操作
as
insert into Tb1Bak select * from deleted   ---这里的deleted是系统自动生成的表,存放为上一次的数据库表中删除的数据。

5.小知识点:数据更新插入删除的过程为,插入数据库表的同时,也插入了系统表的insert表,删除的同时把删除的这条数据插入到了deleted表中,跟新的同时,deleted表中插入就数据,insert表中也添加了新数据。  我这里的insert 、deleted表都为系统自动生成的,不是我们操作的表。



七.如果我哪里写错了,或者你想说点什么,欢迎留言。。

时间: 2024-10-05 04:59:53

SQL 视图 局部变量 全局变量 条件语句 事务 触发器的相关文章

MySql常见数据类型,SQL执行顺序,条件语句,转储,查看表中字段属性

数据类型: 1 数字: Tinyint:小数据 用于保存一些范围的整数数值范围 有符号: -128-127 无符号: 0-255 int 整数 数据类型用于保存一些范围的整数数值范围 有符号: -2147483648--2147483647 无符号: 0-4294967295 Bigint 大整数 数据类型用于保存一些范围的整数数值范围: 有符号: -9223372036854775808--9223372036854775807 无符号: 0-18446744073709551615 floa

SQL中循环和条件语句

1 1.if语句使用示例: 2 declare @a int 3 set @a=12 4 if @a>100 5 begin 6 print @a 7 end 8 else 9 begin 10 print 'no' 11 end 12 13 2.while语句使用示例: 14 declare @i int 15 set @i=1 16 while @i<30 17 begin 18 insert into test (userid) values(@i) 19 set @i=@i+1 20

sql中的 IF 条件语句的用法

IF 表达式 IF( expr1 , expr2 , expr3 ) expr1 的值为 TRUE,则返回值为 expr2 expr2 的值为FALSE,则返回值为 expr3 如下: SELECT IF(TRUE,1+1,1+2); -> 2 SELECT IF(FALSE,1+1,1+2); -> 3 SELECT IF(STRCMP("111","222"),"不相等","相等"); -> 不相等 1

sql 视图 按where条件多个字段取一个

首先介绍一下 Case ..When...Then..End  的用法: CASEJiXiaoFind_RowID  WHEN '1' THENJiXiao_Money1 WHEN '2' THEN JiXiao_Money2 WHEN '3' THEN JiXiao_Money3 WHEN '4' THEN JiXiao_Money4 ELSE JiXiao_Money5 END 举例说明: 上图是一个视图的截图,我想在 表B 中添加一个字段 JiXiao_Money(绩效金额): 如果 Ji

SQL视图&amp;触发器

SQL视图 在 SQL 中,视图是基于 SQL 语句的结果集的可视化的表. 视图包含行和列,就像一个真实的表.视图中的字段就是来自一个或多个数据库中的真实的表中的字段.我们可以向视图添加 SQL 函数.WHERE 以及 JOIN 语句,我们也可以提交数据,就像这些来自于某个单一的表. SQL CREATE VIEW 语法 CREATE VIEW view_name AS SELECT column_name(s) FROM table_name WHERE condition 视图的优点:1,可

[玩转SQL]:02 条件语句与排序

SELECT 更高的用法可以使用WHERE提供查询条件. WHERE语句 语法: SELECT * | {[DISTINCT] column|expression [alias]...} FROM   table [WHERE condition(s)]; 通过WHERE后边子句的表达返回True or False来判断是否满足条件. WHERE子句不可以使用别名. WHERE通常跟在FROM后边. --查询deparment_id为90的列 SELECT employee_id,last_na

sql 视图的作用(转http://www.cup.edu.cn/nic/Programing/database/34943.htm)

前段时间作项目中,遇到使用视图的问题,以前的工作中很少遇到视图,认为直接用表就ok了,何须视图呢?下面我来讲述一下它的功用:以往当我们查询数据时,一定要很认真的地从设计select语句开始,将需要查询的每个字段写在sql语句里, 前段时间作项目中,遇到使用视图的问题,以前的工作中很少遇到视图,认为直接用表就ok了,何须视图呢?下面我来讲述一下它的功用:以往当我们查询数据时,一定要很认真的地从设计select语句开始,将需要查询的每个字段写在sql语句里,每次你要以同样的条件来查询数据时,那么每次

MySQL必知必会读书笔记-8(表的操纵,视图,存储过程,游标,触发器)

1--表的操作 创建一个表 在创建表的时候应确保这个表之前不存在,若之前存在则应删除之后再创建 AUTO_INCREMENT表示自动增加 使用默认值的话,在列定义后加DEFAULT 常量,表示默认初始化为一个常量 更新一个表 添加一个列 删除一个列 定义外键 删除表 重命名一个表 2--视图 什么是视图 视图是一个虚拟的表,它与普通的表不一样,视图只包含使用时动态数据的查询. 举例: 搜索买了某个产品的客户的信息的查询语句,我们可以将其包装成为一个虚拟表productcustomers, 使用这

SQL 视图

视图: 1.视图的概述       视图其实就是一条查询sql语句,用于显示一个或多个表或其他视图中的相关数据.视图将一个查询的结果作为一个表来使用,因此视图可以被看作是存储的查询或一个虚拟表.视图来源于表,所有对视图数据的修改最终都会被反映到视图的基表中,这些修改必须服从基表的完整性约束,并同样会触发定义在基表上的触发器.(Oracle支持在视图上显式的定义触发器和定义一些逻辑约束) 2.视图的存储       与表不同,视图不会要求分配存储空间,视图中也不会包含实际的数据.视图只是定义了一个