存储过程,函数,事务---随笔

数据库随笔

一、存储过程

1.创建

create proc 名称 (参数1...参数n)

begin

sql

end;

参数书写方式:[in|out|inout] 参数名 类型

注:sql默认(;)作为结束符,可以修改为 $$,  使用关键字 delimiter ,例:delimiter $$

2.调用

  call 名称(@参数名)

  一般参数名前默认@,算是一种规范

二、函数

1.与存储过程的区别:必须有返回值

2.创建:

create func 名称 (参数1...参数n)

begin

sql

end;

参数书写方式: 参数名 类型

三、操作变量  

1.声明:declare 名字 类型 默认值 例:declare aaa int default 100;

2.赋值:set 变量 = 表达式 多个使用逗号隔开 例 :set aaa = 200;

              也可以用到select语句中 select 字段 into 变量 from 表名 where 条件    前提是select查询结果是单行

    例: select sal into aaa from 表名 where id = 1;

四:操作条件

1.条件定义: declare 条件名 Condition For 值

    值有两种类型 (1)sqlstate_value (2)mysql_error_code   不明白自行百度或者翻书

2.处理程序定义:declare 处理类型 Handler For 值

       处理类型有三种(1)continue(2)exit(3)undo

    值有(1)sqlstate_value(2)条件名 --也就是上边的条件,可以自己定义一个(3)sqlwarning

      (4)not found --遍历游标时经常使用,作为一种标记(5)sqlException(6)mysql_error_code

五:游标 --类似指针|数组的下标

1.声明:declare 游标名 Cusor For select语句

2.打开:open 游标名 --打开游标指向第一条记录之前

3.使用:fetch 游标名 into 变量名

4.关闭: close 游标名

5.遍历游标的三种方式:

(1)while ... end while  例:while flag = 1 do 自定义语句 end  while  -- flag什么时候为1呢(遍历完成),就是满足你的处理程序(比如 not found)|条件

(2)loop ... end loop

(3)repeat ... end repeat

六:流程控制语句

1.条件控制语句

(1)if

例: if 条件 then 语句

   [elseif 条件 then 语句]

   [else 语句]

   end if;

(2)case

例:case 值

    when 条件 then 语句

    ...

    else 语句

  end case;

2.循环控制语句

(1)loop  (2)while  -> 满足条件->执行  (3)repeat -> 满足条件 -> 退出

(1)loop 

  例: [begin_label:]loop

      语句

    end loop [end_label]

  注:begin_label 和  end_label 作为开始或者结束的标记,且必须相同,可省略

    想退出循环 使用leave关键字 例 leave flag = 1

(2)while  

[begin_label:] while 条件 do 语句

    end while [end_label]

(3)repeat

[begin_label:] repeat条件 do 语句

    end repeat [end_label]

注: 跳出时 until 条件 例 until flag = 1

七:事务

1.特性

(1)原子性 A(2)一致性 C(3)隔离性 I(4)持久性 D

2.与事务相关的日志 :redo日志 和 undo 日志

3.隔离级别:

id  name

1 zhangsan

2 lisi

3 wangwu

(1)读未提交-> 脏读 例: a 开启事务将zhangsan 更新成zhangsansan b事务这时读取是zhangsansan a这时没有提交,回滚事务了,这个过程b是看到的数据并不是真实的,称为脏读

(2)读已提交 -> 不可重复读 例: a 开启事务 select查看三条数据 ,b 开启事务把 zhangsan 更新为 zhangsansan 并提交 ,a 这是select 三条数据和上次看到的不一样,称为不可重复读

(3)可重复读->幻读 例:a开启事务 select 三条数据 ,b 开启事务insert 一条数据并提交,a 再select依旧是三条(a再没提交之前保证读取到的一样),a提交事务,a 再select 是四条,三四不一致,称为幻读

(4)可串行化

ddl语句会造成事务的隐式提交

原文地址:https://www.cnblogs.com/zkhbalance/p/10747298.html