mysql中的存储过程和事务隔离

※存储过程
存储过程是保存在数据库上的一段可执行代码。
1、定义存储过程的语法是:
Create procedure sp_name (参数..)
Begin
SQL语句
End;
2、调用它的方法:
Call sp_name(参数…); //空参时则括号中不填内容

3、演示
1)不带参数
定义(delimiter用于定义结束符):
DELIMITER $$
CREATE PROCEDURE p1()
BEGIN
INSERT INTO person2 VALUES(‘P05‘,‘李四‘,0);
SELECT * FROM person2;
END$$
DELIMITER ;
调用:
call p1();

2)带输入参数
DELIMITER $$
CREATE PROCEDURE p2(in id varchar(32), in nm varchar(30) )
BEGIN
INSERT INTO person2 VALUES(id,nm,0);
SELECT * FROM person2;
END$$
DELIMITER ;

call p2(‘P06‘,‘张飞‘);
CALL p2(‘P07‘,‘刘备‘);

3) 带输入、输出参数
定义:
DELIMITER $$
CREATE PROCEDURE p3(in id varchar(32), in nm varchar(30), out num int )
BEGIN
INSERT INTO person2 VALUES(id,nm,0);
SELECT count(*) into num FROM person2;
END$$
DELIMITER ;

调用:
CALL p3(‘P08‘,‘关羽‘,@aa); //一个@为用户变量,两个@为系统变量
输出返回值(输出参数)
SELECT @aa;

//输出系统变量“@@version”的值
SELECT @@VERSION--------我的是输出5.6.22-log

※查询内容区分大小写
mysql查询默认是不区分大小写的 如:
select * from table_name where a like ‘a%‘   
select * from table_name where a like ‘A%‘   
select * from table_name where a like ‘a%‘
select * from table_name where a like ‘A%‘
效果是一样的。
要让mysql查询区分大小写,可以:
select * from table_name where binary a like ‘a%‘  
select * from table_name where binary a like ‘A%‘   
select * from table_name where binary a like ‘a%‘
select * from table_name where binary a like ‘A%‘
也可以在建表时,加以标识 
create table table_name(
a varchar(20) binary
);

※事务: 一个事务只会有一个结果,要么成功,要么失败。
举例:
P09,‘赵子龙‘ 一次买了两辆车,需要把赵子龙的信息存储到person2表,同时还要把两辆车的信息存储到car表-----两个表的存储动作就是一个事务,要么成功(两个表的信息都成

功存储), 要么失败(只要其中一个表的一条数据存储失败,其它表的信息都不能存储进去,如果存进去则要还原)。
类似的例子,还有:银行转账! 销售单和销售明细!

SQL演示:
START TRANSACTION; //开启事务
DELETE FROM person2 WHERE id=‘P04‘;
DELETE FROM person2 WHERE id=‘P05‘;
ROLLBACK/COMMIT; //回滚/提交-------------事物一旦进行了提交,数据就无法再回滚了;

START TRANSACTION; //开启事务
INSERT INTO person2 VALUES(‘P09‘,‘赵子龙‘,‘1‘);
INSERT INTO car VALUES(‘C007‘,‘BMW‘,50,‘P09‘);
INSERT INTO car VALUES(‘C008‘,‘QQ‘,7,‘P09‘);
ROLLBACK/COMMIT; //回滚/提交

DELETE FROM car WHERE id=‘C007‘;
DELETE FROM car WHERE id=‘C008‘;
DELETE FROM person2 WHERE id=‘P09‘;

※事务的隔离

时间: 2024-11-08 18:04:48

mysql中的存储过程和事务隔离的相关文章

mysql中的触发器和事务的操作

触发器 语法 创建触发器: CREATE TRIGGER trigger_name trigger_time trigger_event ON tbl_name FOR EACH ROW trigger_stmt; trigger_time是触发程序的动作时间.它可以是BEFORE或AFTER trigger_event指明了激活触发程序的语句的类型. trigger_event可以是下述值之一: ·             INSERT:将新行插入表时激活触发程序,例如,通过INSERT.LO

MySql中创建存储过程

