存储过程语法基础

1,变量
DECLARE声明,SET赋值

变量类型:
代码
INTINTEGER   
BIGINT   
FLOAT   
DOUBLE   
DECIMAL(precision, scale), NUMERIC(precision, scale)   
DATE   
DATETIME   
CHAR(length)   
VARCHAR(length)   
BLOB, 
TEXT   
LONGBLOB, LONGTEXT  

可以在DECLARE变量时用DEFAULT设置默认值,不设则为NULL

2,参数
参数分IN、OUT和INOUT类型

3,用户变量
以@开头的为用户变量,作用域为session,所以可以当作全局变量使用

4,注释

//为单行注释   
  
/*  
|  
|  多行注释  
|  
*/  

 

5,操作符
算术操作符

 

+   
-   
*   
/     # 结果可能为小数   
DIV   # 结果为整数   
%  

 

比较操作符

代码
>   
<   
<=   
>=   
BETWEEN   
NOT BETWEEN   
IN   
NOT IN   
=   
<>!=             # 不等号   
<=>                # Null safe equal (returns TRUE if both arguments are Null)   
LIKE   
REGEXP   
IS NULL   
IS NOT NULL  

 

逻辑操作符

 

AND   
OR   
XOR 

 

位操作符

|   
&   
<<   
>>   
~  

 

6,内建函数
分为字符串函数、算术函数、日期和时间函数和其他函数

常用MySQL函数

代码
ABS   
CEILING   
CONCAT   
CURDATE   
DATE_ADD   
DATE_SUB   
FORMAT   
GREATEST   
IF   
IFNULL   
INSERT   
INSTR   
ISNULL   
LEAST   
LEFT   
LENGTH   
LOCATE   
LOWER   
LPAD   
LTRIM   
MOD   
NOW   
POWER   
RAND   
REPEAT   
REPLACE   
ROUND   
RPAD   
RTRIM   
SIGN   
SQRT   
STRCMP   
SUBSTRING   
UPPER   
VERSION  

 

7,数据类型
MySQL中所有的变量都为单元素,没有数组的概念。

String类型
CHAR:定长,不足的部分用空格,超出的部分截断,最大255字节
VARCHAR:变长,不足的部分变短,超出的部分截断,最大65532字节

ENUM类型

SET类型
SET与ENUm类似,但是可以有多个值

代码
CREATE PROCEDURE sp_set(in_option SET('Yes''No''Maybe'))   
BEGIN   
  
SELECT in_option;   
END   
  
--------------   
CALL sp_set('Yes')   
--------------   
  
+-----------+   
| in_option |   
+-----------+   
| Yes       |   
+-----------+   
1 row in set (0.01 sec)   
  
Query OK, 
0 rows affected (0.01 sec)   
  
--------------   
CALL sp_set('Yes,No,Maybe')   
--------------   
  
+--------------+   
| in_option    |   
+--------------+   
| Yes,No,Maybe |   
+--------------+   
1 row in set (0.00 sec)   
  
Query OK, 
0 rows affected (0.00 sec)   
  
--------------   
CALL sp_set('Yes,No,Go away')   
--------------   
  
ERROR 
1265 (01000): Data truncated for column 'in_option' at row 1  

 

Numeric类型

DATE和DATETIME类型
DATE用于存储日期,DATETIME用于存储日期和时间

TEXT和BLOB类型
TEXT可以存储64K,LONGTEXT可以存储4G
BLOB和LONGBLOB与之类似,但是它们还可以存储二进制数据

8,sql_mode

'STRICT_TRANS_TABLES'(默认值): 对transactional的table做严格数据类型限制
'STRICT_ALL_TABLES': 对所有table都做严格数据类型限制

在strict mode下,如果出现Data truncate错误(如将String赋值给Integer)会raise error,而在no strict mode下则会出现不可预料的行为(如将String赋值给Integer时值变为0)并且只能在“show warnings;”时看到。

代码
mysql> SHOW WARNINGS;   
+---------+------+----------------------------------------+   
| Level   | Code | Message                                |   
+---------+------+----------------------------------------+   
| Warning | 1265 | Data truncated for column 'b' at row 1 |   
| Warning | 1265 | Data truncated for column 'c' at row 1 |   
+---------+------+----------------------------------------+  

 存储过程应该一直在strict mode下工作,这样可以避免不可预期的错误。

 

 

 

 

 

posted on 2010-11-02 11:25  钱途无梁  阅读(1918)  评论(0编辑  收藏  举报