存储过程,触发器,事务和锁
存储过程:
预先用SQL语句写好的,并用存储起来,如果需要的数据库提供与定义好的存储过程的功能相同时,只要调用execute()方法,即可执行。
触发器:
个人认为是一种特殊的存储过程,因为它是当运行到标签所在的位置时,才触发这个SQL语名的功能.
事务:
事务就是一个单元的工作,包括一系列的操作,这些操作要么全部成功,要么全部失败。
锁:
锁就是保护指定的资源,不被其他事务操作。
事务和锁的特点
事务的特点:
1. 事务是一个单元的工作,要么全做,要么全不做
2. 事务保证操作的一致性和可恢复性
3. 每一条Transact-SQL语句都可以是一个事务
4. 实际使用的事务是用户定义的事务,它包括一系列操作或者语句
5. 在多服务器环境中,使用用户定义的分布式事务,保证操作的一致性
锁的特点:
1. 锁是保证并发控制的手段
2. 可以锁定的资源包括行、页、簇、表和数据库
3. 锁的类型主要包括共享锁和排它锁
4. 特殊类型的锁包括意图锁、修改锁和模式锁
5. 共享锁允许其他事务继续使用锁定的资源
6. 排它锁只允许一个事务访问数据
7. 系统本身可以处理死锁
8. 用户可以根据实际情况定制锁的一些特征
======================================================
create database StudentDB
GO
--置此数据库为当前数据库
use StudentDB
GO
--创建学生表
create table student
(
SId varchar(20) primary key, --学生编号
SName varchar(20), --学生姓名
SClass varchar(20), --学生班级
SSex varchar(10), --学生性别
SScore float default(0) check(SScore>=0) --学生平均分
)
GO
--创建课程表
create table class
(
EId varchar(20) primary key, --课程编号
EName varchar(20), --课程名称
ETime int check(ETime>=0) --课程课时
)
GO
--创建分数表
create table score
(
SId varchar(20), --学生编号
EId varchar(20), --课程编号
EScore float, --课程分数
primary key(SID,EID), --定义主码
foreign key (SID) references student(SID) on delete cascade, --声明及联删除
foreign key (EID) references class(EID) on delete cascade --声明及联删除
)
GO
--创建计算平均值得触发器
create trigger trigger_avg_insert on score for insert
as
begin transaction
declare @count int
update student set SScore=(select avg(EScore) from score where SId=(select SId from inserted)) where SId=(select SId from inserted)
select @count=@@error
if(@count=0)
commit transaction
else
rollback transaction
--创建计算平均值得触发器
create trigger trigger_avg_delete on score for delete
as
begin transaction
update student set SScore=(select avg(EScore) from score where SId=(select SId from deleted)) where SId=(select SId from deleted)
declare @count int
select @count=@@error
if(@count=0)
commit transaction
else
rollback transaction
--创建计算平均值得触发器
create trigger trigger_avg_update on score for update
as
begin transaction
declare @count int
update student set SScore=(select avg(EScore) from score where SId=(select SId from inserted)) where SId=(select SId from deleted)
select @count=@@error
if(@count=0)
commit transaction
else
rollback transaction
GO
--创建查询学生信息的存储过程
create proc proc_student_select
as
begin transaction
declare @count int
select * from student
select @count=@@error
if(@count=0)
commit transaction
else
rollback transaction
GO
--创建查找平均分存储过程
CREATE PROCEDURE proc_student_avg
(
@SID varchar(20)
)
AS
begin transaction
select avg(EScore) as SAvg from score where SId=@SId
declare @count int
select @count=@@error
if(@count=0)
commit transaction
else
rollback transaction
GO
--创建通过学号查询学生信息的存储过程
create proc proc_student_select_bySId
(
@SId varchar(20)
)
as
begin transaction
declare @count int
select * from student where SId=@SId
select @count=@@error
if(@count=0)
commit transaction
else
rollback transaction
GO
--创建插入学生信息的存储过程
create proc proc_student_insert
(
@SId varchar(20),
@SName varchar(20),
@SClass varchar(20),
@SSex varchar(10)
)
as
begin transaction
declare @count int
insert into student(SID,SName,SClass,SSex) values(@SId,@SName,@SClass,@SSex)
select @count=@@error
if(@count=0)
commit transaction
else
rollback transaction
GO
--删除学生信息的存储过程
create proc proc_student_delete
(
@SId varchar(20)
)
as
begin transaction
declare @count int
delete from student where SId=@SId
select @count=@@error
if(@count=0)
commit transaction
else
rollback transaction
GO
--修改学生信息的存储过程
create proc proc_student_update
(
@SId varchar(20),
@SName varchar(20),
@SClass varchar(20),
@SSex varchar(10)
)
as
begin transaction
declare @count int
update student set SName=@SName,SClass=@SClass,SSex=@SSex where SId=@SId
select @count=@@error
if(@count=0)
commit transaction
else
rollback transaction
GO
--创建查询课程信息的存储过程
create proc proc_class_select
as
begin transaction
declare @count int
select * from class
select @count=@@error
if(@count=0)
commit transaction
else
rollback transaction
GO
--创建通过课程号查询课程信息的存储过程
create proc proc_class_select_byEId
(
@EId varchar(20)
)
as
begin transaction
declare @count int
select * from class where EId=@EId
select @count=@@error
if(@count=0)
commit transaction
else
rollback transaction
--创建插入课程信息的存储过程
GO
create proc proc_class_insert
(
@EId varchar(20),
@EName varchar(20),
@ETime int
)
as
begin transaction
declare @count int
insert into class(EId,EName,ETime) values(@EId,@EName,@ETime)
select @count=@@error
if(@count=0)
commit transaction
else
rollback transaction
--创建删除课程信息的存错过程
GO
create proc proc_class_delete
(
@EId varchar(20)
)
as
begin transaction
declare @count int
delete from class where EId=@EId
select @count=@@error
if(@count=0)
commit transaction
else
rollback transaction
--创建修改课程信息的存储过程
GO
create proc proc_class_update
(
@EId varchar(20),
@EName varchar(20),
@ETime int
)
as
begin transaction
declare @count int
update class set EName=@EName,ETime=@ETime where EId=@EId
select @count=@@error
if(@count=0)
commit transaction
else
rollback transaction
GO
--创建查询成绩信息的存储过程
create proc proc_score_select
as
begin transaction
declare @count int
select * from score
select @count=@@error
if(@count=0)
commit transaction
else
rollback transaction
GO
--创建通过学号查询成绩信息的存储过程
create proc proc_score_select_bySId
(
@SId varchar(20)
)
as
begin transaction
declare @count int
select * from score where SId=@SId
select @count=@@error
if(@count=0)
commit transaction
else
rollback transaction
GO
--创建通过查询成绩信息的存储过程
create proc proc_score_select_byEId
(
@EId varchar(20)
)
as
begin transaction
declare @count int
select * from score where EId=@EId
select @count=@@error
if(@count=0)
commit transaction
else
rollback transaction
GO
--创建插入成绩信息的存储过程
create proc proc_score_insert
(
@SId varchar(20),
@EId varchar(20),
@EScore float
)
as
begin transaction
declare @count int
insert into score(SId,EId,EScore) values(@SId,@EId,@EScore)
select @count=@@error
if(@count=0)
commit transaction
else
rollback transaction
GO
--创建删除成绩信息的存错过程
create proc proc_score_delete
(
@SId varchar(20),
@EId varchar(20)
)
as
begin transaction
declare @count int
delete from score where SId=@SId and EId=@EId
select @count=@@error
if(@count=0)
commit transaction
else
rollback transaction
GO
--创建通过学号删除成绩信息的存错过程
create proc proc_score_delete_bySId
(
@SId varchar(20)
)
as
begin transaction
declare @count int
delete from score where SId=@SId
select @count=@@error
if(@count=0)
commit transaction
else
rollback transaction
GO
--创建通过课程号删除成绩信息的存错过程
create proc proc_score_delete_byEId
(
@EId varchar(20)
)
as
begin transaction
declare @count int
delete from score where EId=@EId
select @count=@@error
if(@count=0)
commit transaction
else
rollback transaction
GO
--创建修改成绩信息的存储过程
create proc proc_score_update
(
@SId varchar(20),
@EId varchar(20),
@EScore float
)
as
begin transaction
declare @count int
update score set EScore=@EScore where SId=@SId and EId=@EId
select @count=@@error
if(@count=0)
commit transaction
else
rollback transaction
GO
--创建查询学生所有信息的存储过程
create proc proc_student_one_information
(
@SId varchar(20)
)
as
begin transaction
declare @count int
select student.SName,student.SClass,student.SSex,class.EName,class.ETime,score.EScore,student.SScore from student,class,score where student.SId=score.SId and class.EId=score.EId and student.SId=@SId
select @count=@@error
if(@count=0)
commit transaction
else
rollback transaction
GO
--创建查询所有学生所有信息的存储过程
create proc proc_student_all_information
as
begin transaction
declare @count int
select student.SName,student.SClass,student.SSex,class.EName,class.ETime,score.EScore,student.SScore from student,class,score where student.SId=score.SId and class.EId=score.EId
select @count=@@error
if(@count=0)
commit transaction
else
rollback transaction
GO
--创建某个学生已经有了分数的课程
create proc proc_class_in
(
@SId varchar(20)
)
as
begin transaction
declare @count int
select class.EId,class.EName from class,score where class.EId=score.EId and score.SId=@SId
select @count=@@error
if(@count=0)
commit transaction
else
rollback transaction
GO
--创建某个学生没有分数的课程
create proc proc_class_notin
(
@SId varchar(20)
)
as
begin transaction
declare @count int
select EId,EName from class where EId not in (select EId from score where SId=@SId)
select @count=@@error
if(@count=0)
commit transaction
else
rollback transaction
转载于:https://www.cnblogs.com/hunter_gio/archive/2007/08/15/856548.html
存储过程,触发器,事务和锁相关推荐
- 存储过程-触发器-事务
一.存储过程 存储过程(StoredProcedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给 ...
- 学习MySQLl06《存储过程与事务》
存储引擎 - 存储过程 - 触发器 - 事务 Mysql逻辑架构图主要分三层: (1)第一层负责连接处理,授权认证,安全等等 (2)第二层负责编译并优化SQL (3)第三层是存储引擎 1.什么是存储引 ...
- WebDay18 MySQL存储过程 存储函数 触发器 事务
MySQL存储过程 存储函数 触发器 事务 一.MySQL存储过程和函数 1.存储过程和函数的概念 2.存储过程和函数的好处 3.存储过程和函数的区别 4.创建存储过程 5.调用存储过程 6.查看存储 ...
- MySQL视图触发器存储过程内外链接数据锁
MySQL视图触发器存储过程内外链接数据锁 视图 什么是视图 是一个虚拟表,其内容由查询定义.同真实的一样,视图包含一系列带有名称的列和行数据 视图有什么用 视图的作用就是缓存数据,可以这么理解,我把 ...
- MySQL视图,触发器,事务,存储过程,函数
create triggr triafterinsertcmdlog after insert on cmd_log FOR EACH ROW trigger_body .#NEW : 代表新的记录 ...
- MySQL-视图-触发器-事务-存储过程-函数-流程控制-索引与慢查询优化-06
目录 视图*** 什么是视图 为什么要用视图 如何生成视图 修改视图 --> 最好(千万)不要 关联表数据改动前 关联表数据改动之后 触发器 什么是触发器 触发条件 触发器语法结构 修改mysq ...
- SQL Server中的事务与锁
了解事务和锁 事务:保持逻辑数据一致性与可恢复性,必不可少的利器. 锁:多用户访问同一数据库资源时,对访问的先后次序权限管理的一种机制,没有他事务或许将会一塌糊涂,不能保证数据的安全正确读写. 死锁: ...
- mySQL教程 第10章 事务和锁
第10章 事务和锁 数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列操作. 事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据 ...
- MySQL存储过程之事务管理
MySQL存储过程之事务管理 ACID:Atomic.Consistent.Isolated.Durable 存储程序提供了一个绝佳的机制来定义.封装和管理事务. 1,MySQL的事务支持 MyS ...
最新文章
- 2020年春季学习信号与系统课程作业参考答案-第十一次作业
- tabs选项卡切换效果(jquery版)
- Android设备音频部分一些概念
- Flash中的SLC/MLC/MLC--基础
- 安装Ubuntu版本linux过程中没有提示设置root用户密码问题的解决办法
- linux mmap 内存映射 mmap() vs read()/write()/lseek()
- 用户暴增下的收入降低,AWS面临尴尬
- c语言exit_看了这几个C语言例子,你一定会说5个哇塞,声音一次比一次大
- 计算图片相似度的方法
- SpringCloud(二) 生产者、消费者工程搭建与调用(下)
- python 二叉树递归时明明已经得到了结果,但是返回None
- ensp期末综合实验_时间表来了!洛阳中小学期末考试25日开始
- lu分解法matlab_MIT 18.065—机器学习中的矩阵方法02 矩阵乘法与矩阵分解
- pytorch安装换源ubuntu_PyTorch入门之PyTorch的安装
- 关于IMX6Dl 芯片使用硬编解码的问题记录
- 自学c语言要下载什么软件下载,你学c语言用的什么app?
- python 华为交换机自动配置_对python连接华为交换机批量配置优化
- 2022广东省安全员A证第四批(主要负责人)判断题及模拟考试
- 基于滴滴云虚拟机的TensorFlow搭建与使用
- 小丸子学Docker系列之——实战Dockerfile
热门文章
- mysql数据首次导入hive_sqoop1.4.7环境搭建及mysql数据导入导出到hive
- pythonpackage详解_Python详解之包管理:__init__.py
- jTable保存到mysql_怎么把从数据库里的数据输到JTABLE里面
- 关于python pdb的描述_The python debugger(PDB)的简介
- 关于三维莫队问题的一些思考和探究
- python免安装版_web.py入门01——python安装
- filco蓝牙不好用_最新黑科技感应式音箱!无需接口不用蓝牙,放上手机 1s畅享动听音乐~...
- 人脸识别撞脸名画_与名画“撞脸”火爆数博会 观众直呼“太好玩”【高清组图】...
- 2021-07-01 和的平方与平方的和
- P4550 收集邮票-洛谷luogu