常量

  数值

  字符串:单引号或者双引号括起来。包括普通字符串或者日期格式的字符串。

  布尔值:false(FALSE)对应数字值为0、true(TRUE)对应数字值为1。

  NULL:可以参考http://www.cnblogs.com/-beyond/p/8554483.html

变量

定义用户变量

  mysql中变量分为用户变量和系统变量。

  用户变量要先定义和初始化赋值,否则变量的值为NULL。

  用户变量只在本次连接阶段有效,其他用户的连接不能使用另外一个用户定义的变量,并且当连接释放后,变量就会销毁。

  声明变量格式:set @key = value,可以一次性声明多个。

  如果变量名中有特殊符号,那么可以用引号将变量名括起来,比如 set @'abc def' = 123;

访问用户变量

  select @name;

系统变量

  系统变量是以2个@@开头。

mysql> select @@version;

获得系统变量列表  

mysql> show variables;
mysql> show variables like '%test%';

 

 

算数运算符

  + - * / %

   +和-还可以用来计算日期;  

mysql> select now(),now() + interval 22 day;
+---------------------+-------------------------+
| now() | now() + interval 22 day |
+---------------------+-------------------------+
| 2018-06-19 22:55:02 | 2018-07-11 22:55:02 |
+---------------------+-------------------------+
1 row in set (0.00 sec)  

  

比较运算符

  在mysql里面,判断等于只用一个等号=,不像其他编程语言一样使用双等或者三等。判断不等使用!=和<>。

  其他比较运算符和其他编程语言一样使用。

逻辑运算符和位运算符

  和其他语言一样。注意or比and的优先级低,所以在where子句中进行判断时,为了保证准确性,尽量使用()保证顺序。

选择判断

  mysql的选择判断一般是使用case,格式如下:

case
when 条件1 then 表达式1
when 条件2 then 表达式2
else 表达式n
end

  示例:

mysql> select id,name,
-> case
-> when price>10 then "expensive"
-> when price>0 then "cheap"
-> else "free"
-> end as level
-> from cate;

  

循环结构

  while

delimiter $$
create procedure test_while()
begin
declare sum int default 0;
declare t int default 5;
while t>0 do
set sum=sum+1;
set t=t-1;
end while;
select sum;
end $$
delimiter ;

  

  repeat

delimiter $$
create procedure _repeat()
begin
declare a int default 10;
repeat
set a=a-1;
until a<5
end repeat;
select a;
end $$
delimiter ;

  注意使用repeat的时候,在判断条件(until 条件)的那一行句末不加分号,这个很容易出错! 

  loop

delimiter $$
create procedure test_loop()
begin
declare t int default 0;
label:loop
set t=t+1;
if t>10 then leave label;
end if;
end loop label;
select t;
end $$
delimiter ;

注意 loop 一般要和一个标签(此处为label,名称可以自定义,不过要保证前后一致)一起使用,且在 loop 循环中一定要有一个判断条件,能够满足在一定的条件下跳出 loop 循环(即 leave )!

存储过程

  创建和使用存储过程

mysql> create procedure insert_into_two_table(in id int, in name char(30), out res char(10))
-> begin
-> insert into user values (id,name);
-> insert into person values (id, name);
-> set res = "success";
-> select res;
-> end $$
Query OK, 0 rows affected (0.00 sec) mysql> call insert_into_two_table(1,"aaaaa",@res);
+---------+
| res |
+---------+
| success |
+---------+
1 row in set (0.03 sec) mysql> select @res;
+---------+
| @res |
+---------+
| success |
+---------+
1 row in set (0.00 sec)

  删除存储过程

mysql> drop procedure if exists insert_into_two_table;

  

  

存储函数

  存储过程不能有输出参数;不用call调用,而是使用select来调用 ;必须包含return语句,存储过程不能有return。

delimiter $$
create function find_stu(s_id int)
returns boolean
begin
declare cnt int;
select id into cnt from user where id=s_id;
if cnt > 0 then
return true;
else
return false;
end if;
end $$
delimiter ;

  测试:

mysql> select * from user;
+----+-------+
| id | name |
+----+-------+
| 1 | aaaaa |
+----+-------+
1 row in set (0.00 sec) mysql> select find_stu(1);
+-------------+
| find_stu(1) |
+-------------+
| 1 |
+-------------+
1 row in set (0.00 sec) mysql> select find_stu(2);
+-------------+
| find_stu(2) |
+-------------+
| 0 |
+-------------+
1 row in set (0.00 sec)

  删除函数

mysql> drop function if exists find_stu;

  

触发器

事件

