玖叶教程网

前端编程开发入门

变量,流程控制

变量

  • mysql变量可分为两大类,即系统变量和用户变量。
  • 但根据实际应用又被细化为四种类型局部变量用户变量会话变量全局变量

用户变量

  • mysql用户变量,mysql中用户变量不用提前申明,在用的时候直接用“@变量名”使用就可以了,其作用域为当前连接。
  • 第一种用法,使用set时可以用“=”或“:=”两种赋值符号赋值 set @age=19; set @age:=20;
  • 第二种用法,使用select时必须用“:=”赋值符号赋值SELECT @name:=NAME FROM student WHERE stuid = 101

会话变量

  • mysql会话变量,服务器为每个连接的客户端维护一系列会话变量,其作用域仅限于当前连接,即每个连接中的会话变量是独立的。
  • 常用操作-- 显示所有的会话变量 show session variables; show session variables like '%auto%'; -- 修改会话变量 set @@session.autocommit = 1 -- 查看会话变量 select @@session.autocommit

全局变量

mysql全局变量,全局变量影响服务器整体操作,当服务启动时,它将所有全局变量初始化为默认值。要想更改全局变量,必须具有super权限。其作用域为server的整个生命周期。

-- 显示所有的全局变量
        show global variables;
        show global variables like '%autocommit%';

        -- 设置全局变量的值
        set @@global.autocommit=0;

        -- 查看全局变量值
        select @@global.autocommit;

局部变量

mysql局部变量,只能用在begin/end语句块中,比如存储过程中的begin/end语句块,其作用域仅限于该语句块。

- 声明语法:DECLARE var_name [, var_name]... data_type [ DEFAULT value ]; - var_name为局部变量的名称; - DEFAULT value子句指定指定变量的默认值

   DECLARE id INT;--仅声明一个变量
   DECLARE age INT DEFAULT 18; --声明int类型的age,值为18
   DECLARE nation,city varchar(50);--声明两个变量
   DECLARE weixin,qq varchar(20) default '123456';--声明两个变量值为123456

- 赋值方式: - 语法1:SET var_name=expr [, var_name=expr]...;

   DECLARE var1, var2, var3 INT;
   SET var1=10, var2=20;
   SET var3=var1+var2;

- 语法2:SELECT INTO为变量赋值

   DECLARE v_name varchar(20);
   DECLARE v_gold int;
   select name,gold into v_name, v_gold from student where stuid= 101;
   select v_name, v_gold;

流程控制

  • 类似三元表达式写法
 BEGIN
     DECLARE v_pjf int;
     select avg(score) into v_pjf from score where stuid=101;
     select (if(v_pjf>60,'及格','不及格'));
 END
  • IF一个分支 BEGIN DECLARE pjf int; select avg(score) into pjf from score where stuid=101; IF pjf>60 THEN select '优秀'; END IF; END

- IF两个分支

 BEGIN
 \#Routine body goes here...
 DECLARE v_sex bit;
 DECLARE v_msg varchar(50);
 select sex into v_sex from student where stuid=101;  
 IF v_sex=1 THEN
   set v_msg='这是男生';
 else
    set v_msg='这是女生';
 END IF;
 select v_msg;      
 END

- IF多个分支

 BEGIN
   DECLARE v_gold int;
   select gold into v_gold from student where stuid = 101;
   IF v_gold>10000 THEN
   select '土豪';
 elseif v_gold>50000 then
  select '有钱';
 else
  select '还行';
   END if;
 END

- CASE语句

 BEGIN
   DECLARE v_gold int;
   select gold into v_gold from student where stuid = 101;
 case when v_gold>10000 then
   select '土豪';
 when v_gold>50000 then
  select '有钱';
 else
  select '还行';
   end case;
 END

#### 循环 #### - LOOP循环 语法:

   label: LOOP
     statement_list

     IF exit_condition THEN
       LEAVE label; 
     END IF; 
   END LOOP label;

- 例子:

   BEGIN
   DECLARE i int default 100;
   label: LOOP
     select * from student where stuid=i;
       set i = i+1;
     IF i>105 THEN
       LEAVE label; 
     END IF; 
   END LOOP label;

   END

- WHILE循环,满足条件时执行循环体(先检查条件是否满足再进行操作) - 语法

   WHILE search_condition DO
     statement_list
   END WHILE;

- 例子

   BEGIN
     \#Routine body goes here...

     DECLARE s int;
     DECLARE i int;
     set s=0,i=1;
     WHILE i<=100 DO
       set s=s+i;
       set i=i+1;
     END WHILE;
     SELECT s;

   END

- REPEAT循坏,满足条件时跳出循环(执行操作后检查条件是否满足)

- 语法:

   REPEAT
     statement_list
   UNTIL search_condition 
   END REPEAT;

