事务处理

动作

  开始事务:start transaction

  提交事务:commit

  回滚事务:rollback

  设置自动提交:set autocommit 1 | 0

autoCommit系统默认是1立即提交模式;0手动控制事务。

  1. Eg:
  2. start transaction;
  3. select @result :=avg(age) from temp;
  4. update temp set age = @result where id = 2;
  5. select * from temp where id = 2;//值被改变
  6. rollback;//回滚
  7. select * from temp where id = 2;//变回来了

不能回滚的语句

  有些语句不能被回滚,比如创建或取消数据库的语句、创建取消或更改表或存储的子程序的语句

  设计事务时,不应该包含这类语句。

  如果在事务的前部中分布了一个不能被回滚的语句,则后部的其它语句会发生错误,在这些情况下,通过发布rollback语句不能回滚事务的全部效果。

一些操作也会隐式的提交事务

  如:alter, create, drop, rename table, lock table, set autocommit, start transaction, truncate table等等,在事务中出现这些语句也会提交事务的。

  事务不能嵌套事务

事务的保存点

  savepoint pointName/Rollback to savepoint pointName

  一个事务可以设置多个保存点,rollback可以回滚到指定的保存点,恢复保存点后面的操做。

  如果有后面的保存点和前面的同名,则删除前面的保存点。

  release savepoint会删除一个保存点,如果在一段事务中执行commit或rollback,则事务结束,所以保存点删除。

二、 存储过程

系统存储过程

  系统存储过程是系统创建的过程,目的在于能够方便的从系统表中查询信息或完成与更新数据库表相关的管理任务或其它的系统管理任务。

  系统存储过程主要存储在master数据库,以"sp"下划线开头的存储过程。

常用系统存储过程

  1. exec sp_databases; --查看数据库
  2. exec sp_tables; --查看表
  3. exec sp_columns student; --查看列
  4. exec sp_helpIndex student; --查看索引
  5. exec sp_helpConstraint student; --约束
  6. exec sp_stored_procedures;
  7. exec sp_helptext 'sp_stored_procedures'; --查看存储过程创建、定义语句
  8. exec sp_rename student, stuInfo; --修改表、索引、列的名称
  9. exec sp_renamedb myTempDB, myDB; --更改数据库名称
  10. exec sp_defaultdb 'master', 'myDB'; --更改登录名的默认数据库
  11. exec sp_helpdb; --数据库帮助,查询数据库信息
  12. exec sp_helpdb master;

系统存储过程示例

  1. --表重命名
  2. exec sp_rename 'stu', 'stud';
  3. select * from stud;
  4. --列重命名
  5. exec sp_rename 'stud.name', 'sName', 'column';
  6. exec sp_help 'stud';
  7. --重命名索引
  8. exec sp_rename N'student.idx_cid', N'idx_cidd', N'index';
  9. exec sp_help 'student';
  10.  
  11. --查询所有存储过程
  12. select * from sys.objects where type='P';
  13. select * from sys.objects where type_desc like '%pro%' and name like 'sp%';

自定义存储过程

1、创建语法

  1. create proc | procedure pro_name
  2. [   
  3. {@参数数据类型} [=默认值] [output],
  4. {@参数数据类型} [=默认值] [output],
  5. ....
  6. ]
  7. as
  8. SQL_statements

创建不带参数存储过程:

  1. //创建存储过程
  2. create procedure get(out result int)
  3. begin
  4. select max(age) into result from temp;
  5. end
  6. //调用存储过程
  7. call get(@temp);
  8. //查询结果
  9. select @temp;
  10. //删除存储过程
  11. drop procedure get;
  12. //查看存储过程创建语句
  13. show create procedure get;
  1. //select....into 可以完成单行记录的赋值
  2. create procedure getRecord(sid int)
  3. begin
  4. declare v_name varchar(20) default 'jason';
  5. declare v_age int;
  6. declare v_sex bit;
  7. select name, age, sex into v_name, v_age, v_sex from temp where id = sid;
  8. select v_name, v_age, v_sex;
  9. end;
  10. call getRecord(1);

创建带参存储过程

  1. create proc proc_find_stu(@startId int, @endId int)
  2. as
  3. select * from student where id between @startId and @endId
  4. go
  5.  
  6. exec proc_find_stu 2, 4;

带输出参数存储过程

  1. create proc proc_getStudentRecord(
  2. @id int, --默认输入参数
  3. @name varchar(20) out, --输出参数
  4. @age varchar(20) output--输入输出参数
  5. )
  6. as
  7. select @name = name, @age = age from student where id = @id and sex = @age;
  8. go
  9.  
  10. --
  11. declare @id int,
  12. @name varchar(20),
  13. @temp varchar(20);
  14. set @id = 7;
  15. set @temp = 1;
  16. exec proc_getStudentRecord @id, @name out, @temp output;
  17. select @name, @temp;
  18. print @name + '#' + @temp;

