在PostgreSQL中,您可以在使用psql运行查询时从命令行传入命名参数。例如,如果您运行如下命令:
psql -v v1=12 -f query.sql
在query.sql中你可以像这样引用v1:
select * from table_1 where id = :v1;
MySQL是否支持类似的东西?
答案 0 :(得分:1)
是的。
TLDR;使用您问题中的示例:
SET @v1=12;
SELECT * FROM table_1 WHERE id = @v1;
请注意,它们在当前会话结束时被销毁。
详细信息
MySQL中的用户定义变量以@
开头。
这里是设置变量的一种方法:
SET @mysite := "example.com";
设置变量时,您还可以使用MySQL的CONCAT:
SET @home_url := CONCAT("https://www.", @mysite);
SET @site_url := CONCAT(@home_url, "/wordpress");
查看其值:
SELECT @mysite, @home_url, @site_url;
+-------------+-------------------------+-----------------------------------+
| @mysite | @home_url | @site_url |
+-------------+-------------------------+-----------------------------------+
| example.com | https://www.example.com | https://www.example.com/wordpress |
+-------------+-------------------------+-----------------------------------+
1 row in set (0.00 sec)
要更新一些值:
UPDATE wp_options SET option_value = @home_url WHERE option_name = "home";
UPDATE wp_options SET option_value = @site_url WHERE option_name = "siteurl";
不幸的是,似乎没有办法让MySQL向您显示所有用户定义变量的列表。
例如,SHOWVARIABLES LIKE "%my%"
仅显示(系统变量),而没有用户定义的变量。
但是,如果您运行的是MariaDB 10.2(相当于MySQL 5.7)或更高版本,MariaDB提供了一个可创建用户变量表的插件,因此您可以查询该表。
有关详细信息,请参见my answer here。
答案 1 :(得分:0)
存储过程示例。
DROP PROCEDURE IF EXISTS so_gibberish.blahBlah7;
DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE so_gibberish.blahBlah7
(
)
BEGIN
select CONCAT('The variable is ',@myVar) AS 'theAnswer';
END$$
DELIMITER ;
测试它:
OS Prompt> mysql -uroot -p so_gibberish -e "set @myVar='Hank Aaron'; call blahBlah7();"
Enter password: ********
+----------------------------+
| theAnswer |
+----------------------------+
| The variable is Hank Aaron |
+----------------------------+
so_gibberish
是数据库名称。 -e
表示运行此查询。
@myVar
成为基于连接的用户变量。