SlideShare a Scribd company logo
メッチャ役に立つ
auto_incrementの話

    @kitakoh 2012
自己紹介

@kitakoh(放置中…)

大分から来ました

パン食べるパン

よろしくお願いします!
auto_increment



通し番号を自動で振ってくれる機能
user_id(auto_increment),
user_name(char 10)

だけのテーブルで実験
普通にINSERT

INSERT INTO tbl (user_name)
VALUES
(‘user01’),
(‘user02’),
(‘user03’);
普通にINSERT
 +---------+-----------+
 | user_id | user_name |
 +---------+-----------+
 |       1 | user01    |
 |       2 | user02    |
 |       3 | user03    |
 +---------+-----------+
3 rows in set (0.00 sec)
user_id=2をDELETE
   +---------+-----------+
   | user_id | user_name |
   +---------+-----------+
   |       1 | user01    |
   |     ! 2 | user02    |
   |       3 | user03    |
   +---------+-----------+
  3 rows in set (0.00 sec)
この状態で新規行をINSERT
    +---------+-----------+
    | user_id | user_name |
    +---------+-----------+
    |       1 | user01    |
    |       3 | user03    |
    +---------+-----------+
   2 rows in set (0.00 sec)
最後に追加された
 +---------+-----------+
 | user_id | user_name |
 +---------+-----------+
 |       1 | user01    |
 |       3 | user03    |
 |     ! 4 | userXX    |
 +---------+-----------+
3 rows in set (0.00 sec)
最後の行をDELETEしてINSERTすると?
     +---------+-----------+
     | user_id | user_name |
     +---------+-----------+
     |       1 | user01    |
     |       3 | user03    |
     |     ! 4 | userXX    |
     +---------+-----------+
    3 rows in set (0.00 sec)
最後に追加された
 +---------+-----------+
 | user_id | user_name |
 +---------+-----------+
 |       1 | user01    |
 |       3 | user03    |
 |     ! 5 | userYY    |
 +---------+-----------+
3 rows in set (0.00 sec)
auto_incrementで振られ
るシーケンスは再利用され
       ない
user_idを指定してみる


INSERT INTO tbl (user_id, user_name)
VALUES (10, ‘user10’);
ここに新規行をINSERT
  +---------+-----------+
  | user_id | user_name |
  +---------+-----------+
  |       1 | user01    |
  |       3 | user03    |
  |       4 | userXX    |
  |       5 | userYY    |
  |      10 | user10    |
  +---------+-----------+
最後に追加された
+---------+-----------+
| user_id | user_name |
+---------+-----------+
|       1 | user01    |
|       3 | user03    |
|       4 | userXX    |
|       5 | userYY    |
|      10 | user10    |
|    ! 11 | userZZ    |
+---------+-----------+
歯抜けのuser_idを指定


INSERT INTO tbl (user_id, user_name)
VALUES (2, ‘user2’);
指定場所に追加される
 +---------+-----------+
 | user_id | user_name |
 +---------+-----------+
 |       1 | user01    |
 |     ! 2 | user02    |
 |       3 | user03    |
 |       4 | userXX    |
 |       5 | userYY    |
 |      10 | user10    |
 |      11 | userZZ    |
シーケンスは基本的に再利
用されないが、値を指定す
  れば再利用可能
全行DELETEするとどうなる?

(シーケンス11まで振られている状態で)
DELETE FROM tbl;

INSERT INTO tbl(user_name)
VALUES(‘userXX’);
最後に追加される
 +---------+-----------+
 | user_id | user_name |
 +---------+-----------+
 |      12 | userXX    |
 +---------+-----------+
1 rows in set (0.00 sec)
テーブルをTRUNCATEするとどうなる?


(シーケンスが12まで振られてる状態で)
TRUNCATE TABLE tbl;

INSERT INTO
tbl(user_name)VALUES(‘userXX’);
シーケンスが巻き戻った
  +---------+-----------+
  | user_id | user_name |
  +---------+-----------+
  |       1 | userXX    |
  +---------+-----------+
 1 rows in set (0.00 sec)

        ※MySQL5.5
DELETEでは巻き戻らないが、
 TRUNCATEだと巻き戻る
user_idが最大値の状態でINSERT

INSERT INTO tbl(user_id, user_name)
VALUES(127, ‘userXX’);

        +---------+-----------+
        | user_id | user_name |
        +---------+-----------+
        |     127 | userXX    |
        +---------+-----------+
           ↑TINYINT(SIGNED)
