自動インクリメント制約[MySQL][データベース]

自動増加

自動インクリメントの役割:

増分するフィールドの値です

自動インクリメント列の機能:

  1. テーブルには最大で1つの自動インクリメント列しか存在できません
  2. 一意の識別子または順次値を生成する必要がある場合は、自動インクリメント列を設定できます
  3. 自己成長列制約の列は、キー列(主キーまたは一意キー)である必要があります
  4. 自動インクリメント制約のある列のデータは整数型である必要があります
  5. 自動インクリメント列に0とnullを追加することはできません。自動インクリメント列に0またはnullを追加しようとすると、現在の自動インクリメント列の最大値に基づいて自動インクリメントされます。 0またはnullを加算しようとすると、加算しない場合と同様に自動的にインクリメントされますが、自動インクリメント列に0以外の特定の値を手動で指定すると、この特定の値に直接割り当てられます。時間。

では、自動インクリメント列を設定した場合はどうでしょうか。

ここでは、自己成長列を設定する2つの方法もあります。

方法1:CREATETABLE中に設定する

CREATE TABLE test7(
id INT PRIMARY KEY AUTO_INCREMENT,
last_name VARCHAR(15)
);
  • ここでは、idフィールドに主キー制約を追加し、idを自動インクリメント列として設定します

ここでは、いくつかの問題を例とともに示します。

INSERT INTO test7(id,last_name)
VALUES(0,'tom');
  • 現時点では、自動インクリメント列として設定されているidフィールドに0を追加しようとしています。前述したように、自動インクリメント列に0とnullを追加することはできません。0またはnullを追加した場合、0とnullは追加されないと見なされます。この時点で追加され、デフォルトのメソッドを使用して追加されます。つまり、デフォルトの割り当てが実行され、自動インクリメント列はデフォルトで1から自動インクリメントを開始します。このとき、開いた後テーブルでは、テーブル内のtomに対応するIDが0ではなく、1であることがわかります。
INSERT INTO test7(id,last_name)
VALUES(NULL,'tom1');
  • このとき、もう一度実行すると、この時点で、idフィールドが以前に主キー制約として設定されていたことがわかります(自己インクリメント列はキー列にのみ設定できます)。この時点で追加します。主キー制約フィールドにnullの場合、それは理由になります。追加できず、エラーが報告されますが、現時点ではエラーが報告されないことがわかります。なぜですか?—これは実際に自動インクリメント列にnullまたは0を追加すると、デフォルトで追加されます。つまり、通常の自動インクリメントの場合、この時点でIDが1のレコードがあり、今回は自動インクリメントされます。次にnullを追加しますが、実際にはnullは追加されないため、nullを追加しませんでした。今回は、間違いはありません。
INSERT INTO test7(id,last_name)
VALUES(-10,'tom3');
  • このとき、テーブルの前にそれぞれID 1と2の2つのレコードがあります。これが通常の自己インクリメントの場合、idの次の値は3になりますが、この時点で、新しいレコードを追加します。 、idの値をidに割り当てます。-10、次に、前に述べたように、この時点で自動インクリメント列は、0を追加したりnullを追加したりしない限り、追加できます。このとき、次のことができます。追加したtom3に対応するIDが-10であることがわかります
    • また、IDが-10で追加したレコードは、テーブルの最初のレコードの位置に移動することもわかります。これは、自動インクリメント列が自然数の小さいものから大きいものの順に配置されているためです。時間-101と2未満の場合、この時点で10がテーブルの最初のレコードになります

注:実際の開発では、通常、主キー制約のフィールドを自動インクリメント列として設定します。主キー制約にauto_incrementを追加した後、つまり自動インクリメントを設定した後、このフィールドを明示的に指定しないでください。割り当て、このフィールドをデフォルトで拡大させます

方法2:ALTERTABLE中に設定する

まず、データテーブルを作成しましょう

CREATE TABLE test8(
id INT PRIMARY KEY,
last_name VARCHAR(15)
);
  • このとき、テーブルtest8を作成し、このとき、このテーブルのidフィールドに主キー制約を追加しました。

次に、例を使用して、ALTERTABLE中に自動インクリメントを設定する方法を説明します。

ALTER TABLE test8()
MODIFY id INT AUTO_INCREMENT;
  • ここでは、フィールドを変更してidフィールドを自動インクリメント列に設定します

自動インクリメントを削除する(つまり、自動インクリメントしないように設定する)方法は?

また、ALTERTABLE中に自動インクリメントを削除します

ALTER TABLE test8
MODIFY id INT;
  • ここで、test8テーブルのidフィールドが自動的に増加しないように正常に設定されました(自動増加を削除すると、実際には増加しないように設定されます。つまり、フィールドが変更されます)。

おすすめ

転載: blog.csdn.net/m0_57001006/article/details/123587309