MySQL中的while、repeat、loop循环的更多相关文章

  1. MySql中游标使用总是多循环一次的解决方法

    CREATE DEFINER = 'root'@'%' PROCEDURE deyestest.procedure2() BEGIN DECLARE v_id INT; DECLARE v_userN ...

  2. MySQL 中的三中循环 while loop repeat 的基本用法

    -- MySQL中的三中循环 while . loop .repeat 求 1-n 的和 -- 第一种 while 循环 -- 求 1-n 的和 /* while循环语法: while 条件 DO 循 ...

  3. MySQL中的三中循环 while 、 loop 、repeat 求 1~n 的和

    -- MySQL中的三中循环 while . loop .repeat 求 1-n 的和 -- 第一种 while 循环 -- 求 1-n 的和/* while循环语法:while 条件 DO 循环体 ...

  4. MySQL 中while loop repeat 的基本用法

    -- MySQL中的三中循环 while . loop .repeat 求 1-n 的和 -- 第一种 while 循环 -- 求 1-n 的和 /* while循环语法: while 条件 DO 循 ...

  5. MySQL中 while loop repeat 的用法

    -- MySQL中的三中循环 while . loop .repeat 求 1-n 的和 -- 第一种 while 循环 -- 求 1-n 的和 /* while循环语法: while 条件 DO 循 ...

  6. MySQL学习笔记:repeat、loop循环

    一.repeat循环 # ---- repeat ---- DELIMITER $$ CREATE PROCEDURE test_repeat() BEGIN ; REPEAT ; UNTIL a E ...

  7. MySql中循环的使用

    一.while循环 语法:WHILE [条件] DO [逻辑] END WHILE; delimiter $$ DROP FUNCTION IF EXISTS `fn_findCharCount` $ ...

  8. MySQL中的循环

    MySQL中的三中循环 while . loop .repeat 求 1-n 的和第一种 while 循环 : /* while循环语法: while 条件 DO 循环体; end while; */ ...

  9. PL/SQL中LOOP循环控制语句

    在PL/SQL中可以使用LOOP语句对数据进行循环处理,利用该语句可以循环执行指定的语句序列.常用的LOOP循环语句包含3种形式:基本的LOOP.WHILE...LOOP和FOR...LOOP. LO ...

随机推荐

  1. 关于BP网络的一些总结

    背景 前段时间,用过一些模型如vgg,lexnet,用于做监督学习训练,顺带深入的学习了一下相关模型的结构&原理,对于它的反向传播算法记忆比较深刻, 就自己的理解来描述一下BP网络. 关于BP ...

  2. 记一次log4j日志文件输出错误的解决

    log4j错误信息:log4j:ERROR Failed to rename [D:/logs/wmts_] to [D:/logs/wmts_2015-12-21.log ]. 起因:部门网站使用B ...

  3. web前端代码编写体验

    最好是使用HTML5的有意义的标签,并尝试在不同的,老版本的浏览器中也保持一致,不然你会发现,满屏都是div,后期进行代码验证,修改和查找简直是一场大灾难. 而且,编写代码的时候,为了方便以后代码的复 ...

  4. 269. Alien Dictionary 另类字典 *HARD*

    There is a new alien language which uses the latin alphabet. However, the order among letters are un ...

  5. 20169212《Linux内核原理及分析》第十二周作业

    格式化字符串漏洞实验 格式化字符串漏洞是由像 printf(user_input) 这样的代码引起的,其中 user_input 是用户输入的数据,具有 Set-UID root 权限的这类程序在运行 ...

  6. WPF知识总结(一)

    在一个项目中, 发现有的项目引用的动态库是一个网页地址,下面就看看这个网页地址怎么来的. 目标:新建一个WPF工程,实现一个用户控件的功能.在 工程中加入一个类库,然后在类库中增加一个用户控件页面,在 ...

  7. EF6 CodeFirst+Repository+Ninject+MVC4+EasyUI实践(完)

    前言 这一篇是本系列的最后一篇,虽然示例讲到这里就停止呢,但对于这些技术的学习远不能停止.虽然本示例讲的比较基础,但是正如我第一篇说到的,这个系列的目的不是说一些高端的架构设计,而是作为一个入门级,对 ...

  8. java中this 关键字的使用

    在方法中定义使用的this关键字,它的值是当前对象的引用.也就是说你只能用它来调用属于当前对象的方法或者使用this处理方法中成员变量和局部变量重名的情况.而且,更为重要的是this和super都无法 ...

  9. UIScrollView无法滚动的解决办法及UIScrollView的代理(delegate)

    1•如果UIScrollView无法滚动,可能是以下原因: Ø没有设置contentSize ØscrollEnabled = NO Ø没有接收到触摸事件:userInteractionEnabled ...

  10. Provisioning Services 7.6 入门到精通系列之一:PVS前期规划

    1.  Provisioning Services 产品概述 Provisioning Services (简称PVS)采用了一种与传统映像解决方案截然不同的方法,从根本上改变了硬件与依托硬件而运行的 ...