5

フィールドに自動命名を使用してMySQLにデータを挿入したいのですusernameが、どうすればできますか?
現在、テーブルのデータは次のとおりです。

+----+----------+
| | ID | ユーザー名 |
+----+----------+
| | 1 | 管理者1 |
| | 2 | 管理者2 |
+----+----------+

このSQLを使用しようとしましたが、できません:

INSERT INTO `tbl_user` (
ユーザー名
)
値 (
CONCAT('admin',(SELECT MAX(SUBSTRING_INDEX(`username`,'admin',-1))+1 FROM `tbl_user`))
);

エラーメッセージが表示されます#1093 - You can't specify target table 'tbl_user' for update in FROM clause

最終結果は次のとおりです。

+----+----------+
| | ID | ユーザー名 |
+----+----------+
| | 1 | 管理者1 |
| | 2 | 管理者2 |
| | 6 | 管理者3 |
| | 9 | 管理者4 |
+----+----------+

それは可能ですか?ありがとう。

4

2 に答える 2

6

挿入後に列のユーザー名を更新するトリガーを使用できます。これを実際に行う方法についての詳細は次のとおりです。 http://www.roseindia.net/sql/trigger/mysql-trigger-after-insert.shtml

編集

MySQL では、同じテーブルで宣言されたトリガーからテーブルを更新できないことを忘れていました。

ただし、これはあなたがやろうとしていることをするはずです:

SET @id := (SELECT id FROM YOUR_TABLE ORDER BY id DESC LIMIT 1);
INSERT INTO YOUR_TABLE (username) VALUES(
   CONCAT("ADMIN", @id + 1)
);
于 2013-01-25T14:24:58.937 に答える
1

クエリ:

SQLFIDDLE例

INSERT INTO `tbl_user` (
`username`
)
VALUES (
CONCAT('admin',(SELECT MAX(CAST(REPLACE(`username`,'admin','') AS SIGNED INTEGER))+1 
                FROM (SELECT * FROM tbl_user) t))
);

結果:

|     ID | USERNAME |
---------------------
|      1 |   admin1 |
|      2 |   admin2 |
| (null) |   admin3 |
于 2013-01-25T14:29:37.827 に答える