MySQLでテーブルの値を低い値に自動インクリメントするにはどうすればよいですか?
InnoDBエンジンを使用している場合、テーブルのauto_increment値を低い値に設定することはできません。エンジンをInnoDBからMyISAMに変更する必要があります。
注: エンジンMyISAMを使用すると、より低い値を設定できます。ここでは、同じものを使用しています。
公式文書によると:
You cannot reset the counter to a value less than or equal to any that have already been used. For MyISAM, if the value is less than or equal to the maximum value currently in the AUTO_INCREMENT column, the value is reset to the current maximum plus one. For InnoDB, if the value is less than the current maximum value in the column, no error occurs and the current sequence value is not changed.
上に示したように、MyISAMで、一部のIDが削除されたとします。その後、auto_incrementを再度追加すると、IDは低い値から始まります。つまり、残りの最後のIDから始まります(一部のIDを削除した後)。
まず、エンジンMyISAMを使用してテーブルを作成しましょう:
mysql> create table DemoTable (Id int NOT NULL AUTO_INCREMENT PRIMARY KEY)ENGINE='MyISAM'; Query OK, 0 rows affected (0.23 sec)
以下は、挿入コマンドを使用してテーブルにレコードを挿入するためのクエリです。
mysql> insert into DemoTable values(); Query OK, 1 row affected (0.04 sec) mysql> insert into DemoTable values(); Query OK, 1 row affected (0.03 sec) mysql> insert into DemoTable values(); Query OK, 1 row affected (0.03 sec) mysql> insert into DemoTable values(); Query OK, 1 row affected (0.02 sec) mysql> insert into DemoTable values(); Query OK, 1 row affected (0.05 sec) mysql> insert into DemoTable values(); Query OK, 1 row affected (0.08 sec)
以下は、selectコマンドを使用してテーブルのレコードを表示するためのクエリです。
mysql> select *from DemoTable;
これにより、次の出力が生成されます
+----+ | Id | +----+ | 1 | | 2 | | 3 | | 4 | | 5 | | 6 | +----+ 6 rows in set (0.00 sec)
ここで、ID 4、5、および6を削除します。
mysql> delete from DemoTable where Id=4 or Id=5 or Id=6; Query OK, 3 rows affected (0.06 sec)
すべてのレコードをもう一度表示してみましょう。クエリは次のとおりです。
mysql> select *from DemoTable;
これにより、一部のIDを削除した後、次の出力が生成されます。
+----+ | Id | +----+ | 1 | | 2 | | 3 | +----+ 3 rows in set (0.00 sec)
それでは、新しいauto_incrementIDを設定しましょう。
以下は、MyISAMエンジンでauto_increment値を低く設定するためのクエリです。ただし、現在のauto_increment値は7から始まるはずですが、MyISAMエンジンを使用しているため、値は現在の最大値にリセットされます。つまり、3 + 1=4が新しいIDになります。
クエリは次のとおりです。
mysql> alter table DemoTable auto_increment=4; Query OK, 3 rows affected (0.38 sec) Records: 3 Duplicates: 0 Warnings: 0
ここで、いくつかのレコードをもう一度挿入してから、テーブルのすべてのレコードを表示して、auto_incrementの値が4から始まることを確認します。
mysql> insert into DemoTable values(); Query OK, 1 row affected (0.03 sec) mysql> insert into DemoTable values(); Query OK, 1 row affected (0.06 sec) mysql> insert into DemoTable values(); Query OK, 1 row affected (0.02 sec)
以下は、テーブルのすべてのレコードを表示するためのクエリです。
mysql> select *from DemoTable;
これにより、次の出力が生成されます。新しいIDは4から始まります:
+----+ | Id | +----+ | 1 | | 2 | | 3 | | 4 | | 5 | | 6 | +----+ 6 rows in set (0.00 sec)
-
2つのMySQLテーブル間で欠落している値を見つける方法は?
2つのMySQLテーブル間で欠落している値を見つけるには、NOTINを使用します。まずテーブルを作成しましょう- mysql> create table DemoTable1(Value int); Query OK, 0 rows affected (0.56 sec) 挿入コマンド-を使用して、テーブルにいくつかのレコードを挿入します mysql> insert into DemoTable1 values(1); Query OK, 1 row affected (0.15 sec) mysql> insert into DemoTable1 values(2); Q
-
MySQLで自動インクリメント値を1から開始するように設定するにはどうすればよいですか?
テーブルを切り捨てて、MySQLでauto_increment値を1から開始するように設定できます。まずテーブルを作成しましょう- mysql> create table DemoTable ( StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY ); Query OK, 0 rows affected (1.44 sec) 挿入コマンド-を使用して、テーブルにいくつかのレコードを挿入します mysql> insert into DemoTable values(); Query OK, 1 row aff