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';
※事务的隔离