sql 存储过程、事务、视图、触发器

1存储过程
1.1存储的格式
create proc name
as
begin
语句
end
1.2执行存储
exec name
1.3无参数
--创建存储过程
if (exists (select * from sys.objects where name = ‘sstudent‘))
drop proc sstudent
go
creates student
as
select * from student;

--调用、执行存储过程
exec student;
1.4带参数
--带参存储过程
create proc  stu

@startId int,

@endId int
as
select * from student where id between @startId and @endId
go

exec stu 2, 4;
1.5 输出参数
create proc get
@id int, --默认输入参数
@name varchar(20) out, --输出参数
@age varchar(20) output--输入输出参数
as
select @name = name, @age = age from student where id = @id and sex = @age;
go

--
declare @id int,
@name varchar(20),
@temp varchar(20);
set @id = 7;
set @temp = 1;
exec get @id, @name out, @temp output;
select @name, @temp;
print @name + ‘#‘ + @temp;

2视图
2.1创建视图
(1)使用视图向导

(2)使用语句
create view cang--创建视图的语法
as --as和go中间放上我所需要的一个查询语句
查询语句
go
2.2查看信息
select *from view_name

3事务
3.1开始事务
begin tran name
3.2提交事务
commit tran
3.3回滚事务
rollback tran

4触发器
4.1 delect
create trigger 触发的表名,delect
on 触发的表名
instead of delect
as
语句
go
instead of 替换
for 执行完成delect再触发
after执行完delect再触发
4.2 update
同上,将delect换成update
4.3 insert
同上,将delect换成update

练习
use lianxi
go
create table jin
(jcode int primary key,--序号
jname varchar(20), --商品名称
)
create table chu
(
ccode int primary key,--序号
cname varchar(20), --商品名称
cshu decimal(18,2), --出货数量
cjia decimal(18,2), --单价
cj int,
)

create table piao
(
pcode int primary key identity(101,1),--序号
pcname varchar(20), --商品名称
pshu decimal(18,2), --数量
pjia decimal(18,2) , --单价
pzong decimal(18,2),
)
go

insert into jin values(101,‘摩托罗拉公司‘)
insert into jin values(102,‘苹果公司‘)
insert into jin values(103,‘诺基亚公司‘)
insert into jin values(104,‘索尼公司‘)

insert into chu values(1001,‘iphone 3gs‘,10,600,102)
insert into chu values(1002,‘iphone 4‘,15,998,102)
insert into chu values(1003,‘iphone 5‘,20,2800,102)
insert into chu values(1004,‘iphone 5s‘,22,3300,102)
insert into chu values(1005,‘VB‘,10,300,101)
insert into chu values(1006,‘Mileston‘,7,600,101)
insert into chu values(1007,‘N95‘,8,350,103)
insert into chu values(1008,‘5320XM‘,10,450,103)
insert into chu values(1009,‘L36H‘,14,180,104)
insert into chu values(1010,‘L39H‘,10,2780,102)
go
select *from jin
delete from chu
select *from chu
--在没有此货物并且为进货时,添加上这一行信息;
--在没有此货物并且为出货时,打印没有此货物!

if (exists (select * from sys.objects where name = ‘cunchu‘))
drop proc cunchu
go
create proc cunchu
@ccode int,
@cname varchar(20),
@cshu decimal(18,2),
@cjia decimal(18,2),
@cj int
as
begin
declare @shu decimal(18,2)
declare @count int
select @count=COUNT(*) from chu where [email protected]
select @shu=cshu from chu where [email protected]
if @COUNT>0
begin
if @cshu >0
update chu set [email protected] where [email protected]
if @cshu <0
if @cshu+ @shu >0
begin
update chu set [email protected] where [email protected]
declare @zong decimal(18,2)
declare @xcshu decimal(18,2)
set @[email protected]
set @[email protected]*@cshu
insert into piao values(@cname,@xcshu,@cjia,@zong)
end
if @cshu+ @shu <=0
print ‘请及时补充货物‘
end
else
begin
if @cshu>0
insert into chu values(@ccode,@cname,@cshu,@cjia,@cj)
if @cshu<0
print ‘没有此货物‘
end
end
go

select *from chu
exec cunchu @ccode=1001,@cname=‘iphone 3gs‘,@cshu=10,@cjia=600,@cj=102
exec cunchu @ccode=1001,@cname=‘iphone 3gs‘,@cshu=-5,@cjia=600,@cj=102
select *from piao
exec cunchu @ccode=1021,@cname=‘iphone 3gs‘,@cshu=10,@cjia=600,@cj=102
exec cunchu @ccode=1022,@cname=‘iphone 3gs‘,@cshu=-10,@cjia=600,@cj=102

时间: 2024-10-10 03:47:10

sql 存储过程、事务、视图、触发器的相关文章

SQL表连接视图触发器事务存储过程

