我想在字段username
中使用自动命名在MySQL中插入数据,但我该怎么办呢?
目前的数据是:
+----+----------+ | id | username | +----+----------+ | 1 | admin1 | | 2 | admin2 | +----+----------+
我尝试使用这个sql但它不能:
INSERT INTO `tbl_user` ( `username` ) VALUES ( 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 | username | +----+----------+ | 1 | admin1 | | 2 | admin2 | | 6 | admin3 | | 9 | admin4 | +----+----------+
可能吗?感谢。
答案 0 :(得分: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)
);
答案 1 :(得分:1)
查询:
<强> SQLFIDDLEExample 强>
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 |