ERRORになる


ERROR 1062 (23000): Duplicate entry
'127' for key 'PRIMARY'
シーケンス値は、ALTER文で指定できる




ALTER TABLE tbl auto_increment = 10;

10に指定しているので、新規行INSERTすると11から
入る
今のシーケンス値を知る方法
  SHOW CREATE TABLE tbl;

+-------+------------------------------------------------+
| Table | Create Table                                   |
+-------+------------------------------------------------+
| tbl   | CREATE TABLE `tbl` (                           |
|       | `user_id` tinyint(4) NOT NULL AUTO_INCREMENT, |
|       | `user_name` char(10) DEFAULT NULL,             |
|       | PRIMARY KEY (`user_id`)                        |
|       | ) ENGINE=InnoDB AUTO_INCREMENT=10              |
+-------+------------------------------------------------+
複合キーでauto_increment


CREATE TABLE tbl(
    dept_id TINYINT,   ←部門IDを追加
    user_id TINYINT AUTO_INCREMENT,
    user_name CHAR(10),
    PRIMARY KEY(dept_id, user_id)
)ENGINE=MyISAM;
複合キーでauto_increment

insert into tbl(dept_id, user_name) values(1, 'aa');
insert into tbl(dept_id, user_name) values(1, 'bb');
insert into tbl(dept_id, user_name) values(1, 'cc');

insert into tbl(dept_id, user_name) values(2, 'aa');
insert into tbl(dept_id, user_name) values(2, 'bb');
insert into tbl(dept_id, user_name) values(2, 'cc');

1と2の部門に3件ずつINSERTしてみる
複合キーでauto_increment

 +---------+---------+-----------+
 | dept_id | user_id | user_name |
 +---------+---------+-----------+
 |       1 |       1 | aa        |
 |       1 |       2 | bb        |
 |       1 |       3 | cc        |
 |       2 |       1 | aa        |
 |       2 |       2 | bb        |
 |       2 |       3 | cc        |
 +---------+---------+-----------+
 6 rows in set (0.01 sec)
複合キーでauto_increment

 dept_idとuser_idで重
 複しないように、自動的に
 user_idを連番で振ってく
 れます。(MyISAM限定)
メッチャ役に立つauto_incrementの話




        完 ご清聴下さった皆様、
      場所をご提供下さいましたgumi様、
         ありがとうございました

More Related Content

PDF
簡易版AutoML+OptunaによるHyperparams Tuning
PPTX
2021 days opening
PPTX
FreeCAD OpenFOAM Workbenchセットアップ方法と課題
PDF
Boost.Logとfluentdで始めるログ活用術
PDF
HELYX-OS in DEXCS2016 for OpenFOAM
PDF
OpenMDAOの最適化を試す(第23回オープンCAE勉強会@関西)
PDF
Free cad 0.19.2 and cfdof (Japanese Ver.)
PDF
SQLアンチパターン - ジェイウォーク
簡易版AutoML+OptunaによるHyperparams Tuning
2021 days opening
FreeCAD OpenFOAM Workbenchセットアップ方法と課題
Boost.Logとfluentdで始めるログ活用術
HELYX-OS in DEXCS2016 for OpenFOAM
OpenMDAOの最適化を試す(第23回オープンCAE勉強会@関西)
Free cad 0.19.2 and cfdof (Japanese Ver.)
SQLアンチパターン - ジェイウォーク

What's hot (20)

