MySQL之事务处理、存储过程
事务处理
动作
开始事务:start transaction
提交事务:commit
回滚事务:rollback
设置自动提交:set autocommit 1 | 0
autoCommit系统默认是1立即提交模式;0手动控制事务。
Eg:
start transaction;
select @result :=avg(age) from temp;
update temp set age = @result where id = 2;
select * from temp where id = 2;//值被改变
rollback;//回滚
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"下划线开头的存储过程。
常用系统存储过程
exec sp_databases; --查看数据库
exec sp_tables; --查看表
exec sp_columns student; --查看列
exec sp_helpIndex student; --查看索引
exec sp_helpConstraint student; --约束
exec sp_stored_procedures;
exec sp_helptext 'sp_stored_procedures'; --查看存储过程创建、定义语句
exec sp_rename student, stuInfo; --修改表、索引、列的名称
exec sp_renamedb myTempDB, myDB; --更改数据库名称
exec sp_defaultdb 'master', 'myDB'; --更改登录名的默认数据库
exec sp_helpdb; --数据库帮助,查询数据库信息
exec sp_helpdb master;
系统存储过程示例
--表重命名
exec sp_rename 'stu', 'stud';
select * from stud;
--列重命名
exec sp_rename 'stud.name', 'sName', 'column';
exec sp_help 'stud';
--重命名索引
exec sp_rename N'student.idx_cid', N'idx_cidd', N'index';
exec sp_help 'student'; --查询所有存储过程
select * from sys.objects where type='P';
select * from sys.objects where type_desc like '%pro%' and name like 'sp%';
自定义存储过程
1、创建语法
create proc | procedure pro_name
[
{@参数数据类型} [=默认值] [output],
{@参数数据类型} [=默认值] [output],
....
]
as
SQL_statements
创建不带参数存储过程:
//创建存储过程
create procedure get(out result int)
begin
select max(age) into result from temp;
end
//调用存储过程
call get(@temp);
//查询结果
select @temp;
//删除存储过程
drop procedure get;
//查看存储过程创建语句
show create procedure get;
//select....into 可以完成单行记录的赋值
create procedure getRecord(sid int)
begin
declare v_name varchar(20) default 'jason';
declare v_age int;
declare v_sex bit;
select name, age, sex into v_name, v_age, v_sex from temp where id = sid;
select v_name, v_age, v_sex;
end;
call getRecord(1);
创建带参存储过程
create proc proc_find_stu(@startId int, @endId int)
as
select * from student where id between @startId and @endId
go exec proc_find_stu 2, 4;
带输出参数存储过程
create proc proc_getStudentRecord(
@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 proc_getStudentRecord @id, @name out, @temp output;
select @name, @temp;
print @name + '#' + @temp;
MySQL之事务处理、存储过程的更多相关文章
- mysql的事务处理与锁表
数据库的事务处理可以保证一组处理结果的正确性.mysql中只有INNODB和BDB引擎的数据表才支持事务处理,对于不支持事务的MyISAM引擎数据库可以使用表锁定的方法来实现相同的功能. mysql的 ...
- mysql(函数,存储过程,事务,索引)
函数 MySQL中提供了许多内置函数: 内置函数 一.数学函数 ROUND(x,y) 返回参数x的四舍五入的有y位小数的值 RAND() 返回0到1内的随机值,可以通过提供一个参数(种子)使RAND( ...
- MySql通用分页存储过程
MySql通用分页存储过程 1MySql通用分页存储过程 2 3过程参数 4p_cloumns varchar(500),p_tables varchar(100),p_where varchar(4 ...
- mysql 中创建存储过程
mysql中创建存储过程和存储函数虽相对其他的sql语言相对复杂,但却功能强大,存储过程和存储函数更像是一种sql语句中特定功能的一种封装,这种封装可以大大简化外围调用语句的复杂程度. 首先以表emp ...
- mysql 自己定义存储过程和触发器
mysql 自己定义存储过程和触发器 --存储过程示范 DROP PROCEDURE IF EXISTS PRO_TEST; CREATE PROCEDURE PRO_TEST(IN NUM_IN I ...
- MySql数据库学习--存储过程(1)
在MySQL 5中,终于引入了存储过程这一新特性,这将大大增强MYSQL的数据库处理能力.在本文中将指导读者快速掌握MySQL 5的存储过程的基本知识,带领用户入门. 存储过程介绍 存储过程是一组为了 ...
- mysql的分页存储过程,能够传出总记录数
最近用mysql + asp.net来写网站,既然mysql已经支持存储过程了,那么像分页这么常用的东西,当然要用存储过程啦 不过在网上找了一些,发现都有一个特点——就是不能传出总记录数,干脆自己研究 ...
- 关于mysql触发器和存储过程的理解
内容源自:一篇很棒的 MySQL 触发器学习教程 一.触发器概念 触发器(trigger):监视某种情况,并触发某种操作,它是提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊 ...
- MySQL中的存储过程和函数使用详解
一.对待存储过程和函数的态度 在实际项目中应该尽量少用存储过程和函数,理由如下: 1.移植性差,在MySQL中的存储过程移植到sqlsever上就不一定可以用了. 2.调试麻烦,在db中报一个错误和在 ...
- MySQL数据库之存储过程与存储函数
1 引言 存储过程和存储函数类似于面向对象程序设计语言中的方法,可以简化代码,提高代码的重用性.本文主要介绍如何创建存储过程和存储函数,以及存储过程与函数的使用.修改.删除等操作. 2 存储过程与存储 ...
随机推荐
- ZOJ3469 Food Delivery 区间DP
题意:有一家快餐店送外卖,现在同时有n个家庭打进电话订购,送货员得以V-1的速度一家一家的运送,但是每一个家庭都有一个不开心的值,每分钟都会增加一倍,值达到一定程度,该家庭将不会再订购外卖了,现在为了 ...
- C++默认参数不能是一个引用
引用做参数时不能传一个定值(如数字或者const等~~~) somefunc(int& a = 4) -> default argument for ‘int& a’ has t ...
- 使用poi将word转换为html
使用poi将word转换为html,支持doc,docx,转换后可以保持文字.表格.图片.样式 演示地址: https://www.xiaoyun.studio/app/preview.html 完整 ...
- 取消jQuery validate验证
有时候当我们在编辑页面点保存后加上了validate错误验证后又想用表单提交的方式返回界面没有清除验证就返回不了 加上这句话就清除验证了 注意:remove()是删除了相关标签 我这需求是 ...
- 最牛X的编码套路
最近,我大量阅读了Steve Yegge的文章.其中有一篇叫"Practicing Programming"(练习编程),写成于2005年,读后令我惊讶不已: 与你所相信的恰恰相反 ...
- Genymotion - 强大好用高性能的 Android 模拟器 (在电脑流畅运行APK安卓软件游戏的利器)
随着 Android 系统的应用和游戏越来越丰富,甚至有些比起Windows.Mac上的软件更加好用好玩,因此很多人都希望能在电脑上也能玩到安卓的游戏或APP. 我们曾推荐过 BlueStacks,而 ...
- 字母A-Z写法
#大写的a-z,ASCII编码 65..90|%{[char]$_} #小写的A-Z 97..122|%{[char]$_} 方法二: ([char[]](97..122) -as [ ...
- struts中的helloword(1)
注:文章中的所有图片均在附件中明白表明 首先要安装jdk1.6以及tomcat6和myeclipse 对于这些配置的安装 这里不再细细说明 其次是下载struts2 第一步:去struts21 ...
- Android 如何添加一种锁屏方式
前言 欢迎大家我分享和推荐好用的代码段~~ 声明 欢迎转载,但请保留文章原始出处: CSDN:http://www.csdn.net ...
- 设计模式之十三:适配器模式(Adapter)
适配器模式: 将一个类的接口转换成另外一个期望的类的接口.适配器同意接口互不兼容的类一起工作. Convert the interface of a class into another interf ...