美文网首页
mysql sql编程

mysql sql编程

作者: 尹楷楷 | 来源:发表于2020-05-08 15:45 被阅读0次

mysql的sql编程一般使用在 存储过程/触发器/事件 等sql程序中。

DECLARE 变量申明

1、使用DECLARE 语句申明变量,而不是使用@x 形式的用户变量。因为用户变量的作用域为当前连接,范围比较大。而DECLARE 变量只在当前的BEGIN ... END复合语句里有效。

CREATE DEFINER="root"@"%" PROCEDURE "test_1"()
begin
    
        DECLARE a INT DEFAULT 1;
        DECLARE b INT DEFAULT 100;
        DECLARE i INT DEFAULT 0;
        
        WHILE i < 1000 DO
         SET a = a + b;
                 SET i = i + 1;
    END WHILE;
        SELECT a; 
        
end

2、使用unsigned关键字将变量申明为无符号。表示范围将扩大一倍

     -- 定义变量
    DECLARE i int unsigned DEFAULT 0;

3、 变量名不能和列名一样。SELECT a INTO b FROM
tb 会默认将a变量赋值给b变量,即使tb表中存在名字为b的列

CREATE DEFINER="root"@"%" PROCEDURE "sp1"(x VARCHAR(5))
BEGIN
    DECLARE xname VARCHAR(5) DEFAULT 'bob';
    DECLARE newname VARCHAR(5);
    
    SELECT xname INTO newname 
      FROM (SELECT 'yinkai' newname  ) tb WHERE xname = xname;
    SELECT newname;
  END

最终SELECT newname;输出 'bob' 而不是我们希望的 'yinkai'

变量赋值

1、手动赋值 :使用 SET 命令

2、在select查询参数中使用查询结果集赋值:
使用 SELECT num字段 INTO rnum变量。例如下面存储过程的例子,tb表的a,b字段赋值到number1 、number2的字段当中了。而且这种SELECT .. INTO ..的方式不会产生结果集,适合使用在触发器里。

CREATE DEFINER="root"@"%" PROCEDURE "test_1"()
begin
    
        DECLARE number1 INT DEFAULT 0;
        DECLARE number2 INT DEFAULT 0;
        SELECT a,b INTO number1,number2 FROM (SELECT 1 a, 2 b ) tb;
        SELECT number1,number1;
        
end

流程控制

if-else语句

如下存储过程,展示了if-else语句的用法

create procedure p_hello_world(in v_id int)
begin
    if (v_id > 0) then
        select '> 0';
    elseif (v_id = 0) then
        select '= 0';
    else
        select '< 0';
    end if;
end;
 
call p_hello_world(-9);

drop procedure if exists p_hello_world;
循环

1、while循环

CREATE DEFINER="root"@"%" PROCEDURE "test_1"()
begin
        DECLARE i INT DEFAULT 0;
        WHILE i < 10 DO
         
                 SET i = i + 1;
                 SELECT CONCAT('i==>',i) ; 
    END WHILE;
        
end

2、repeat循环
类似于c语言中的 do while循环,先执行一次循环体再判断。

CREATE DEFINER="root"@"%" PROCEDURE "test_1"()
begin
    -- 定义变量
    DECLARE i int unsigned DEFAULT 0;
    REPEAT
        SET i = i+1;
        SELECT i;
    UNTIL i >= 10
    END REPEAT;
        
end

3、loop循环

CREATE DEFINER="root"@"%" PROCEDURE "test_1"()
begin
     -- 定义变量
    DECLARE i int unsigned DEFAULT 0;
    LOOP_LABEL:LOOP
        SELECT i;
        SET i = i+1;
        IF i >= 10 THEN
            LEAVE LOOP_LABEL;
        END IF;
    END LOOP;
        
end
case语句

类似于java中的switch语句,传入一个值。根据它去执行不同的语句

CREATE DEFINER="root"@"%" PROCEDURE "p4"(IN `age` int)
BEGIN
   
     CASE age
     WHEN 1 THEN 
        select '我是1';
     WHEN 2 THEN
        select '我是2';
     WHEN 3 THEN
        select '我是3';
   ELSE 
        select '我不是任何1到3之间的数';
    END CASE ;
     
END

执行 CALL p4(1);

相关文章

网友评论

      本文标题:mysql sql编程

      本文链接:https://www.haomeiwen.com/subject/maqvghtx.html