trancate 删除    公共表表达式  修改视图 表联合:union列数目没变化,可以将结果集合并,没有改变结果的结构.多个select.行数增加而已. 表连接 改变列的数目,3列和9列的表合并成12列的表称为连接 交叉连接:cross两个表的笛卡尔积.生成辅助表,用老数据优化,需要1234纯数字连续据表 creat table num15 ( num int ) insert into num15 内连接: 外连接:

PL/SQL&amp;存储过程||存储函数&amp;触发器

plsql 有点:交互式  非过程化   数据操纵能力强   自动导航语句简单   调试简单   想率高 声明类型的方式 1.基本类型 2.引用变量 3.记录型变量 基本格式 declare 声明 begin exception end 判断语句 if:..then... else end if: 循环 loop 退出条件   exit when ...; end loop: 光标 cursor ---resltSet 返回多行数据 格式 cursor 表明 oper 打开 fetch 去一行光

Mysql之视图 触发器 事务 存储过程 函数

视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,可以将该结果集当做表来使用. 使用视图我们可以把查询过程中的临时表摘出来,用视图去实现,这样以后再想操作该临时表的数据时就无需重写复杂的sql了,直接去视图中查找即可,但视图有明显地效率问题,并且视图是存放在数据库中的,如果我们程序中使用的sql过分依赖数据库中的视图,即强耦合,那就意味着扩展sql极为不便,因此并不推荐使用 #两张有关系的表 mysql> se

事务视图存储过程触发器数据备份

目录 事务 事务的特性 原子性(Atomicity): 一致性(Consistency): 隔离性(Isolation): 持久性(Durability): 存储引擎 InnoDB :保时捷引擎 MyIsam:奔奔引擎 视图 使用 增加视图 删除视图 触发器 存储过程 创建 函数 数据库的备份 语法 示列 事务 通俗的说,事物指一组操作,要么都执行成功,要么都执行失败 使用事务: start transactino sql语句 commit/rowllback # 演示: mysql> sele

MySQL拓展 视图,触发器,事务,存储过程,内置函数,流程控制,索引,慢查询优化

视图: 1.什么是视图 视图就是通过查询得到一张虚拟表,然后保存下来,下次直接使用即可 2.为什么要用视图 如果要频繁使用一张虚拟表,可以不用重复查询 3.如何使用视图 create view teacher2course as select * from teacher inner join course on teacher.tid = course.teacher_id; 强调: (1)在硬盘中,视图只有表结构文件,没有表结构数据 (2)视图通常是用于查询,尽量不要修改视图中的数据 dro

Mysql学习---视图/触发器/存储过程/函数/索引 180101

视图 视图: 视图是一个虚拟表(非真实存在),动态获取数据,仅仅能做查询操作 本质:[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,并可以将其当作表来使用.由于视图是虚拟表,所以无法使用其对真实表进行创建.更新和删除操作,PyMysql是支持视图的. 仅能做查询用. 创建视图: create VIEW stu as select * from student; # 这里只是建立了一个对应关系,视图是虚表,动态获取数据 select * from stu;

视图 触发器 存储过程 函数 流程过程 索引 慢查询

视图 触发器 存储过程 函数 流程过程 索引 慢查询 视图 触发器 事务 存储过程 内置函数 流程控制 索引 视图 1.什么是视图 ? 视图就是通过查询得到一张虚拟表,然后保存下来,下次直接使用即可 2.为什么要用视图 ? 如果要频繁使用一张虚拟表,可以不用重复查询 3.如何用视图 create view teacher2course as select * from teacher inner join course on teacher.tid = course.teacher_id; 强调

SQL 存储过程入门(事务)(四)

SQL 存储过程入门(事务)(四) 本篇我们来讲一下事务处理技术. 为什么要使用事务呢,事务有什么用呢,举个例子. 假设我们现在有个业务,当做成功某件事情的时候要向2张表中插入数据,A表,B表,我们插入的顺序是先插入A,再插入B表,如果都顺利插入成功了,当然没有问题,如果任意一张表插入失败了,而另一张表插入成功了,插入成功的表就是垃圾数据了.我们要判断,任意一张表插入失败都回滚,就是都不插入,这就是事务的基本使用. 一,sql事务定义 所谓事务是用户定义的一个数据库操作序列,是一个不可分割的工作

sql存储过程和事务的应用

在去年,学习数据库的时候就学过存储过程了.一直都只知道一些理论,却不知道如何去使用.时隔一年,终于找到如何使用存储过程了. 在机房收费系统中,有些操作,需要多次执行sql语句,多次执行完成才算是完成这个事件流.但是如果其中有一个环节出了错误,那么没出错误的那些操作是不是就多余了. 执行存储过程,就是执行多句SQl语句.而事务,是为了控制这些语句 要么都做,要么 都不做. 在机房收费系统中,执行sql语句的时候. 一般的sql语句使用方法:定义一个字符串,用于存放sql语句.之后指明command

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,可