一.视图


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 @n=@n+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 @ersum=@ersum+@@ERROR --如果不出错这里还是0,如果错了,这里将不是0
update bank set HeMoney=HeMoney+100 where ID=he ---给我朋友卡里加上1000
set @ersum=@ersum+@@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表都为系统自动生成的,不是我们操作的表。


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

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

  1. SQL中循环和条件语句

    .if语句使用示例: declare @a int begin print @a end else begin print 'no' end .while语句使用示例: declare @i int ...

  2. sql中的 IF 条件语句的用法

    IF 表达式 IF( expr1 , expr2 , expr3 ) expr1 的值为 TRUE,则返回值为 expr2 expr1 的值为FALSE,则返回值为 expr3 如下: SELECT ...

  3. sql 视图 按where条件多个字段取一个 分类: SQL Server 2014-12-01 14:09 308人阅读 评论(0) 收藏

    首先介绍一下 Case ..When...Then..End  的用法: CASEJiXiaoFind_RowID  WHEN '1' THENJiXiao_Money1  WHEN '2' THEN ...

  4. SQL 视图 临时表 存储过程 索引 事务

    视图: 视图是按照你的sql语句生成的一个虚拟的东西,本身并不占数据库的空间 创建视图 create view view_1 as select id from table_1 当你表里的数据增加或者 ...

  5. SQL中的全局变量和局部变量(@@/@)

    在SQL中,我们常常使用临时表来存储临时结果,对于结果是一个集合的情况,这种方法非常实用,但当结果仅仅是一个数据或者是几个数据时,还要去建一个表,显得就比较麻烦,另外,当一个SQL语句中的某些元素经常 ...

  6. SQL视图&触发器

    SQL视图 在 SQL 中,视图是基于 SQL 语句的结果集的可视化的表. 视图包含行和列,就像一个真实的表.视图中的字段就是来自一个或多个数据库中的真实的表中的字段.我们可以向视图添加 SQL 函数 ...

  7. 第二百八十七节,MySQL数据库-条件语句、循环语句、动态执行SQL语句

    MySQL数据库-条件语句.循环语句.动态执行SQL语句 1.if条件语句 delimiter \\ CREATE PROCEDURE proc_if () BEGIN ; THEN ; ELSEIF ...

  8. mybatis报错:sql中有条件语句时出现属性没有getter的异常

    Mybatis问题:在使用条件语句动态设置SQL语句时出现如下错误 Caused by: org.apache.ibatis.reflection.ReflectionException: There ...

  9. MySQL 第十天(视图、存储过程、函数、触发器)

    MySql高级-视图.函数.存储过程.触发器 目录 一.视图    1 1.视图的定义    1 2.视图的作用    1 (1)可以简化查询.    1 (2)可以进行权限控制,    3 3.查询 ...

随机推荐

  1. mysql——查询重复数据,及删除重复数据只保留一条数据

    查询 text 表中,user_name字段值重复的数据及重复次数 select user_name,count(*) as count from text 删除 text 表中,重复出现的数据只保留 ...

  2. 吐血分享:QQ群霸屏技术教程(利润篇)

    QQ群技术,不论日进几百,空隙时间多的可以尝试,日进100问题不大. QQ群技术,如何赚钱,能赚多少钱?不同行业,不同关键词,不同力度,不一样的产出. 群费 群费,这个和付费群是有区别的,群费在手机端 ...

  3. ruby Logger日志

    1.logger创建 # 输出到标准输出 logger = Logger.new(STDERR) logger = Logger.new(STDOUT) # 输出到指定文件 logger = Logg ...

  4. java元注解(注解在注解上的注解)

    //ElementType.TYPE 给类.接口.枚举上使用 @Target(ElementType.TYPE)//给注解进行注解,表示该注解可以用在什么地方 //@Retention(Retenti ...

  5. hdu畅通工程(并查集)

    Problem Description 某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇.省政府“畅通工程”的目标是使全省任何两个城镇间都可以实现交通(但不一定有直接的道 ...

  6. PIC32MZ 通过U盘在线升级 -- USB Host bootloader

    了解bootloader的实现,请加QQ: 1273623966(验证填bootloader); 欢迎咨询或定制bootloader; 我的博客主页 www.cnblogs.com/geekygeek ...

  7. I两种冒泡算法

    两种冒泡算法: 第一个循环,I 定位当前坐标,第二个循环 把 I 之后的每个数都与 I 比较(比 I 小的都去坐标I),第二个循环之后 坐标 I 为数组里最小的数值. 效率比较高的冒泡算法: stat ...

  8. 为什么在默认情况下无法修改被block捕获的变量? __block都做了什么?

    默认情况下,block里面的变量,拷贝进去的是变量的值,而不是指向变量的内存的指针.使用__block修饰后的变量,拷贝到block里面的就是指向变量的指针,所以我们就可以修改变量的值.

  9. Ubuntu 手机 app开发学习0

    # 相关网址 http://developer.ubuntu.com/zh-cn/apps/sdk/ 0. 环境搭建 首选需要一个Ubuntu 14.04操作系统.没啥好讲的,直接安装了一个虚拟机. ...

  10. (3)分布式下的爬虫Scrapy应该如何做-递归爬取方式,数据输出方式以及数据库链接

    放假这段时间好好的思考了一下关于Scrapy的一些常用操作,主要解决了三个问题: 1.如何连续爬取 2.数据输出方式 3.数据库链接 一,如何连续爬取: 思考:要达到连续爬取,逻辑上无非从以下的方向着 ...