• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

MySQL (9)_mysql

mysql 搞代码 7年前 (2018-06-09) 172次浏览 已收录 0个评论
文章目录[隐藏]

mysql (九)

1 代码执行结构

  • 代码执行结构有三种:顺序结构、分支结构和循环结构。

1.1 分支结构

  • 分支结构:实现准备多个代码块,按照条件选择性执行某段代码。
  • 在MySQL中只有if分支。
  • 基本语法
if  条件判断  then  -- 满足条件要执行的代码 else if -- 不满足条件要执行的代码 else -- 不满足条件要执行的代码 end if; 

  • 触发器结合if分支:判断商品库存是否足够,不够不能生成订单。
-- 触发器结合if分支,判断商品库存是否足够,不够不能生成订单 DELIMITER $$ CREATE TRIGGER insert_before BEFORE INSERT ON `ORDER` FOR EACH ROW BEGIN     -- 判断商品库存是否足够          -- 获取商品库存:商品库存在表中     SELECT inv  FROM goods WHERE id = new.g_id INTO @inv;              -- 比较kuc          IF @inv < new.g_number THEN -- 库存不够         -- 触发器没有提供一个能够阻止事件发生的能力,只能暴力报错         INSERT INTO xxx VALUES(xxx);          END IF;           END $$ DELIMITER ;

1.2 循环结构

  • 循环结构:某段代码在指定条件下执行。
  • while循环
while  条件判断 do   -- 满足条件要执行的代码   -- 变更循环条件 end while;

循环控制:在循环内部进行循环判断和控制 MySQL中没有对应的continue和break; iterate:类似于continue leave:类似于break

iterate和leave的使用方式: iterate/leave 循环名字;

-- 定义循环名字 循环名字:while  条件  do     -- 循环体     -- 循环控制 end while;

2 函数

  • 函数:将一段代码块封装到一个结构中,在需要执行代码块的时候,调用结构执行即可(代码复用)。
  • 函数分为两类:系统函数和自定义函数。

2.1 系统函数

  • 系统定义好的函数,直接调用即可。
  • 任何函数都有返回值,因此函数的调用都是通过select调用。
  • substring(str,offset,len):从offset(MySQL中的自妇产的下标是从1)开始,截取长度是len。
SET @cn = '世界你好'; SET @en = "hello world";  -- 字符串截取 SELECT SUBSTRING(@cn,1,2),SUBSTRING(@en,1,2);

MySQL (9)_mysql

  • char_length:字符长度
  • length:字节长度
SET @cn = '世界你好'; SET @en = "hello world";  -- 字符串长度 SELECT CHAR_LENGTH(@cn),CHAR_LENGTH(@en),LENGTH(@cn),LENGTH(@en);

MySQL (9)_mysql

  • instr:判断字符串是否在某个字符串中存在,存在,返回位置;失败,返回0。
SET @cn = '世界你好'; SET @en = "hello world";  SELECT INSTR(@cn,'');

MySQL (9)_mysql

SELECT INSTR(@cn,'哈哈');

MySQL (9)_mysql

  • Lpad:左填充,将字符串按照某个指定的填充方式,填充到指定长度。
SET @cn = '世界你好'; SET @en = "hello world";  SELECT LPAD(@cn,20,'呵呵');

MySQL (9)_mysql

  • strcmp:compare,字符串比较,小,就返回-1;相等,就返回0;大,就返回1。
SET @a = 'hello'; SET @b = 'hei'; SET @c = 'HEI';  SELECT STRCMP(@a,@b),STRCMP(@b,@c),STRCMP(@c,@a);

MySQL (9)_mysql

2.2 自定义函数

  • 函数要素:函数名,参数列表,返回值,函数体(作用域)。
  • 创建函数
-- 创建函数  CREATE FUNCTION 函数名([形参列表]) RETURNS 数据类型 BEGIN     -- 函数体     -- 返回值     RETURN 返回值(指定数据类型); END;

DELIMITER $$ CREATE  FUNCTION dis() RETURNS INT BEGIN     RETURN 100; END $$  DELIMITER ;

  • 自定义函数和系统函数调用方式是一样的。
SELECT dis();

MySQL (9)_mysql

2.3 查看函数

  • 查看所有函数:
show function status [like 'pattern'];

MySQL (9)_mysql

  • 查看创建函数语句

MySQL (9)_mysql

2.4 修改函数&删除函数

  • 函数不可以修改,只能先删除,再新增函数。
  • 删除函数的基本语句