MySQL 存储过程是从 MySQL 5.0 开始增加的新功能.存储过程的优点有一箩筐.不过最主要的还是执行效率和SQL 代码封装.特别是 SQL 代码封装功能,如果没有存储过程,在外部程序访问数据库时(例如 PHP),要组织很多 SQL 语句.特别是业务逻辑复杂的时候,一大堆的 SQL 和条件夹杂在 PHP 代码中,让人不寒而栗.现在有了 MySQL 存储过程,业务逻辑可以封装存储过程中,这样不仅容易维护,而且执行效率也高. 一.MySQL 创建存储过程 "pr_add" 是个简单的

mysql 中创建存储过程

mysql中创建存储过程和存储函数虽相对其他的sql语言相对复杂,但却功能强大,存储过程和存储函数更像是一种sql语句中特定功能的一种封装,这种封装可以大大简化外围调用语句的复杂程度. 首先以表employee为例写一个简单的sql存储过程: 下边通过创建一个存储过程实现:输入性别,找出与输入性别相匹配的人的平均年龄,并将平均年龄输出. 这里首先通过delimiter &&,将sql语句的结束符换成&&(默认sql语句的结束符是;) 然后如下所示输入: 此时可以把语句的结束

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

一.对待存储过程和函数的态度 在实际项目中应该尽量少用存储过程和函数,理由如下: 1.移植性差,在MySQL中的存储过程移植到sqlsever上就不一定可以用了. 2.调试麻烦,在db中报一个错误和在应用层报一个错误不是一个概念,那将是毁灭性打击,直接一个error:1045什么的更本毫无头绪. 3.扩展性不高. 所以在互联网时代大型项目应该尽量少使用(不使用)存储过程和函数. 二.创建存储过程 2.1什么是存储过程? 存储过程和存储函数都是一组sql语句的集合.这些语句集合被当做一个整体存入数

Mysql InnoDB的四个事务隔离级别和(分别逐级解决的问题)脏读,不可重复读,虚读

MySqlInnoDB的事务隔离级别有四个:(默认是可重复读repeatable read) 未提交读 read uncommit : 在另一个事务修改了数据,但尚未提交,在本事务中SELECT语句可能会查询到这些未被提交的数据,而发生脏读. 提交读 read commit : 在一个事务中发生两次SELECT查询,当第一次SELECT执行完查询到一些数据,接下来另一个事务修改了这些数据并提交了,当第二次SELECT执行的时候查询到的数据和第一次SELECT的不同,而发生不可重复读.幻读问题,但

MySql中的存储过程和触发器的使用和区别

存储过程:是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它.存储过程是数据库中的一个重要对象 优点:1允许模块化程序设计(创建一次多次使用)2允许更快执行3减少网络流量4更好的安全机制 格式: DELIMITER // CREATE PROCEDURE 储存名([ IN ,OUT ,INOUT ]?参数名?数据类形...) BEGIN SQL语句 END //

查找mysql中未提交的事务

1.查找未提交事务 在mysql中运行: 1 select t.trx_mysql_thread_id from information_schema.innodb_trx t 2.删除线程 kill  1569831

SQL Server 中的6个事务隔离级别简介

本文出处:http://www.cnblogs.com/wy123/p/7218316.html (保留出处并非什么原创作品权利,本人拙作还远远达不到,仅仅是为了链接到原文,因为后续对可能存在的一些错误进行修正或补充,无他) 数据库中的事物是具有原子性(Atomicity),一致性(Consistemcy),隔离性(Isolation),持久性(Durability)四个特征.在上述四个特性中的一致性和隔离性的实现中,是通过锁来实现对相同数据的访问隔离的.事物的隔离级别又可以影响锁的申请和时间的

辛星解读mysql中的存储过程的优劣

我们常用的SQL语句在执行的时候需要首先进行编译,然后执行,而存储过程则是一组为了完成特定功能的SQL语句集,它直接编译好了存储在数据库中,用户通过指定存储过程的名字即可调用该存储过程. 存储过程的优点主要包括以下几点: 第一点,性能提高.这是相对于不适用存储过程来说的,因为存储过程在创建的时候就编译好了,而后每次调用都不会再次编译,这相对于传统的SQL语句中每次调用都需要编译的情况来说,性能提高了何止一点两点. 第二点,重用性强.存储过程使用名字即可使用,也就是传说中的"一次编写,随便调用&q