存储过程:
        预先用SQL语句写好的,并用存储起来,如果需要的数据库提供与定义好的存储过程的功能相同时,只要调用execute()方法,即可执行。

触发器:
        个人认为是一种特殊的存储过程,因为它是当运行到标签所在的位置时,才触发这个SQL语名的功能.

事务:
       事务就是一个单元的工作,包括一系列的操作,这些操作要么全部成功,要么全部失败。
锁:
       锁就是保护指定的资源,不被其他事务操作。

事务和锁的特点

事务的特点:

1. 事务是一个单元的工作,要么全做,要么全不做

2. 事务保证操作的一致性和可恢复性

3. 每一条Transact-SQL语句都可以是一个事务

4. 实际使用的事务是用户定义的事务,它包括一系列操作或者语句

5. 在多服务器环境中,使用用户定义的分布式事务,保证操作的一致性

锁的特点:

1. 锁是保证并发控制的手段

2. 可以锁定的资源包括行、页、簇、表和数据库

3. 锁的类型主要包括共享锁和排它锁

4. 特殊类型的锁包括意图锁、修改锁和模式锁

5. 共享锁允许其他事务继续使用锁定的资源

6. 排它锁只允许一个事务访问数据

7. 系统本身可以处理死锁

8. 用户可以根据实际情况定制锁的一些特征

======================================================

--创建数据库 scroll dynamic
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

存储过程,触发器,事务和锁相关推荐

  1. 存储过程-触发器-事务

    一.存储过程 存储过程(StoredProcedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给 ...

  2. 学习MySQLl06《存储过程与事务》

    存储引擎 - 存储过程 - 触发器 - 事务 Mysql逻辑架构图主要分三层: (1)第一层负责连接处理,授权认证,安全等等 (2)第二层负责编译并优化SQL (3)第三层是存储引擎 1.什么是存储引 ...

  3. WebDay18 MySQL存储过程 存储函数 触发器 事务

    MySQL存储过程 存储函数 触发器 事务 一.MySQL存储过程和函数 1.存储过程和函数的概念 2.存储过程和函数的好处 3.存储过程和函数的区别 4.创建存储过程 5.调用存储过程 6.查看存储 ...

  4. MySQL视图触发器存储过程内外链接数据锁

    MySQL视图触发器存储过程内外链接数据锁 视图 什么是视图 是一个虚拟表,其内容由查询定义.同真实的一样,视图包含一系列带有名称的列和行数据 视图有什么用 视图的作用就是缓存数据,可以这么理解,我把 ...

  5. MySQL视图,触发器,事务,存储过程,函数

    create triggr triafterinsertcmdlog after insert on cmd_log FOR EACH ROW trigger_body .#NEW : 代表新的记录 ...

  6. MySQL-视图-触发器-事务-存储过程-函数-流程控制-索引与慢查询优化-06

    目录 视图*** 什么是视图 为什么要用视图 如何生成视图 修改视图 --> 最好(千万)不要 关联表数据改动前 关联表数据改动之后 触发器 什么是触发器 触发条件 触发器语法结构 修改mysq ...

  7. SQL Server中的事务与锁

    了解事务和锁 事务:保持逻辑数据一致性与可恢复性,必不可少的利器. 锁:多用户访问同一数据库资源时,对访问的先后次序权限管理的一种机制,没有他事务或许将会一塌糊涂,不能保证数据的安全正确读写. 死锁: ...

  8. mySQL教程 第10章 事务和锁

    第10章 事务和锁 数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列操作. 事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据 ...

  9. MySQL存储过程之事务管理

    MySQL存储过程之事务管理 ACID:Atomic.Consistent.Isolated.Durable  存储程序提供了一个绝佳的机制来定义.封装和管理事务. 1,MySQL的事务支持  MyS ...

最新文章

  1. 2020年春季学习信号与系统课程作业参考答案-第十一次作业
  2. tabs选项卡切换效果(jquery版)
  3. Android设备音频部分一些概念
  4. Flash中的SLC/MLC/MLC--基础
  5. 安装Ubuntu版本linux过程中没有提示设置root用户密码问题的解决办法
  6. linux mmap 内存映射 mmap() vs read()/write()/lseek()
  7. 用户暴增下的收入降低,AWS面临尴尬
  8. c语言exit_看了这几个C语言例子,你一定会说5个哇塞,声音一次比一次大
  9. 计算图片相似度的方法
  10. SpringCloud(二) 生产者、消费者工程搭建与调用(下)
  11. python 二叉树递归时明明已经得到了结果,但是返回None
  12. ensp期末综合实验_时间表来了!洛阳中小学期末考试25日开始
  13. lu分解法matlab_MIT 18.065—机器学习中的矩阵方法02 矩阵乘法与矩阵分解
  14. pytorch安装换源ubuntu_PyTorch入门之PyTorch的安装
  15. 关于IMX6Dl 芯片使用硬编解码的问题记录
  16. 自学c语言要下载什么软件下载,你学c语言用的什么app?
  17. python 华为交换机自动配置_对python连接华为交换机批量配置优化
  18. 2022广东省安全员A证第四批(主要负责人)判断题及模拟考试
  19. 基于滴滴云虚拟机的TensorFlow搭建与使用
  20. 小丸子学Docker系列之——实战Dockerfile

热门文章

  1. mysql数据首次导入hive_sqoop1.4.7环境搭建及mysql数据导入导出到hive
  2. pythonpackage详解_Python详解之包管理:__init__.py
  3. jTable保存到mysql_怎么把从数据库里的数据输到JTABLE里面
  4. 关于python pdb的描述_The python debugger(PDB)的简介
  5. 关于三维莫队问题的一些思考和探究
  6. python免安装版_web.py入门01——python安装
  7. filco蓝牙不好用_最新黑科技感应式音箱!无需接口不用蓝牙,放上手机 1s畅享动听音乐~...
  8. 人脸识别撞脸名画_与名画“撞脸”火爆数博会 观众直呼“太好玩”【高清组图】...
  9. 2021-07-01 和的平方与平方的和
  10. P4550 收集邮票-洛谷luogu