zoukankan      html  css  js  c++  java
  • 存储过程,函数,事务---随笔

    数据库随笔

    一、存储过程

    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语句会造成事务的隐式提交

  • 相关阅读:
    layer子层给父层页面元素赋值,以达到向父层页面传值的效果
    根据HttpServletRequest获取用户真实IP地址
    KVM--安装及初步使用
    eslint 踩坑 -- error '***' is assigned a value but never used no-unused-vars
    eslint 效验规则
    leetcode407接雨水II
    leetcodej剑指offer41.数据流中的中位数
    leetcode44通配符匹配
    leetcode955K连续位的最小反转次数
    leetcode638大礼包
  • 原文地址:https://www.cnblogs.com/zkhbalance/p/10747298.html
Copyright © 2011-2022 走看看