数据的创建存储过程、调用存储过程、修改存储过程、删除存储过程,以及第一类丢失更新(回滚丢失)和 第二类丢失更新(覆盖丢失/两次更新问题)
文章目录
- 一、创建存储的语法
- 二、调用存储过程
- 三、修改存储过程
- 四、删除存储过程
- 五、**第一类丢失更新**(回滚丢失)
- 六、**第二类丢失更新**(覆盖丢失/两次更新问题)
提示:以下是本篇文章正文内容,下面案例可供参考
一、创建存储的语法
CREATE PROCEDURE 过程名称( [ [输入输出类型] 参数名 参数类型(宽度) , ... ] )
BEGIN
SQL语句块
END $
其中输出输入的参数类型有以下三种:
-
IN
:表示输入参数- 仅能从存储过程的调用者向存储过程传递数据(即由外向内传递)
-
OUT
:表示输出参数- 仅能从存储过程内部将数值传递给存储过程的调用者(即由内向外传递)
-
INOUT
:表示输入输出参数- 既能从存储过程的调用者向存储过程传递数据(即由外向内传递)
- 又能从存储过程内部将数值传递给存储过程的调用者(即由内向外传递)
mysql> CREATE PROCEDURE register(IN userName VARCHAR(20),IN userPass VARCHAR(20),OUT userId INT)
-> BEGIN
-> INSERT INTO UserInfo(userName,userPass)VALUES(userName,userPass);
-> SELECT LAT_INSERT_ID() INTO userId;
-> END $
其中:
mysql> DELIMITER $
是来修改 定界符 。
之后遇到修改后的定界符就表明语句结束(因为语句中有原本的分界符,会冲突),等到存储过程创建完毕则需要将 定界符 修改为默认的 ;
DELIMITER ;
二、调用存储过程
在 MySQL 中调用存储过程可以通过 CALL
命令来实现:
代码如下(示例):
CALL 过程名称( [实参列表] )
根据实际情况为 存储过程 传递参数。
如果参数类型为 OUT
或 INOUT
则需要定义变量并将变量作为存储过程的参数使用。
三、修改存储过程
代码如下(示例):
ALTER PROCEDURE 过程名称 [特征];
mysql> ALTER PROCEDURE register;
四、删除存储过程
通过 drop procedure
命令可以删除存储过程:
DROP PROCEDURE [IF EXISTS] 过程名称;
五、第一类丢失更新(回滚丢失)
隔离级别较高的:
隔离级别较低的:
但在MySQL数据库,任何隔离级别不允许第一类更新丢失。
六、第二类丢失更新(覆盖丢失/两次更新问题)
隔离级别较高的:
隔离级别较低的:
第二类丢失更新原因:MySQL可重复读默认采用的是快照读。快照读的一个问题也就是没有办法获取最新的数据。所以快照读是第二类更新丢失的一个主要原因。