最近面临一个需求,需要使用Mysql 写一段存储过程,对数据库中的数据表做批量操作。
应该算是知识盲区了,花了一些时间去学习如何写好一个存储过程,最终也顺利写出来了,记录一下。
以下两点是其中比较重要的部分:
- 关于变量的使用
- 在存储过程中使用动态SQL 语句
存储过程中的变量
MySQL存储过程常见的变量:局部变量、用户变量、系统变量。
局部变量
在过程体中,可以声明局部变量,用来临时保存一些值。
1 | DECLARE var_name[, var_name] ... type [DEFAULT value]; |
其中,type为MySQL的数据类型,如:int、float、date、varchar(length) 。
使用局部变量时,需要注意以下两点:
- DECLARE用来声明局部变量,且DECLARE仅被用在BEGIN … END复合语句里,并且必须在复合语句的开头,在任何其它语句之前;可以被用在嵌套的块中,除了那些用相同名字声明变量的块。
- 如果要给变量提供一个默认值,使用DEFAULT子句(值可以是常数,也可以指定为一个表达式);如果没有DEFAULT子句,初始值为NULL。
用户变量
用户变量与数据库连接有关:在当前连接中声明的变量,在连接断开的时候,就会消失;在此连接中声明的变量无法在另一连接中使用。
用户变量使用@
关键字去定义。
在存储过程中动态执行SQL
其实这个理解成一套模版,只要按照标准去执行这套模版,就可以了。
1 | -- 连接数据库 |
大致上就是这样,至此,一个完整的Mysql 存储过程就完成了。
如何在终端执行Mysql 文件?
SQL 脚本准备好了,有两种方式可以执行它。
- 方式一:不进入Mysql 终端,直接在命令行终端执行
- 方式二:进入Mysql 终端,在Mysql 终端中执行
这两种方式的共同点就是都需要已知Mysql 密码。
对于方式一,可以使用以下命令来执行:
1 | mysql -u root -p < ./modify_user_table.sql |
可以指定数据库:
1 | mysql -u root -p databaseName < ./modify_user_table.sql |
对于方式二,可以使用以下命令来执行:
1 | // 进入Mysql 终端 |