博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mysql的存储过程与事务_mysql的存储过程与事务入门
阅读量:4475 次
发布时间:2019-06-08

本文共 2872 字,大约阅读时间需要 9 分钟。

存储过程是:

通过一系列的SQL语句, 根据传入的参数(也可以没有), 通过简单的调用,

完成比单个SQL语句更复杂的功能, 存储在数据库服务器端,只需要编译过一次之后再次使用都不需要再进行编译。主要对存储的过程进行控制。

事务是一系列的数据更改操作组成的一个整体。一旦事务中包含的某操作失败或用户中止,用户可以控制将事务体中所有操作撤消,返回事务开始前的状态。

事务中的操作是一个整体,要么整体完成,要么全部不做。从而保证了数据的完整性。

Mysql中,MyISAM存储引擎不支持事务,InnoDB支持。

两者都是数据库中非常重要的知识。

一、存储过程

创建一张test1表的存储过程

mysql> delimiter $ -- delimiter $是设置 $为命令终止符号,代替默认的分号,因为分号有其他用处.

mysql> create procedure sp_test1()

-> begin

-> create table test1(id int,name varchar(100));

->insert into test1 values(1,'lilei');

-> select * from test1;

-> end

-> $

Query OK, 0 rows affected (0.00 sec)

mysql> delimiter ; //恢复分号作为分隔终止符号

调用存储过程

mysql> call sp_test1();

创建带参数的存储过程

mysql> delimiter $ -- delimiter $是设置 $为命令终止符号,代替默认的分号,因为分号有其他用处.

mysql> create procedure sp_test(IN pi_id int, OUT po_name varchar(10))

-> begin

-> select * from test.tb_test;

-> select tb_test.name into po_name from test.tb_test where tb_test.id = pi_id;

-> end

-> $

Query OK, 0 rows affected (0.00 sec)

mysql> delimiter ; -- 恢复分号作为分隔终止符号

5.调用存储过程

mysql> set @po_name='';

Query OK, 0 rows affected (0.00 sec)

mysql> call sp_test(1,@po_name);

二、事务处理

mysql中如果是不支持事务的引擎,如myisam,则是否commit都没有效的。

如果是支持事务的引擎,如innodb,则有系统参数设置是否自动commit,查看参数如下:

mysql> show variables like '%autocommit%';

+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| autocommit | ON |

+---------------+-------+

1 row in set (0.00 sec)

mysql>

显示结果为on表示事务自动提交,也即不用手工去commit。

当然,你可以设置其为OFF,然后自己手工去commit。

使用了commit后你不可以回退,它会永久改变你的数据,而不使用只是临时改变,它把改变后的内容备份了一份在日志中,你可以rollback还原回来,看情况而用了。

PHP中使用事务实例

$handler=mysql_connect("localhost","root","password");

mysql_select_db("task");

mysql_query("SET AUTOCOMMIT=0");//设置为不自动提交,因为MYSQL默认立即执行

mysql_query("BEGIN");//开始事务定义

if(!mysql_query("insert into trans (id) values('2')"))

{

mysql_query("ROLLBACK");//判断当执行失败时回滚

}

if(!mysql_query("insert into trans (id) values('4')"))

{

mysql_query("ROLLBACK");//判断执行失败回滚

}

mysql_query("COMMIT");//执行事务

mysql_close($handler);

?>

Mysql控制台事务处理

mysql> use test;

Database changed

mysql> CREATE TABLE `dbtest`(

-> id int(4)

-> ) TYPE=INNODB;

Query OK, 0 rows affected, 1 warning (0.05 sec)

mysql> select * from dbtest

-> ;

Empty set (0.01 sec)

mysql> begin; //开启事务

Query OK, 0 rows affected (0.00 sec)

mysql> insert into dbtest value(5);//插入数据,表中数据临时改变,可回滚

Query OK, 1 row affected (0.00 sec)

mysql> insert into dbtest value(6);//插入数据,表中数据临时改变,可以回滚

Query OK, 1 row affected (0.00 sec)

mysql> commit; //提交,表中临时数据不可回滚

Query OK, 0 rows affected (0.00 sec)

mysql> select * from dbtest;

+------+

| id |

+------+

| 5 |

| 6 |

+------+

2 rows in set (0.00 sec)

mysql> begin; //开启事务

Query OK, 0 rows affected (0.00 sec)

mysql> insert into dbtest values(7); //插入数据,表中数据临时改变

Query OK, 1 row affected (0.00 sec)

mysql> rollback; //回滚到事务开始前数据

Query OK, 0 rows affected (0.00 sec)

mysql> select * from dbtest;

+------+

| id |

+------+

| 5 |

| 6 |

+------+

2 rows in set (0.00 sec)

转载地址:http://kcips.baihongyu.com/

你可能感兴趣的文章
斜率优化DP学习笔记
查看>>
vim 操作命令大全(转)
查看>>
<C++>CLR必须定义入口点
查看>>
TFS自动记住用户名密码 免密码自动登录
查看>>
Leetcode-290 Word Pattern(单词模式)
查看>>
搜索输入框提示--输入延迟,仿自动脑学院
查看>>
COM, COM+ and .NET 的区别
查看>>
【读书笔记】iOS-网络-应用间通信
查看>>
【读书笔记】iOS-工作区的使用
查看>>
ASP.NET Web API 2 入门(一)
查看>>
yum安装mongodb
查看>>
PHP基础知识系列:拦截器方法
查看>>
confluece安装文档及破解
查看>>
解决SpringCloud使用Feign跨服调用时header请求头中的信息丢失
查看>>
《CoffeeScript应用开发》学习:第五章 CoffeeScript中的类
查看>>
centos 7.3 快速安装ceph
查看>>
redis
查看>>
POJ 1942 Paths on a Grid(组合数学)
查看>>
Android UI设计规范之常用单位
查看>>
计算机如何实现运算?
查看>>