mysql 用户变量 用来存储中间结果(查询结果),以便于该结果在后续语句中的使用。
首先来看一个锁定:
mysql> LOCK TABLES projects READ, temp WRITE;
mysql> SELECT sum(typeid) as sum FROM projects WHERE user_id = 100;
mysql> UPDATE temp SET total = 14850 WHERE user_id = 100;
mysql> UNLOCK TABLES;
在这个过程中,需要记住第一次的查询结果,在进行UPDATE语句中的相应修改。若在PHP中,则可使用mysql_fetch_array()检索SELECT语句产生的数据行,将值存在PHP变量中在执行UPDATE语句,并在WHERE子句中包含PHP 变量的值。
还有一种更快捷的办法,将数据存储在MySQL用户变量中。MySQL用户变量可以直接存储连接结果,不必将结果传至Web服务器。之前的例子可以进行如下改写
mysql> LOCK TABLES projects READ, temp WRITE;
mysql> SELECT @total:=sum(price) FROM projects WHERE user_id = 100;
mysql> UPDATE temp SET total = @total WHERE user_id = 100;
mysql> UNLOCK TABLES;
mysql 用户变量以@字符为前缀,赋值运算符是:=。本例中,SELECT语句的结果存在MySQL的变量@total中,在UPDATE语句中,变量@total的值赋给字段total。
注:
- mysql 用户变量只对同一个数据库的连接有效,连接关闭时随即消失
- mysql 用户变量只能包含字母、数字、字符、下划线、$、句点。
- 通常只在一个语句中给变量赋值,并在另一个语句中使用该变量时才有效,为避免bug,一般不在同一语句中赋值并使用变量。