我本质上想在我的 mysql 数据库中创建一个“全局变量”。
所以我有一个包含两个字段的表:
ID
GlobalNumber
我正在做这个嘲讽:
UPDATE that_table SET GlobalNumber=GlobalNumber+1 WHERE ID=whatever
SELECT GlobalNumber FROM that_table WHERE ID=whatever;
但我确信有一种方法可以用一条语句来做到这一点。我尝试的任何操作都会给我带来语法错误。
我怎样才能在一行中完成整个操作?
update
和 select
语句不能一起运行。
update
和select
语句都是两种不同类型的DML(数据操作语言),不能组合在一起。
但是,您可以有选择地更新一些可以使用嵌套查询的元组。
类似这样的:
update that_table
set global_variable = global_variable + 1
where ID IN(Select ID from another_table);
你可以像这样使用mysql的
last_insert_id()
:
UPDATE that_table SET GlobalNumber = last_insert_id(GlobalNumber+1) WHERE ID=whatever
然后在你用来连接 mysql 的库中通常有一些像
last_id
这样的函数会返回由 last_insert_id(expr)
设置的值
或者,如果您只想在下一个查询中使用该 GlobalNumber,您可以在执行更新时设置一个变量,如下所示:
UPDATE that_table SET GlobalNumber = @num := GlobalNumber+1 WHERE ID=whatever
然后在同一连接的后续查询中相关的地方使用
@num
。