mysql -- 存储过程中 declare 和 set 定义变量的区别
2015-06-29 11:44
801 查看
mysql存储过程中,定义变量有两种方式:
1.使用set或select直接赋值,变量名以 @ 开头.
例如:set @var=1;
可以在一个会话的任何地方声明,作用域是整个会话,称为会话变量。
2.以 DECLARE 关键字声明的变量,只能在存储过程中使用,称为存储过程变量,例如:
DECLARE var1 INT DEFAULT 0;
主要用在存储过程中,或者是给存储传参数中。
两者的区别是:
在调用存储过程时,以DECLARE声明的变量都会被初始化为 NULL。而会话变量(即@开头的变量)则不会被再初始化,在一个会话内,只须初始化一次,之后在会话内都是对上一次计算的结果,就相当于在是这个会话内的全局变量。
在存储过程中,使用动态语句,预处理时,动态内容必须赋给一个会话变量。
例:
set @v_sql= sqltext;
PREPARE stmt FROM @v_sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
1.使用set或select直接赋值,变量名以 @ 开头.
例如:set @var=1;
可以在一个会话的任何地方声明,作用域是整个会话,称为会话变量。
2.以 DECLARE 关键字声明的变量,只能在存储过程中使用,称为存储过程变量,例如:
DECLARE var1 INT DEFAULT 0;
主要用在存储过程中,或者是给存储传参数中。
两者的区别是:
在调用存储过程时,以DECLARE声明的变量都会被初始化为 NULL。而会话变量(即@开头的变量)则不会被再初始化,在一个会话内,只须初始化一次,之后在会话内都是对上一次计算的结果,就相当于在是这个会话内的全局变量。
在存储过程中,使用动态语句,预处理时,动态内容必须赋给一个会话变量。
例:
set @v_sql= sqltext;
PREPARE stmt FROM @v_sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
相关文章推荐
- Mysql 在windows下切换用户
- mac下mysql安装和创建用户权限
- 【MySQL】常见的mysql 进程state
- MySQL数据库备份的几种方式
- MySQL基本数据类型与适用范围
- MySQL 动态行转列
- javaweb JDBC 数据库连接mysql 配置代码 (直接可用)
- MySQL分表
- 使用 ibdata 和 frm 文件恢复 MySQL 数据库
- mysql几种存储引擎介绍
- mysql有序插入研究part2
- MySQL的锁机制
- mysql触发器讲解
- 初涉MySQL
- mysql 常用命令
- PostgreSQL 与 MySQL 相比,优势何在?
- mac mysql 修改密码
- MySQL查看数据库相关信息
- mysql 表字段增、删、改
- MySql索引的学习