若干、無理矢理感がありますが、以下なら 1クエリで INSERT できるため、custom_id
の重複を防ぐことができます。
sql
1INSERT INTO user
2SELECT
3 0,
4 CAST(IFNULL(MAX(CAST(custom_id AS UNSIGNED)), 0) + 1 AS CHAR),
5 '名無し太郎'
6FROM user;
実行結果
sql
1mysql> CREATE TABLE `user`
2 -> (
3 -> `id` INTEGER NOT NULL AUTO_INCREMENT,
4 -> `custom_id` VARCHAR(16),
5 -> `name` VARCHAR(32),
6 -> PRIMARY KEY (`id`)
7 -> ) ENGINE=MyISAM;
8Query OK, 0 rows affected (0.00 sec)
9
10mysql> INSERT INTO user
11 -> SELECT
12 -> 0,
13 -> CAST(IFNULL(MAX(CAST(custom_id AS UNSIGNED)), 0) + 1 AS CHAR),
14 -> '名無し太郎'
15 -> FROM user;
16Query OK, 1 row affected (0.00 sec)
17Records: 1 Duplicates: 0 Warnings: 0
18
19mysql> INSERT INTO user
20 -> SELECT
21 -> 0,
22 -> CAST(IFNULL(MAX(CAST(custom_id AS UNSIGNED)), 0) + 1 AS CHAR),
23 -> '名無し花子'
24 -> FROM user;
25Query OK, 1 row affected (0.00 sec)
26Records: 1 Duplicates: 0 Warnings: 0
27
28mysql> SELECT * FROM user;
29+----+-----------+-----------------+
30| id | custom_id | name |
31+----+-----------+-----------------+
32| 1 | 1 | 名無し太郎 |
33| 2 | 2 | 名無し花子 |
34+----+-----------+-----------------+
352 rows in set (0.00 sec)
追加したレコードのid
は、SELECT LAST_INSERT_ID();
で取得できます。
https://dev.mysql.com/doc/refman/5.6/ja/information-functions.html#function_last-insert-id
PHP からの場合、PDO をお使いならPDO::lastInsertId()
で、同様の結果を得られます。
http://php.net/manual/ja/pdo.lastinsertid.php
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/02/03 05:35
2017/02/03 05:46
2017/02/03 06:18