MySQL UPDATE查询中ID最高且字段等于变量?

语法如下

update yourTableName
set yourColumnName1=yourValue where yourColumnName2=yourValue order by yourIdColumnName DESC LIMIT 1;

为了理解上述语法,让我们创建一个表。创建表的查询如下

mysql> create table UpdateWithHighestDemo
   -> (
   -> UserId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
   -> UserStatus tinyint,
   -> UserRank int
   -> );

使用insert命令在表中插入一些记录。

查询如下

mysql> insert into UpdateWithHighestDemo(UserStatus,UserRank) values(1,78);
mysql> insert into UpdateWithHighestDemo(UserStatus,UserRank) values(0,118);
mysql> insert into UpdateWithHighestDemo(UserStatus,UserRank) values(1,223);
mysql> insert into UpdateWithHighestDemo(UserStatus,UserRank) values(1,225);
mysql> insert into UpdateWithHighestDemo(UserStatus,UserRank) values(0,227);
mysql> insert into UpdateWithHighestDemo(UserStatus,UserRank) values(0,230);

使用select语句显示表中的所有记录。

查询如下

mysql> select *from UpdateWithHighestDemo;

以下是输出

+--------+------------+----------+
| UserId | UserStatus | UserRank |
+--------+------------+----------+
| 1      | 1          | 78       |
| 2      | 0          | 118      |
| 3      | 1          | 223      |
| 4      | 1          | 225      |
| 5      | 0          | 227      |
| 6      | 0          | 230      |
+--------+------------+----------+
6 rows in set (0.00 sec)

这是要更新的查询列

mysql> update UpdateWithHighestDemo
-> set UserStatus=1 where UserRank=230 order by UserId DESC LIMIT 1;
Rows matched: 1 Changed: 1 Warnings: 0

让我们使用select语句检查并显示表中的记录。

查询如下

mysql> select *from UpdateWithHighestDemo;

以下是输出

+--------+------------+----------+
| UserId | UserStatus | UserRank |
+--------+------------+----------+
| 1      | 1          | 78       |
| 2      | 0          | 118      |
| 3      | 1          | 223      |
| 4      | 1          | 225      |
| 5      | 0          | 227      |
| 6      | 1          | 230      |
+--------+------------+----------+
6 rows in set (0.00 sec)

现在,如果要使用最高ID更新,则ORDER BY子句很有用。在上面的示例输出中,最高的“ UserId” = 6,UserStatus为1。

让我们将UserStatus更新为0。

查询如下

mysql> update UpdateWithHighestDemo
   -> set UserStatus=0 order by UserId DESC LIMIT 1;
Rows matched: 1 Changed: 1 Warnings: 0

使用select语句检查表中的记录。

查询如下

mysql> select *from UpdateWithHighestDemo;
+--------+------------+----------+
| UserId | UserStatus | UserRank |
+--------+------------+----------+
| 1      | 1          | 78       |
| 2      | 0          | 118      |
| 3      | 1          | 223      |
| 4      | 1          | 225      |
| 5      | 0          | 227      |
| 6      | 0          | 230      |
+--------+------------+----------+
6 rows in set (0.00 sec)