mysql在所有会话中定义变量

时间:2015-02-10 15:16:08

标签: mysql amazon-rds

我有一个包含几个变量的表(比方说tbl_param)。我每次需要使用其中一个时都要查询tbl_param。我有一个案例,我需要在触发器中使用这些变量,所以每次执行这些触发器时我都要查询tbl_param。但是如果我要为连接到db的每个用户使用相同的变量呢?将它们设置一次是合乎逻辑的,因为它不会经常改变(只有当有问题的变量在tbl_param中更新时)。我知道我可以设置会话变量,但它不能解决问题,因为它们只能在一个连接的持续时间内访问。因此,当建立新连接时,我需要再次查询tbl_param。例如,我可以定义一个在服务器启动时加载的新系统变量,并且可以在tbl_param更新时更新它吗?或者还有另一种选择吗?

1 个答案:

答案 0 :(得分:0)

mysql.cnf(或mysql.ini)文件中可以定义系统;但这将要求您对该文件具有文件权限。在我的本地服务器(Ubuntu 20.04.2)上,它位于 /etc/mysql/mariadb.conf.d/50-server.cnf 中。但这在远程服务器上不起作用;因为我们无权访问系统文件(等)。

我找到了一种替代方法,可以满足您的想法。设置会话变量(等待它;我知道会话变量在其他会话中消失了);但将其值初始化为表中的某个值。例如,始终在从表启动时初始化您的会话变量(并根据需要相应地更新到表)。


如果使用 PHP (MIS) 禁用 mysql 触发器

为某些特定记录禁用某些表上的触发器。而不是删除触发器并插入记录,然后重新创建这些触发器。只需稍作更改即可重写触发器。它将根据此会话变量禁用。

然后您的 MIS 将始终将会话变量初始化为从表中获取的某个值。并基于此值跳过或执行触发器。