随笔 - 1330  文章 - 1  评论 - 378  阅读 - 482万 
存储过程语法基础

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   钱途无梁  阅读(1921)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
历史上的今天:
2009-11-02 ASP.NET常用的26个优化性能方法
2009-11-02 ASp.net中Froms验证方式
2009-11-02 简单自定义实现jQuery验证
2009-11-02 SQL性能测试
点击右上角即可分享
微信分享提示