Mysql_06_第六章

开启事务
START TRANSACTION;
提交事务
COMMIT;
CREATE DATABASE chapter06;
USE chapter06;
CREATE TABLE account(
	id INT primary key auto_increment,
	name VAR CHAR(40),
	money FLOAT 
	);
INSERT INTO account(name,money) VALUES('a',1000);
INSERT INTO account(name,money) VALUES('b',1000);
事务回滚

ROLLBACK;

事务隔离级别

READ UNCOMMITIED(读未提交)
#READ COMMITIED(读提交)
REPEATABLE READ(可重复读)
SERIALIZABLE(可串行化)

脏读
START TRANSACTION;
UPDATE account SET money=money-100 WHERE name='a';
UPDATE account SET money=money+100 WHERE name='b';
1)设置b账户的隔离级别

SESSION 当前会话 TRANSATION事务 ISOLATION隔离 LEVEL级别 READ UNCOMMITTED隔离级别

SET SESSION TRANSACTION ISOLATTON LEVEL READ UNCOMMITTED;
查询事务的隔离级别
SELECT @@tx_isolation;

mysql8以上

select @@transaction_isolation;

(2)演示脏读

START TRANSATION;
		SELECT * FROM account;
		#-----------------------------------
		#|id	|name	|money	|
		#-----------------------------------
		#|1	|a	|1000	|
		#-----------------------------------
		#|2	|b	|1000	|
		#-----------------------------------
		START TRANSATION;
		UPDATE account SET money=money-100 WHERE name='a';
		UPDATE account SET money=money+100 WHERE name='b';
		#再次查询
		SELECT * FROM account;
		#-----------------------------------
		#|id	|name	|money	|
		#-----------------------------------
		#|1	|a	|900	|
		#-----------------------------------
		#|2	|b	|1100	|
		#-----------------------------------
		#验证是否脏读
		START TRANSACTION;
		#退出数据库
		#再次查询
		SELECT * FROM account;
		#-----------------------------------
		#|id	|name	|money	|
		#-----------------------------------
		#|1	|a	|1000	|
		#-----------------------------------
		#|2	|b	|1000	|
		#-----------------------------------

事务储存

环境

USE chapter06;
CREATE TABLE student(
	id INT(3) PRIMARY KEY AUTO_INCREMENT,
	name VARCHAR(20) NOT NULL,
	grade FLOAT,
	gender CHAR(2)
	);
INSERT INTO student(name,grade,gender)
	VALUES("tom",60,"男"),
	("jack",70,'男'),
	('rose',90,'女'),
	('lucy',100,'女');

创建查看stdent表的储存过程
CREATE PROCEDURE Proc()
	BEGIN				
	SELECT * FROM student;                      
	END;

执行过程

DELIMITER //
CREATE PROCEDURE Proc ()
	BEGIN
	SELECT * FROM student;
	END //
DELIMITER ;
调用Proc();
call Proc();

变量

格式
DECLARE 变量名 数据类型 default 变量值;
赋值
SET 变量名 = 变量值 ;

delimiter //
CREATE PRODUCERE Proc1()
BEGIN
DECLARE var1 var2 var3 INT ;
SET var1=10 ,var2=20;
SET var3=var1+var2;
SELECT var3;
END //
delimiter ;

例题

赋值查询
demiliter //
create procedure proc2()
     begin
     DECLARE s_grade FLOAT;
     DECLARE s_gender CHAR(2);
     SELECT grade,gender INTO s_grade,s_gender
     FROM student  WHERE name='rose';
     end//
demiliter ;
声明光标
DECLARE 名 CURSIR FOR 结果集
声明名为cursor_student的光标
DECLARE cursor_student CURSIR FOR select s_name,s_gender FROM student;
光标的使用
OPEN CURSOR_NAME
FETCH cursor_name INTO var_name[,var_name]...
使用cursor_student的光标,将查询信息存入 s_name,s_gender;
FETCH cursor_student INTO s_name,s_gender;
关闭光标
CLOSE cursor_name

流程控制
判断语句
IF 变量名 is 变量值
执行代码
END IF;

指定值语句
CASE 变量值
执行代码
END CASE;

循环语句
[自定义循环名】:LOOP
执行代码
END LOOP [自定义循环名]

退出循环相当于java的break
LEAVE [自定义循环名】
退出循环相当于java的continue
ITERATE [自定义循环名】

带条件循环
label:REPEAT
执行代码
UNTIL 条件
END REPEAT lable;

WHILE

先判断循环
DECLRE i INT DEFAULT 0;
WHILE i<10 DO
SET i=i+1;
END WHILE;
查询储存执行过程
SHOW PEOCEDURE STATUS LIKE 'C%' \G
SHOW CREATE PROCEDURE chapter06.proc \G
修改储存过程
ALTER RPOCEDURE proc 
MODIFIES SQL DATA 
SQL SECURIty INVOKER;
删除储存过程
DROP PROCEDUCE proc;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值