1.使用的工具:navicat,mysql版本:5.0

2.创建存储过程,注意传的值的大小要定义好,不然会报1064错误:

mysql存储过程判断 mysql存储过程判断大于0_sql语句

 

3.navicat创建的过程已经默认定义好了结束标志为空格,不要额外定义//,$$等结束标志了

mysql存储过程判断 mysql存储过程判断大于0_事务管理_02

 

 4.当需要知道一个sql语句影响的行数时,注意用select 和update/delete时是不一样的。

判断Select得到的行数用found_rows()函数进行判断。

判断Update或Delete影响的行数用row_count()函数进行判断,这里需要注意,如果Update前后的值一样,row_count则为0,而不像SqlServer里的@@rowcount或Oracle里的rowcount,只要update到行,影响的行数就会大于0,而无论update前后字段的值是否发生了变化。

 

mysql存储过程判断 mysql存储过程判断大于0_sql语句_03

 

5.区分于函数,没有return,返回的是你最后一条sql数据的内容。

6.写存储过程时,因为mysql的事务是自动提交的,而且不保证多条sql语句的原子性,也就是如果插入两条数据然后第二条报错第一条还是可以插入的,所以在这里要实现事务管理,实现整体的原子性和回滚操作,这个事务和spring的事务管理是一致的,在boot中@Transational注解的方式实现起来方便一些,通过下边语句实现事务的提交和回滚操作。

DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET t_error=1;  
START TRANSACTION;
IF t_error = 1 THEN    
    ROLLBACK;    
    ELSE    
    COMMIT;    
END IF;

6.游标的跳出本次循环:

mysql存储过程判断 mysql存储过程判断大于0_mysql_04

 

 

7.写了一个循环取数的过程,功能可以实现,有待优化,注意变量的使用问题,有的时候前边的语句修改了后边没注意的话就有可能用错数值,写的时候最好层次分明,可读性会提高,如果想当作函数来使用的话只需要加一个return就好。

BEGIN
	DECLARE lo int(10);
	DECLARE i int(10) ;
	DECLARE len int(10);
	DECLARE newLo VARCHAR(100)DEFAULT 0;
	DECLARE nextLo int(10);
	DECLARE re INT(100);
	DECLARE j int(10) DEFAULT 1;
	DECLARE h int(10) DEFAULT 1;
	DECLARE f int(10);
	DECLARE d int(10);
	set lo = (SELECT LOCATE(id,numbers));
	set len =(SELECT CHAR_LENGTH(numbers));

	set i = len-lo ;
if i> count then		WHILE count>0 do
		set nextLo = (SELECT SUBSTR(numbers,lo+j,1));	
		SET newLo = (SELECT CONCAT(newLo,nextLo));


		set j = j+1;
		SET count =count-1;
	END while;
END if;
if i< count then		WHILE i>0 do
		set nextLo = (SELECT SUBSTR(numbers,lo+j,1));	
		SET newLo = (SELECT CONCAT(newLo,nextLo));


		set j = j+1;

		SET i = i-1;
		END while;

	SET f = (SELECT FLOOR((count-len+lo)/len));	SET d = (SELECT MOD((count-len+lo),len));
	if f >0 
		THEN
		WHILE f>0 
		do
		SET newLo = (SELECT CONCAT(newLo,numbers));
		SET f= f-1;
		END while;		WHILE d>0 
		do
		SET nextLo = (SELECT SUBSTR(numbers,h,1));	
		SET newLo = (SELECT CONCAT(newLo,nextLo));

		SET h= h+1;
		set d = d-1;
		END while;	END if;
	IF f=0
	THEN
  WHILE d>0 
		do
		SET nextLo = (SELECT SUBSTR(numbers,h,1));	
		SET newLo = (SELECT CONCAT(newLo,nextLo));

		SET h= h+1;
		set d = d-1;
		END while;
END if;
END if;
SELECT newLo;
END
    我不是程序员,我只是程序的搬运工