私はテーブルの最後の更新された行のIDを選択しようとしていますが、この質問はHow to get ID of the last updated row in MySQL?です。トリックは、「MySQLで最後に更新された行のIDをどのように取得するのですか?
SET @uids := null;
UPDATE footable
SET foo = 'bar'
WHERE fooid > 5
AND (SELECT @uids := CONCAT_WS(',', fooid, @uids));
SELECT @uids;
解決策は機能しますが、空の文字列ではなくヌルに設定する理由はわかりません。このステートメントは、リミット句が追加されていても、一致する行ではなく影響を受ける行のみを選択する理由は何ですか。これはMySQLで定義された動作ですか? MySQLマニュアルのどのページを見上げますか?あなたは空の文字列に@uids
を初期化する場合は、それらの間のカンマでfooid
と''
を連結するので、
mysql> select * from transaction_test;
+----+--------+------------+
| id | value1 | value2 |
+----+--------+------------+
| 1 | 1 | 1460600984 |
| 2 | 2 | 1460598960 |
+----+--------+------------+
2 rows in set (0.00 sec)
mysql> set @ids=null;update transaction_test set value2=unix_timestamp(now()) where 1=1 and (SELECT @ids:=concat_ws(',',@ids,value1) ) limit 1;select @ids;
Query OK, 0 rows affected (0.00 sec)
Query OK, 1 row affected (0.05 sec)
Rows matched: 1 Changed: 1 Warnings: 0
+------+
| @ids |
+------+
| 1 |
+------+
1 row in set (0.00 sec)
mysql> set @ids='';update transaction_test set value2=unix_timestamp(now()) where 1=1 and (SELECT @ids:=concat_ws(',',@ids,value1) ) limit 1;select @ids;
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Rows matched: 0 Changed: 0 Warnings: 0
+------+
| @ids |
+------+
| ,1,2 |
+------+
1 row in set (0.00 sec)
あなたは 'UPDATE'に' LIMIT'を適用していますか? –
@MichaelBerkowskiはい、試合の一部を更新して選択する必要があります。 – rox
[user-variables](http://dev.mysql.com/doc/refman/5.7/en/user-variables.html)*** SELECTステートメントでは、各選択式は、クライアント。 *** – rox