- 例子:

   BEGIN
   DECLARE s int;
   DECLARE i int;
   set s=0,i=1;
   REPEAT 
     set s=s+i;
     set i=i+1;
   UNTIL i>100
   END REPEAT;
   SELECT s;
   END


  • - 编写程序任务
    - 1.声明3个用户变量,都是int,定义第四个用户变量,求和,第四个变量的结果,修改一下会话变量,修改一下自动提交为0,然后在改回来 - 2.创建过程,查询姓张的同学数量。如果少于5个就insert一个张三同学 - 3.统计有多少个同学有成绩,如果超过30个,输出所有同学已经考过了,否则就输入,还有xx人没有考试 - 4.查询一下某人的总分,如果小于100分就拖出去打死,小于140分就拖出去喂狗,小于160就拖出去阉了,其他情况就砍掉一只手 - 5.求和:2 + 4 +8 +16 + ... + 1024; - 6.创建一张表,id和phone,向表里面插入100000行数据。
  • 下面让我们来进行实战编写程序
  • -- 1.声明3个用户变量,都是int,定义第四个用户变量,求和,第四个变量的结果,修改一下会话变量,修改一下自动提交为0,然后在改回来

    -- 2.创建过程,查询姓张的同学数量。如果少于5个就insert一个张三同学

    DELIMITER $

    CREATE

    /*[DEFINER = { user | CURRENT_USER }]*/

    PROCEDURE `zy`.`demo2`()

    /*LANGUAGE SQL

    | [NOT] DETERMINISTIC

    | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }

    | SQL SECURITY { DEFINER | INVOKER }

    | COMMENT 'string'*/

    BEGIN

    DECLARE i INT;

    SELECT COUNT(*) INTO i FROM student WHERE NAME LIKE '张%';

    SELECT i;

    IF i<5 THEN

    INSERT INTO student(NAME,phone,sex,age,addr,gold,birth) VALUES('张三',11365678810,1,18,'湖南',700,'2001-6-5');

    END IF;

    SELECT i;

    END$

    DELIMITER ;

    -- 3.统计有多少个同学有成绩,如果超过30个,输出所有同学已经考过了,否则就输入,还有xx人没有考试

    DELIMITER $

    CREATE

    /*[DEFINER = { user | CURRENT_USER }]*/

    PROCEDURE `zy`.`demo3`()

    /*LANGUAGE SQL

    | [NOT] DETERMINISTIC

    | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }

    | SQL SECURITY { DEFINER | INVOKER }

    | COMMENT 'string'*/

    BEGIN

    DECLARE i INT;

    SELECT COUNT(*) INTO i FROM score WHERE score IS NOT NULL;

    SELECT(IF(i>30,'已经考过了','还有人没有考试'));

    END$

    DELIMITER ;

    -- 4.查询一下某人的总分,如果小于100分就拖出去打死,小于140分就拖出去喂狗,小于160就拖出去阉了,其他情况就砍掉一只手

    DELIMITER $

    CREATE

    /*[DEFINER = { user | CURRENT_USER }]*/

    PROCEDURE `zy`.`demo4`()

    /*LANGUAGE SQL

    | [NOT] DETERMINISTIC

    | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }

    | SQL SECURITY { DEFINER | INVOKER }

    | COMMENT 'string'*/

    BEGIN

    DECLARE i INT;

    SELECT SUM(score) INTO i FROM score WHERE stuid=101;

    IF i<100 THEN

    SELECT '拖出去打死';

    ELSEIF i<140 THEN

    SELECT '拖出去喂狗';

    ELSEIF i<160 THEN

    SELECT '拖出去阉了';

    ELSE

    SELECT '砍掉一只手';

    END IF;

    END$

    DELIMITER ;

    -- 5.求和:2 + 4 +8 +16 + ... + 1024;

    DELIMITER $

    CREATE

    /*[DEFINER = { user | CURRENT_USER }]*/

    PROCEDURE `zy`.`demo5`()

    /*LANGUAGE SQL

    | [NOT] DETERMINISTIC

    | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }

    | SQL SECURITY { DEFINER | INVOKER }

    | COMMENT 'string'*/

    BEGIN

    -- 求和:2 + 4 +8 +16 + ... + 1024

    DECLARE i INT DEFAULT 2;

    DECLARE he INT DEFAULT 0;

    REPEAT

    SET he=he+i;

    SET i=i*2;

    UNTIL i>1024

    END REPEAT;

    SELECT he AS he;

    END$

    DELIMITER ;

    -- 6.创建一张表,id和phone,向表里面插入100000行数据。

    DELIMITER $

    CREATE

    /*[DEFINER = { user | CURRENT_USER }]*/

    PROCEDURE `zy`.`demo6`()

    /*LANGUAGE SQL

    | [NOT] DETERMINISTIC

    | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }

    | SQL SECURITY { DEFINER | INVOKER }

    | COMMENT 'string'*/

    BEGIN

    -- 创建一张表,id和phone,向表里面插入100000行数据

    DECLARE a INT DEFAULT 1;

    lable:LOOP

    INSERT INTO zuoye VALUES(NULL,12345678910);

    SET a=a+1;

    IF a=1001 THEN

    LEAVE lable;

    END IF;

    END LOOP lable;

    END$

    DELIMITER ;

    发表评论:

    控制面板
    您好,欢迎到访网站!
      查看权限
    网站分类
    最新留言