复习一下MySql的基础语法,如有问题的地方,麻烦看到的各位提出来,我好做修改!
一般基本语法包括以下几类:
数据类型,变量,运算符,流程控制
1.数据类型
只做简单列表,不做详细的描述,用到时在详细看文档
1: 整数:TINYINT ,SMALLINT,MEDIUMINT,INT,INTEGER,BIGINT 2: 3: 浮点数:FLOAT,DOUBLE,DECIMAL,NUMERIC 4: 5: 日期类型:DATE,DATETIME,TIMESTAMP,YEAR 6: 7: 字符类型:CHAR,VARCHAR 8: 9: 大数据:TINYBLOB,TINYTEXT,TEXT,MEDIUMBLOB,MEDIUMTEXT,LONGBLOB,LONGTEXT 10: 11: 集合类型:ENUM,SET
.csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; }
2.变量
简单的来说,变量分为用户变量和系统变量
按照作用范围来说,也就是变量的生命周期,可以分为
全局变量:系统全局变量,作用于所有地方,一般以"@@"开头,有些不以"@@"开头的系统变量,比如:CURRENT_USER,这样做是为了与其他的SQL产品保持一致
会话变量:只对连接的客户端有效,一般以"@"开始命名,形式为"@变量名"
局部变量:作用范围在begin到end语句块之间。在该语句块里设置的变量declare语句专门用于定义局部变量
用户可以创建会话变量和局部变量,创建会话变量 SET @test=1,局部变量一般是在存储过程中进行声明
1: CREATE PROCEDURE test_pro() 2: BEGIN 3: DECLARE test INT DEFAULT 1; -- 声明了一个变量test 设置默认值为1 4: SELECT test; 5: END;
.csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; }
系统变量是不能声明的,只能改变系统变量的值。
会话变量和全局变量赋值操作有两种:
一种是:set @xxxx = 1;
第二种是: select @xxxx:=t.xxx from xxxx t;
局部变量赋值也有两种
一种是:set xxxx = 1;
第二种是:select t.xxx into xxxx from xxxx t;
3.运算符
1.算术运算符
+ 加 SET var1=2+2; 4
- 减 SET var2=3-2; 1
* 乘 SET var3=3*2; 6
/ 除 SET var4=10/3; 3.3333DIV 整除 SET var5=10 DIV 3; 3
% 取模 SET var6=10%3 ; 1
2.比较运算符
> 大于 1>2 False
< 小于 2<1 False
<= 小于等于 2<=2 True
>= 大于等于 3>=2 True
BETWEEN 在两值之间 5 BETWEEN 1 AND 10 True
NOT BETWEEN 不在两值之间 5 NOT BETWEEN 1 AND 10 False
IN 在集合中 5 IN (1,2,3,4) False
NOT IN 不在集合中 5 NOT IN (1,2,3,4) True
= 等于 2=3 False
<>, != 不等于 2<>3 False
<=> 严格比较两个NULL值是否相等 NULL<=>NULL True
LIKE 简单模式匹配 "Guy Harrison" LIKE "Guy%" True
REGEXP 正则式匹配 "Guy Harrison" REGEXP "[Gg]reg" False
IS NULL 为空 0 IS NULL False
IS NOT NULL 不为空 0 IS NOT NULL True3.逻辑运算符
逻辑运算符又称为布尔运算符,用来确认表达式的真和假
运算符
作用
NOT 或者 !
逻辑非
AND 或 &&
逻辑与
OR 或 ||
逻辑或
XOR
逻辑异或
select not 0, not 1,not null; select (1 and 1),(0 and 1),(3 and 1); select (1 or 0),(0 or 0),(1 or null ),(1 or 1)
.csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; }
4.位运算符
| 或
& 与
<< 左移位
>> 右移位
~ 非(单目运算,按位取反)注释:
mysql存储过程可使用两种风格的注释
双横杠:--该风格一般用于单行注释
c风格:/* 注释内容 */ 一般用于多行注释
5.运算符的优先级
前面介绍了mysql支持的各种运算符的使用方法,在实际应用中,很可能将这些运算符进行混合运算,那么应该先进行哪些运算符的操作呢?下表一一列出优先级顺序
1
=
2
|| OR XOR
3
&&;AND
4
NOT
5
BETWEEN,CASE,WHEN,THEN,ELSE
6
=,<=>,>=,>,<,<=,!=,IS,LIKE,REGEXP,IN
7
|
8
&
9
<<,>>
10
-,+
11
*,/,div,%,MOD
12
^
13
-,~
14
!
4.流程控制
1.分支结构
if
case2.循环结构
for循环
while循环
loop循环
repeat until循环注:
区块定义,常用
begin
......
end;
也可以给区块起别名,如:
lable:begin
...........
end lable;
可以用leave lable;跳出区块,执行区块以后的代码begin和end如同C语言中的{ 和 }。