MySQL之事务处理、存储过程的更多相关文章

  1. mysql的事务处理与锁表

    数据库的事务处理可以保证一组处理结果的正确性.mysql中只有INNODB和BDB引擎的数据表才支持事务处理,对于不支持事务的MyISAM引擎数据库可以使用表锁定的方法来实现相同的功能. mysql的 ...

  2. mysql(函数,存储过程,事务,索引)

    函数 MySQL中提供了许多内置函数: 内置函数 一.数学函数 ROUND(x,y) 返回参数x的四舍五入的有y位小数的值 RAND() 返回0到1内的随机值,可以通过提供一个参数(种子)使RAND( ...

  3. MySql通用分页存储过程

    MySql通用分页存储过程 1MySql通用分页存储过程 2 3过程参数 4p_cloumns varchar(500),p_tables varchar(100),p_where varchar(4 ...

  4. mysql 中创建存储过程

    mysql中创建存储过程和存储函数虽相对其他的sql语言相对复杂,但却功能强大,存储过程和存储函数更像是一种sql语句中特定功能的一种封装,这种封装可以大大简化外围调用语句的复杂程度. 首先以表emp ...

  5. mysql 自己定义存储过程和触发器

    mysql 自己定义存储过程和触发器 --存储过程示范 DROP PROCEDURE IF EXISTS PRO_TEST; CREATE PROCEDURE PRO_TEST(IN NUM_IN I ...

  6. MySql数据库学习--存储过程(1)

    在MySQL 5中,终于引入了存储过程这一新特性,这将大大增强MYSQL的数据库处理能力.在本文中将指导读者快速掌握MySQL 5的存储过程的基本知识,带领用户入门. 存储过程介绍 存储过程是一组为了 ...

  7. mysql的分页存储过程,能够传出总记录数

    最近用mysql + asp.net来写网站,既然mysql已经支持存储过程了,那么像分页这么常用的东西,当然要用存储过程啦 不过在网上找了一些,发现都有一个特点——就是不能传出总记录数,干脆自己研究 ...

  8. 关于mysql触发器和存储过程的理解

    内容源自:一篇很棒的 MySQL 触发器学习教程 一.触发器概念 触发器(trigger):监视某种情况,并触发某种操作,它是提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊 ...

  9. MySQL中的存储过程和函数使用详解

    一.对待存储过程和函数的态度 在实际项目中应该尽量少用存储过程和函数,理由如下: 1.移植性差,在MySQL中的存储过程移植到sqlsever上就不一定可以用了. 2.调试麻烦,在db中报一个错误和在 ...

  10. MySQL数据库之存储过程与存储函数

    1 引言 存储过程和存储函数类似于面向对象程序设计语言中的方法,可以简化代码,提高代码的重用性.本文主要介绍如何创建存储过程和存储函数,以及存储过程与函数的使用.修改.删除等操作. 2 存储过程与存储 ...

随机推荐

  1. 50道经典的JAVA编程题(36-40)

    50道经典的JAVA编程题(36-40),今天晚上心情压抑,不爽,继续做题,管它明天考试,我继续我的java,一个周末都在看微机原理看得的很头疼啊~明天该挂科就挂吧,不在乎了~~~ [程序36] Ar ...

  2. 【Hadoop代码笔记】Hadoop作业提交之JobTracker等相关功能模块初始化

    一.概要描述 本文重点描述在JobTracker一端接收作业.调度作业等几个模块的初始化工作.想过模块的介绍会在其他文章中比较详细的描述.受理作业提交在下一篇文章中会进行描述. 为了表达的尽可能清晰一 ...

  3. 解决各大浏览器兼容问题hack

    解决各大浏览器兼容问题hack,IE6/ IE7/ IE8/ IE9/ Firefox/ Opera/ Webkit/ Chrome/ Safari. 浏览器兼容是网站前端页面制作最基本的问题,通常I ...

  4. python 使用__future__

    Python的每个新版本都会增加一些新的功能,或者对原来的功能作一些改动.有些改动是不兼容旧版本的,也就是在当前版本运行正常的代码,到下一个版本运行就可能不正常了. 从Python 2.7到Pytho ...

  5. C# 产生随机密码

    using System.Web.Security var rawPassword = System.Web.Security.Membership.GeneratePassword(10,1) re ...

  6. UVa 127 - "Accordian" Patience

    题目:52张扑克,从左到右在平面上排列,按着如下规则处理: 1.按照从左到右的顺序,如果一张牌和左边的第一张或者第三张匹配,就把它放到对应的牌上面. 2.如果可以移动到多个位置,移动到最左端的牌上面. ...

  7. win10中android studio中的terminal不能输入

    1 打开CMD窗口右击           2    3 重启电脑,你试试就知道了.  

  8. DDD 领域驱动设计-谈谈 Repository、IUnitOfWork 和 IDbContext 的实践

    http://www.cnblogs.com/xishuai/p/ddd-repository-iunitofwork-and-idbcontext.html

  9. PowerDesigner 面向对象模型(OOM)

    PowerDesigner 面向对象模型(OOM)说明 nulljavasystemstringpowerbuilderclass   目录(?)[+]   一.     OOM 简介 Object- ...

  10. yarn 集群部署,遇到的问题小结

    版本号信息: hadoop 2.3.0  hive 0.11.0 1. Application Master 无法訪问     点击application mater 链接,出现 http 500 错 ...