drop function 函数名;

MySQL (9)_mysql

2.5 函数参数

  • 函数分为两种:定义的参数叫形参,调用时的参数叫实参。
  • 形参:必须指定数据类型
DELIMITER $$ CREATE FUNCTION 函数名 (形参名字 数据类型) RETURNS 数据类型 BEGIN    -- 函数体    -- 返回值        RETURN 返回值; END; $$ DELIMITER ;

DELIMITER $$ CREATE FUNCTION res (num INT) RETURNS INT BEGIN     SET @i = 1;     SET @sum = 0;     WHILE @i <= num DO     SET @sum = @sum + @i;     SET @i = @i+1;     END WHILE;          RETURN @sum;      END; $$ DELIMITER ;

SELECT res(100);

MySQL (9)_mysql

  • 在函数内部定义的@变量在函数外部也可以使用。

MySQL (9)_mysql

2.6 函数的作用域

  • MySQL中的作用域与js中的作用域完全一样。
    • 全局变量可以在任何地方使用;局部变量只能在函数内部使用。  
  • 全局变量:使用set关键字定义,使用@符号定义。
  • 局部变量:使用declare关键字声明,没有@符号,所有的局部变量的声明,必须在函数体开始之前。
DELIMITER $$ CREATE FUNCTION res (num INT) RETURNS INT BEGIN     DECLARE i INT DEFAULT 1;     DECLARE SUM INT DEFAULT 0;     WHILE i <= num DO     SET SUM = SUM +i;     SET i = i+1;     END WHILE;          RETURN SUM;      END; $$ DELIMITER ;

MySQL (9)_mysql

MySQL (9)_mysql

3 存储过程

  • 存储过程:简称过程,procedure,是一种用来处理数据的方式。
  • 存储过程是一个没有返回值的函数。

3.1 创建存储过程

  • 基本语法
DELIMITER $$ CREATE PROCEDURE 过程名字([参数列表]) BEGIN  -- 过程体  END $$  DELIMITER ;

DELIMITER $$ CREATE PROCEDURE proe() BEGIN  -- 过程体   SELECT * FROM my_account;     END $$  DELIMITER ;

MySQL (9)_mysql

3.2  查看存储过程

  • 函数的查看方式完全使用与存储过程。
  • 查看所有的存储过程。
    • show procedure status [like ‘pattern’];  
SHOW PROCEDURE STATUS;

MySQL (9)_mysql

  • 查看创建过程语句
    • show create procedure 存储过程名字;    

MySQL (9)_mysql

3.3 调用过程

  • 因为存储过程是没有返回值的,所以不能使用select关键字。
  • 调用存储过程,使用call关键字。
call 存储过程的名字;

CALL proe();

MySQL (9)_mysql

3.4 修改过程&删除过程

  • 存储过程不可以修改,只能先删除,再新增存储过后才能。
  • 删除存储过程
drop 存储过程的名字;

MySQL (9)_mysql

3.5 存储过程参数类型

  • 函数的参数需要数据类型指定,过程比函数更严格。
  • 过程还有自己的类型限定:三种类型
    • ① in:数据从外部传入给内部使用(值传递):可以是数值也可以是变量
    • ②out:只允许过程内部使用(不用外部数据),给外部使用的(引用传递,外部的数据会被先清空才进入内部),只能是变量。
    • ③inout:外部的可以在内部使用,内部修改也可以给外部使用,典型的引用传递,只能传递变量。  
  • 基本语法
DELIMITER $$ CREATE PROCEDURE 过程名 (IN 形参名称 数据类型,OUT 形参名称 数据类型,INOUT 形参名称 数据类型) BEGIN     -- 过程体 END; $$ DELIMITER ;

DELIMITER $$ CREATE PROCEDURE pro1 (IN int_1 INT,OUT int_2 INT,INOUT int_3 INT) BEGIN     -- 过程体     SELECT INT_1,INT_2,INT_3; END; $$ DELIMITER ;

  • 调用:out和inout类型的参数必须传入变量,而不是是数值。
SET @int_2 = 1; SET @int_3 = 1; SET @int_1 = 1 ; SELECT @int_1,@int_2,@int_3; CALL pro1(@int_1,@int_2,@int_3); SELECT @int_1,@int_2,@int_3;

MySQL (9)_mysql

欢迎大家阅读《MySQL (9)_mysql》,跪求各位点评,by 搞代码


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:MySQL (9)_mysql

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址