PDF
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen
PDF
ベータ分布の謎に迫る
ODP
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
PPTX
PostgreSQLモニタリングの基本とNTTデータが追加したモニタリング新機能(Open Source Conference 2021 Online F...
PPTX
パケット キャプチャで学ぶ SMB (CIFS) の基本
PDF
MySQL SYSスキーマのご紹介
PDF
ソーシャルゲームのためのデータベース設計
PPTX
入社100日の新人がクラスメソッドでの激速の日々を赤裸々に語る
PPTX
AlloyDBを触ってみた!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
FPGA, AI, エッジコンピューティング
PPTX
FSI analysis with preCICE (OpenFOAM and CalculiX)
PDF
次世代量子情報技術 量子アニーリングが拓く新時代 -- 情報処理と物理学のハーモニー --
PDF
GoとDDDでモバイルオーダープラットフォームを 型安全に作り直した話
PPTX
組合せ最適化問題と解法アルゴリズム
PDF
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
PDF
ROS2勉強会 4章前半
PPTX
RLSを用いたマルチテナント実装 for Django
PPTX
初心者向け負荷軽減のはなし
PDF
What’s new in cloud run 2021 後期
PDF
最近のKaggleに学ぶテーブルデータの特徴量エンジニアリング
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen
ベータ分布の謎に迫る
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
PostgreSQLモニタリングの基本とNTTデータが追加したモニタリング新機能(Open Source Conference 2021 Online F...
パケット キャプチャで学ぶ SMB (CIFS) の基本
MySQL SYSスキーマのご紹介
ソーシャルゲームのためのデータベース設計
入社100日の新人がクラスメソッドでの激速の日々を赤裸々に語る
AlloyDBを触ってみた!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
FPGA, AI, エッジコンピューティング
FSI analysis with preCICE (OpenFOAM and CalculiX)
次世代量子情報技術 量子アニーリングが拓く新時代 -- 情報処理と物理学のハーモニー --
GoとDDDでモバイルオーダープラットフォームを 型安全に作り直した話
組合せ最適化問題と解法アルゴリズム
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
ROS2勉強会 4章前半
RLSを用いたマルチテナント実装 for Django
初心者向け負荷軽減のはなし
What’s new in cloud run 2021 後期
最近のKaggleに学ぶテーブルデータの特徴量エンジニアリング
Ad

Viewers also liked (20)

PPTX
私がMySQLを始めた理由
KEY
カジュアルにバックアップ - MySQL Casual Talks 福岡
KEY
My sql casual_in_fukuoka_vol1
KEY
Mysql casial01
PDF
MySQL de NoSQL Fukuoka
PPTX
MySQL for Excelの紹介
PDF
カジュアルにギャップキーロックとネクストキーロック
PDF
MySQL Casual Talks in Fukuoka vol.2
KEY
Mysql casual fukuoa_vlo_2
PDF
なかったらINSERTしたいし、あるならロック取りたいやん?
PDF
Blazing Performance with Flame Graphs
PPTX
DevOps Practices: Configuration as Code
PDF
Configuration As Code - Adoption of the Job DSL Plugin at Netflix
PPTX
深い親子関係のテーブル設計
PDF
DB技術[実践]入門を読んだ
PDF
MySQL カジュアル 福岡 03
PPTX
Chef の気まぐれ環境構築 〜季節の Capistrano を添えて〜 #jawsug
PPTX
ドキュメントの話、しませんか? #428rk01
PDF
外部キー制約に伴うロックの小話
PDF
PayPal Big Data and MySQL Cluster
私がMySQLを始めた理由
カジュアルにバックアップ - MySQL Casual Talks 福岡
My sql casual_in_fukuoka_vol1
Mysql casial01
MySQL de NoSQL Fukuoka
MySQL for Excelの紹介
カジュアルにギャップキーロックとネクストキーロック
MySQL Casual Talks in Fukuoka vol.2
Mysql casual fukuoa_vlo_2
なかったらINSERTしたいし、あるならロック取りたいやん?
Blazing Performance with Flame Graphs
DevOps Practices: Configuration as Code
Configuration As Code - Adoption of the Job DSL Plugin at Netflix
深い親子関係のテーブル設計
DB技術[実践]入門を読んだ
MySQL カジュアル 福岡 03
Chef の気まぐれ環境構築 〜季節の Capistrano を添えて〜 #jawsug
ドキュメントの話、しませんか? #428rk01
外部キー制約に伴うロックの小話
PayPal Big Data and MySQL Cluster
Ad

Similar to メッチャ役に立つauto_incrementの話 (9)

PDF
http2 最速実装 v2
PDF
DB tech showcase_tokyo2018_LOCONDO
PDF
MySQL 入門的なはなし
PDF
MySQL勉強会 クエリチューニング編
PDF
ふくよかなモデル
PDF
5 古雷my sql源碼與資料庫規範
PDF
削除フラグのはなし
PDF
MySQLとPostgreSQLにおける基本的なアカウント管理
PDF
Locondo 20190215@ec tech_group
http2 最速実装 v2
DB tech showcase_tokyo2018_LOCONDO
MySQL 入門的なはなし
MySQL勉強会 クエリチューニング編
ふくよかなモデル
5 古雷my sql源碼與資料庫規範
削除フラグのはなし
MySQLとPostgreSQLにおける基本的なアカウント管理
Locondo 20190215@ec tech_group

メッチャ役に立つauto_incrementの話

Editor's Notes