MySQL存储过程语法基础 博客分类: Database MySQLSQLGo工作
程序员文章站
2024-02-22 17:32:40
...
存储过程语法基础
1,变量
DECLARE声明,SET赋值
变量类型:
可以在DECLARE变量时用DEFAULT设置默认值,不设则为NULL
2,参数
参数分IN、OUT和INOUT类型
3,用户变量
以@开头的为用户变量,作用域为session,所以可以当作全局变量使用
4,注释
5,操作符
算术操作符
比较操作符
逻辑操作符
位操作符
6,内建函数
分为字符串函数、算术函数、日期和时间函数和其他函数
常用MySQL函数
7,数据类型
MySQL中所有的变量都为单元素,没有数组的概念。
String类型
CHAR:定长,不足的部分用空格,超出的部分截断,最大255字节
VARCHAR:变长,不足的部分变短,超出的部分截断,最大65532字节
ENUM类型
SET类型
SET与ENUm类似,但是可以有多个值
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;”时看到。
存储过程应该一直在strict mode下工作,这样可以避免不可预期的错误。
1,变量
DECLARE声明,SET赋值
变量类型:
INT, INTEGER 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下工作,这样可以避免不可预期的错误。