我是靠谱客的博主 负责酸奶,最近开发中收集的这篇文章主要介绍mysql 基本函数、循环、跳出循环、游标使用SQL99语法新特性基本函数循环游标,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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() 全文检索
  1. 需查询的字段创建为fulltext索引
  2. match默认不支持中文检索,所以添加索引时需要添加解析器: WITH PARSER ngram
  3. 传统like会是索引失效
  4. 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 循环

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-V2FAVFHM-1639313997981)(C:UsersqubingAppDataRoamingTyporatypora-user-imagesimage-20211212201555281.png)]

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 基本函数、循环、跳出循环、游标使用SQL99语法新特性基本函数循环游标的全部内容,希望文章能够帮你解决mysql 基本函数、循环、跳出循环、游标使用SQL99语法新特性基本函数循环游标所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(62)

评论列表共有 0 条评论

立即
投稿
返回
顶部