トップへ(mam-mam.net/)

MariaDB(MySQL)でauto_incrementが設定されているカラムの自動採番した値を取り出す

検索:

MariaDB(MySQL)でauto_incrementが設定されているカラムの自動採番した値を取り出す

最初に

テーブル構造が以下として説明します。
CREATE TABLE t_autoinc( id BIGINT AUTO_INCREMENT, name VARCHAR(10), UNIQUE KEY user_id(id) );

MariaDB [db_test]> desc t_autoinc;
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| id    | bigint(20)  | NO   | PRI | NULL    | auto_increment |
| name  | varchar(10) | YES  |     | NULL    |                |
+-------+-------------+------+-----+---------+----------------+
2 rows in set (0.013 sec)

レコードが2つ入っているとします。
INSERT INTO t_autoinc(name) values('1レコード目'),('2レコード目') ;

+----+--------------------+
| id | name               |
+----+--------------------+
|  1 | 1レコード目       |
|  2 | 2レコード目       |
+----+--------------------+

AUTO_INCREMENT(自動採番)の次の値の取得

AUTO_INCREMENT(自動採番)の次の値の取得は以下のSQLで取得できます。

SELECT AUTO_INCREMENT FROM information_schema.tables
  WHERE TABLE_SCHEMA='データベース名' AND TABLE_NAME='テーブル名';

上記のテーブル「t_autoinc」の場合は以下のSQLで取得できます。

SELECT AUTO_INCREMENT FROM information_schema.tables
  WHERE TABLE_NAME='t_autoinc';
MariaDB [db_test]> SELECT AUTO_INCREMENT FROM information_schema.tables
    ->   WHERE TABLE_NAME='t_autoinc';
+----------------+
| AUTO_INCREMENT |
+----------------+
|              3 |
+----------------+
1 row in set (0.011 sec)

AUTO_INCREMENT(自動採番)の次の値の設定

AUTO_INCREMENT(自動採番)の次の値は以下のSQLで設定できます。

ALTER TABLE テーブル名 AUTO_INCREMENT = 設定したい自動採番の次の値;

上記のテーブル「t_autoinc」の自動採番の次の値を100にする場合は次のSQLで設定できます。

ALTER TABLE t_autoinc AUTO_INCREMENT = 100;
MariaDB [db_test]> ALTER TABLE t_autoinc AUTO_INCREMENT = 100;
Query OK, 0 rows affected (0.012 sec)
Records: 0  Duplicates: 0  Warnings: 0

2レコード追加してからデータを確認してみます。

INSERT INTO t_autoinc(name) values('3レコード目'),('4レコード目') ;
SELECT * FROM t_autoinc;
MariaDB [db_test]> INSERT INTO t_autoinc(name) values('3レコード目'),('4レコード目');
Query OK, 2 rows affected (0.009 sec)
Records: 2  Duplicates: 0  Warnings: 0

MariaDB [db_test]> SELECT * FROM t_autoinc;
+-----+--------------------+
| id  | name               |
+-----+--------------------+
|   1 | 1レコード目       |
|   2 | 2レコード目       |
| 100 | 3レコード目       |
| 101 | 4レコード目       |
+-----+--------------------+
4 rows in set (0.001 sec)

テーブルにレコードを挿入した時のAUTO_INCREMENT(自動採番)の値を取得する

自動採番カラムのあるテーブルにレコードを挿入したときの自動採番値は「SELECT LAST_INSERT_ID();」で取得できます。

SELECT LAST_INSERT_ID();


上記のテーブル「t_autoinc」にレコードを1つ挿入して自動採番値を取得してみます。

INSERT INTO t_autoinc(name) values('5レコード目');
SELECT LAST_INSERT_ID();
MariaDB [db_test]> INSERT INTO t_autoinc(name) values('5レコード目');
Query OK, 1 row affected (0.008 sec)

MariaDB [db_test]> SELECT LAST_INSERT_ID();
+------------------+
| LAST_INSERT_ID() |
+------------------+
|              102 |
+------------------+
1 row in set (0.001 sec)


上記のテーブル「t_autoinc」にレコードを2つ挿入して自動採番値を取得してみます。
複数のレコードを挿入した場合LAST_INSERT_ID()最初の挿入レコードの採番値を返してきます。

INSERT INTO t_autoinc(name) values('6レコード目'), ('7レコード目');
SELECT LAST_INSERT_ID();
MariaDB [db_test]> INSERT INTO t_autoinc(name) values('6レコード目'), ('7レコード目');
Query OK, 2 rows affected (0.008 sec)
Records: 2  Duplicates: 0  Warnings: 0

MariaDB [db_test]> SELECT LAST_INSERT_ID();
+------------------+
| LAST_INSERT_ID() |
+------------------+
|              103 |
+------------------+
1 row in set (0.000 sec)


SELECT文で確認してみます。

MariaDB [db_test]> SELECT * FROM t_autoinc;
+-----+--------------------+
| id  | name               |
+-----+--------------------+
|   1 | 1レコード目       |
|   2 | 2レコード目       |
| 100 | 3レコード目       |
| 101 | 4レコード目       |
| 102 | 5レコード目       |
| 103 | 6レコード目       |
| 104 | 7レコード目       |
+-----+--------------------+
7 rows in set (0.001 sec)