MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

AUTO_INCREMENT列にPRIMARY KEYの設定は必須?MySQLでの正しい使い方を実例付きで解説

はい、AUTO_INCREMENTを使用する場合はPRIMARY KEYを設定するのが基本です。AUTO_INCREMENTは一意な連番を自動的に採番する仕組みのため、その列は必ず何らかのキー(インデックス)として定義されている必要があります。通常はPRIMARY KEYとして設定するのが最も一般的で推奨される方法です。

サンプルテーブルの作成

まず、AUTO_INCREMENTとPRIMARY KEYを組み合わせたテーブルを作成します。

mysql> create table DemoTable
(
    EmployeeId int NOT NULL AUTO_INCREMENT,
    EmployeeName varchar(40),
    EmployeeAge int,
    PRIMARY KEY(EmployeeId),
    UNIQUE KEY(EmployeeName,EmployeeAge)
);
Query OK, 0 rows affected (0.96 sec)

テーブル構造の確認

DESCコマンドでテーブルの構造を確認してみましょう。

mysql> desc DemoTable;

実行すると、以下のような出力が得られます。

+--------------+-------------+------+-----+---------+----------------+
| Field        | Type        | Null | Key | Default | Extra          |
+--------------+-------------+------+-----+---------+----------------+
| EmployeeId   | int(11)     | NO   | PRI | NULL    | auto_increment |
| EmployeeName | varchar(40) | YES  | MUL | NULL    |                |
| EmployeeAge  | int(11)     | YES  |     | NULL    |                |
+--------------+-------------+------+-----+---------+----------------+
3 rows in set (0.17 sec)

Key列に「PRI」と表示されており、EmployeeIdが主キー(PRIMARY KEY)かつauto_incrementとして設定されていることが確認できます。

レコードの挿入

INSERT文を使って、いくつかのレコードを追加します。このとき、EmployeeIdは指定しません。

mysql> insert into DemoTable(EmployeeName,EmployeeAge) values('Chris',25);
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable(EmployeeName,EmployeeAge) values('Robert',34);
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable(EmployeeName,EmployeeAge) values('Mike',32);
Query OK, 1 row affected (0.09 sec)

レコードの表示

SELECT文ですべてのレコードを表示して、連番が自動的に割り振られているか確認します。

mysql> select *from DemoTable;

実行結果は以下の通りです。

+------------+--------------+-------------+
| EmployeeId | EmployeeName | EmployeeAge |
+------------+--------------+-------------+
|          1 | Chris        |          25 |
|          3 | Mike         |          32 |
|          2 | Robert       |          34 |
+------------+--------------+-------------+
3 rows in set (0.00 sec)

このように、EmployeeIdを明示的に指定しなくても、1から順に一意な連番が自動的に採番されていることがわかります。

まとめ

AUTO_INCREMENT列は必ずキー(インデックス)として定義する必要があります。特にInnoDBストレージエンジンでは、AUTO_INCREMENT列はPRIMARY KEY、または先頭のUNIQUE KEYとして設定しなければなりません。重複のない一意なIDを安定して生成するためにも、AUTO_INCREMENTとPRIMARY KEYを組み合わせて使うのがベストプラクティスといえます。

  1. Tkinterでttkコンボボックスのデフォルト値を設定する方法

    Tkinterのコンボボックス(Combobox)は、Entryウィジェットにドロップダウンメニューを追加できるウィジェットで、アプリケーション内で複数の選択肢からデータを選ばせたい場合に非常に便利です。コンボボックスは Combobox(引数) を使って簡単に作成できます。 さらに、アプリケーションの要件に応じて、コンボボックスにデフォルト値(初期表示値)を設定することも可能です。設定方法はシンプルで、まずコンボボックスに表示したい全ての項目をリストやタプルとして変数に格納します。その後、current(index) メソッドで表示したい項目のインデックス番号を指定すれば、その項目がデフォル

  2. Pythonの辞書(dict)で特定のキーの値を取得・出力する方法

    Pythonの辞書(dict)は、キーと値のペアを格納するコレクションです。特定のキーに関連付けられた値を取得したい場合は、get()メソッドを使うのが便利です。get()メソッドを使って値を取得するget()メソッドにキーを渡すと、そのキーに対応する値が返されます。>>> D1 = {a: 11, b: 22, c: 33} >>> D1.get(b) 22角括弧([])を使って値を取得するまた、リストと同じように、角括弧の中にキーを指定することでも値を取得できます。>>> D1[c] 33get()メソッドと角括弧の違い両者の大きな違い