存储过程是:

通过一系列的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)

mysql的存储过程与事务_mysql的存储过程与事务入门相关推荐

  1. mysql 存储过程改用户_Mysql修改存储过程相关权限问题

    在使用mysql数据库经常都会遇到这么一个问题,其它用户定义的存储过程,现在使用另一个用户却无法修改或者删除等:正常情况下存储过程的定义者对它有修改.删除的权限:但是其它的用户就要相于的授权,不然无法 ...

  2. mysql数据存储过程详解_mysql数据存储过程参数实例详解

    MySQL 存储过程参数有三种类型:in.out.inout.它们各有什么作用和特点呢? 一.MySQL 存储过程参数(in) MySQL 存储过程 "in" 参数:跟 C 语言的 ...

  3. mysql 存储过程 生成数据_mysql使用存储过程,批量生成测试数据

    1.存储过程代码 delimiter $$ DROP PROCEDURE IF EXISTS create_service_data$$ create procedure create_service ...

  4. mysql建立存储过程报错_MySQL创建存储过程(CREATE PROCEDURE)

    MySQL 存储过程是一些 SQL 语句的集合,比如有时候我们可能需要一大串的 SQL 语句,或者说在编写 SQL 语句的过程中需要设置一些变量的值,这个时候我们就完全有必要编写一个存储过程. 编写存 ...

  5. mysql函数如何调用过程_MySQL调用存储过程和函数

    存储过程和存储函数都是存储在服务器端的 sql 语句集合.要想使用这些已经定义好的存储过程和存储函数就必须要通过调用的方式来实现. 存储过程通过 CALL 语句来调用,存储函数的使用方法与 MysqL ...

  6. mysql怎样循环执行存储_mysql 循环存储过程

    create procedure cunchu1(a int) begin DECLARE count int default 0; -- 定义变量 DECLARE i int default 1; ...

  7. mysql事物及事物等级_MySQL事物原理及事务隔离级别

    mysql事物 事务是访问数据库的一个操作序列,数据库应用系统通过事务集来完成对数据库的存取.事务的正确执行使得数据库从一种状态转换为另一种状态. 事务必须服从ISO/IEC所制定的ACID原则.AC ...

  8. mysql命令导入存储过程报错_mysql导入存储过程时declare报错的有关问题解决

    在导入存储过程时经常遇见下列DECLARE报错的问题: ? Error Code : 1064 You have an error in your SQL syntax; check the manu ...

  9. mysql 存储过程游标删除_mysql数据库存储过程游标循环,提前退出

    需求:向trade这个数据库中的每一个表增加多个字段 遇到问题:存储过程,游标,循环,动态sql执行 注意: mysql 存储过程在我所使用的5.5版本中不能使用 show 的命令,利用 inform ...

最新文章

  1. 你应该知道的grep命令
  2. Winform 绘制圆形的图片
  3. python基础知识整理-python入门基础知识点整理-20171214
  4. hdu 1588 Gauss Fibonacci 较难
  5. var a = b = 5 and use strict mode
  6. matchers依赖_Hamcrest Matchers教程
  7. C++ Map简单介绍 ,比如添加元素、删除元素和打印元素
  8. 在Delphi中如何创建和使用udl文件
  9. Ubuntu 16.04: 开启wifi设置 How To Enable WiFi In Ubuntu 16.04
  10. 使用grub2制作U盘启动盘安装操作系统
  11. Map集合之LinkedHashmap
  12. mysql 2008安装_关于SQL 2008安装时已经有实例名称。
  13. jq css3实现跑马灯+大转盘
  14. WAV高清语音格式音频
  15. maptalk地图以及自定义标点的引入
  16. 老年计算机班教案,山东老年大学课程好潮!摄影电脑智能手机班人气爆棚
  17. 2016年最新苹果开发者账号注册流程详解(公司账号篇)
  18. 荣耀手机用什么蓝牙耳机好?适合荣耀手机的蓝牙耳机推荐
  19. Excel 使用技巧集锦——163种技巧
  20. 用mask-rcnn训练自己的数据

热门文章

  1. 小小串联电阻,大大的作用。常见串联电阻情况分类整理汇总
  2. 【PC工具】winrar解压缩装机必备软件,winRAR5.70免费无广告
  3. FreeRTOS学习笔记之信号量
  4. Spring Cloud -Zuul
  5. HTML标签和CSS个人总结
  6. PAT乙级-1056. 组合数的和(15)
  7. awk之特征相同行的合并 ~转
  8. 一个编程菜鸟的进阶之路(C/C++)
  9. android launchmode singleinstance问题
  10. socket.io.js的disconnect事件