首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL自定义全局定义变量

MySQL自定义全局定义变量
EN

Stack Overflow用户
提问于 2013-03-13 09:30:32
回答 5查看 13.9K关注 0票数 4

在我的数据库设计中,我倾向于存储一些作为角色或类型充当SMALLINT的变量。

例如:

代码语言:javascript
复制
CREATE TABLE `house` (
   `id` int(11) NOT NULL AUTO_INCREMENT,
   `type` smallint(11) NOT NULL,

在PHP中,我需要:

代码语言:javascript
复制
define('HOUSE_SMALL_TYPE', '0');
define('HOUSE_MEDIUM_TYPE', '1');

因此,在PHP中,在SELECT查询中,我会这样做:

代码语言:javascript
复制
$this->db->query("SELECT * FROM house  
                  WHERE type = ?;", HOUSE_SMALL_TYPE);

我的问题是:

  1. 在PHP部分中,是否有更好的方法来做到这一点?
  2. 在MySQL本身中,MySQL是否也具有全局定义功能(如PHP中的定义)?

我也想做一些

代码语言:javascript
复制
SELECT * FROM house  WHERE type = HOUSE_SMALL_TYPE;

在MySQL查询中。

我的目的是,当我在MySQL中进行选择时,我不可能继续映射值0、1、2及其真正的含义。只需方便地查看表值,而不更改结构表和字段。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-03-13 11:39:10

我建议使用MySQL变量:

代码语言:javascript
复制
SET HOUSE_SMALL_TYPE = 0;
SET HOUSE_MEDIUM_TYPE = 1;

然后,在查询中可以使用以下变量:

代码语言:javascript
复制
SELECT * FROM house  WHERE type = @HOUSE_SMALL_TYPE;

此方法定义会话变量:

如果更改会话系统变量,则该值将一直有效,直到会话结束或将该变量更改为不同的值为止。此更改对其他客户端不可见。

如果要定义全局MySQL变量(所有会话都可用):

代码语言:javascript
复制
SET GLOBAL HOUSE_SMALL_TYPE = 0;
SET GLOBAL HOUSE_MEDIUM_TYPE = 1;

若要显式表示变量是全局变量,请在其名称前面加上全局变量或@@ global。设置全局变量需要超级特权。

文档:

SET语句

使用系统变量

用户定义变量

票数 -2
EN

Stack Overflow用户

发布于 2015-05-12 11:43:37

由于MySQL 5.5不可能设置全局用户定义的变量。

解决方法可能是创建一个返回所需内容的存储过程。

代码语言:javascript
复制
DROP PROCEDURE IF EXISTS HOUSE_SMALL_TYPE;
DELIMITER //
CREATE PROCEDURE HOUSE_SMALL_TYPE ()
BEGIN 
SELECT 0;
END//
DELIMITER ;

然后叫它。

代码语言:javascript
复制
CALL HOUSE_SMALL_TYPE();

为了能够修改它,DROP语句是必需的。

票数 4
EN

Stack Overflow用户

发布于 2015-05-21 12:48:48

国际水文学组织,MySQL在这方面有一个巨大的差距,显然在后一个版本。一种选择可能是通过设置OS环境变量,但是如何从MySQL内部检索这些值,我一直无法看到。

这里有一整页:https://dev.mysql.com/doc/refman/5.0/en/setting-environment-variables.html教我们如何在shell中“设置”OS环境变量,但在MySQL中却没有一个真正调用这些变量的词。

作为另一种解决办法,使用函数可能比存储过程更轻量级,如下所示:

代码语言:javascript
复制
CREATE DEFINER=`root`@`localhost` FUNCTION `DEFAULT_COUNTRY_CODE`() RETURNS CHAR(4)
DETERMINISTIC
RETURN '+234';

在查询的其他地方,您可以这样做:

代码语言:javascript
复制
SELECT CONCAT(DEFAULT_COUNTRY_CODE(), "-", telephone) FROM contacts WHERE CountryCode = "NGA"
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15381382

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档