mysql基本函数、循环、跳出循环、游标使用及说明

 更新时间:2026年06月14日 10:16:23   作者:destiny@  
这篇文章主要介绍了mysql基本函数、循环、跳出循环、游标使用及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

SQL99语法新特性

  1. NATURAL JOIN (自然连接) : 她会帮你自动查询两张表中所有相同的字段,然后进行等值连接
select a.dept_id,b.dept_id from A a NATURAL JOIN B b
  1. USING : 两张表中字段一样(dept_id) 才能使用
select a.dept_id,b.dept_id form A a join A b USING(dept_id)
  1. match ()Against() 全文检索
  • 需查询的字段创建为fulltext索引
  • match默认不支持中文检索,所以添加索引时需要添加解析器: WITH PARSER ngram
  • 传统like会是索引失效
  • show VARIABLES like 'ngram_token_size’查看分词方式,可以修改
SELECT
	id_,
	pat_name,
	id_card_no,
	phone_ 
FROM
	`inspect_meal_appointment_record` 
WHERE
	MATCH ( pat_name ) Against (
	'张三' 
	)
	

create fulltext index ind on inspect_meal_appointment_record (pat_name)  WITH PARSER ngram;


基本函数

循环

使用储存过程(procedure)进行演示

repeat 循环

CREATE DEFINER=`root`@`localhost` PROCEDURE `repeatTest`()
BEGIN
	DECLARE nums INT DEFAULT 1;
	
	REPEAT
	  set nums = nums+1;
		UNTIL nums >= 10
		
	END REPEAT;

SELECT nums;


END

while 循环

CREATE DEFINER=`root`@`localhost` PROCEDURE `whileTest`()
BEGIN
	DECLARE nums INT DEFAULT 1;
	
	WHILE nums <= 10 DO
	set nums = nums+1;
END WHILE;


SELECT nums;


END

loop循环

CREATE DEFINER=`root`@`localhost` PROCEDURE `loopTest`()
BEGIN
	DECLARE nums INT DEFAULT 1;
	
	test_label: LOOP
	set nums = nums+1;

	IF nums >= 110 THEN
		LEAVE test_label; 
	END IF; 
END LOOP test_label;



SELECT nums;


END

leave 跳出

可以用在循环或者单独的语句中

CREATE DEFINER=`root`@`localhost` PROCEDURE `leaveTest`()
BEGIN
	DECLARE nums INT DEFAULT 1;
	
	while_label:WHILE TRUE DO
		IF nums > 10 THEN LEAVE while_label;
		END IF;
		set nums = nums+1;
END WHILE;


SELECT nums;


END

iterate 执行下一次循环

只能用在循环中,相当于java的 continue

CREATE DEFINER=`root`@`localhost` PROCEDURE `ITERATETest`()
BEGIN
	DECLARE nums INT DEFAULT 1;
	
	test_label: LOOP
	set nums = nums+1;
	IF nums < 10
			THEN ITERATE test_label;
	ELSEIF nums > 15 
	THEN LEAVE test_label; 
	END IF; 
END LOOP test_label;



SELECT nums;


END

游标

CREATE DEFINER=`inspect-v2-develop`@`%` PROCEDURE `updateTypeLabel`()
    COMMENT '数据迁移,储存过程'
BEGIN
	DECLARE s INT DEFAULT  0;
	DECLARE mealId VARCHAR(64);
	DECLARE num INT DEFAULT 0;
	
	DECLARE list CURSOR FOR  SELECT deploy_meal_id,COUNT(deploy_meal_id) from inspect_meal_deploy WHERE   is_deleted = '0' GROUP BY deploy_meal_id;
	
	DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET s = 1;
	
	OPEN list;
		
		FETCH list into mealId,num;
		while s<> 1 do
			IF num >= 1 THEN 
			UPDATE  inspect_meal_type_label SET meal_deploy_id = (SELECT id_ FROM inspect_meal_deploy WHERE is_deleted = '0' AND deploy_meal_id = mealId LIMIT 1) WHERE meal_id =  mealId AND is_deleted = '0';
			END IF;
			
			FETCH list into mealId,num;
		END WHILE;
		
	CLOSE list;

END

DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET s = 1;是一个声明句柄,它类似于存储过程中的一个异常。

这里边有一个关键字continue,这个关键字是和exit关键字相对应的。continue语句会执行完指定操作后继续循环,而exit语句会退出将从最近的begin…end语句块中退出。 在这里的指定的操作就是set s = 1

既然声明了句柄,就要告诉程序句柄在什么时候调用,在这个例子中,当sqlstate '02000'语句被调用时会执行句柄。那么这个sqlstate '02000'是什么意思呢?该句柄将在无法再找到记录行后调用。也就是说当遍历完所有的结果集后就会调用。

因此,DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET s = 1;的意思就是当遍历完结果集之后把s的值设为1。

注意,句柄要定义在游标之后,不然会报ERROR 1338 (42000): Cursor declaration after handler declaration错误。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 有关mysql优化的一些东东整理

    有关mysql优化的一些东东整理

    有关mysql优化的一些东东,自己整理的,网上搜集的,供朋友们学习参考吧
    2013-02-02
  • MySQL 查询 并集、交集、差集方式

    MySQL 查询 并集、交集、差集方式

    这篇文章主要介绍了MySQL 查询 并集、交集、差集方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • MYSQL开启远程访问权限的方法

    MYSQL开启远程访问权限的方法

    在本篇文章里小编给大家整理的是关于MYSQL开启远程访问权限的方法,对此有兴趣的朋友们可以跟着学习下。
    2020-02-02
  • MYSQL中EXISTS的用法小结

    MYSQL中EXISTS的用法小结

    在MySQL数据库中,EXISTS是一种强大的工具,用于处理复杂的查询需求,本文主要介绍了MYSQL中EXISTS的用法小结,具有一定的参考价值,感兴趣的可以了解一下
    2024-05-05
  • MySQL定时任务(EVENT事件)如何配置详解

    MySQL定时任务(EVENT事件)如何配置详解

    这篇文章主要介绍了MySQL定时任务(EVENT事件)如何配置详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • 教你如何让spark sql写mysql的时候支持update操作

    教你如何让spark sql写mysql的时候支持update操作

    spark提供了一个枚举类,用来支撑对接数据源的操作模式,本文重点给大家介绍如何让spark sql写mysql的时候支持update操作,本文通过实例代码给大家介绍的非常详细,需要的朋友参考下吧
    2022-02-02
  • CentOS 7 下使用yum安装MySQL5.7.20 最简单方法

    CentOS 7 下使用yum安装MySQL5.7.20 最简单方法

    这篇文章主要介绍了CentOS 7 下使用yum安装MySQL5.7.20 最简单 方法,需要的朋友可以参考下
    2018-11-11
  • MySQL主从同步延迟原因与解决方案

    MySQL主从同步延迟原因与解决方案

    本文主要介绍了MySQL主从同步延迟原因与解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-11-11
  • 简析mysql字符集导致恢复数据库报错问题

    简析mysql字符集导致恢复数据库报错问题

    这篇文章主要介绍了简析mysql字符集导致恢复数据库报错问题,具有一定参考价值,需要的朋友可以了解。
    2017-10-10
  • MySQL配置文件my.ini的使用解读

    MySQL配置文件my.ini的使用解读

    这篇文章主要介绍了MySQL配置文件my.ini的使用解读,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12

最新评论