「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > MySQL の主キーでなくても自動インクリメント列は存在できますか?

MySQL の主キーでなくても自動インクリメント列は存在できますか?

2024 年 11 月 4 日に公開
ブラウズ:585

Can Auto-Increment Columns Exist Without Being the Primary Key in MySQL?

不正なテーブル定義エラーへの対処: 自動インクリメントと主キーのバランス調整

このシナリオには、ID 列がビジュアルの自動インクリメント フィールドとして機能する MySQL テーブルが含まれます。 memberid 列は実際の一意のキーとして機能します。ただし、PRIMARY KEY (memberid) を使用してテーブルを定義しようとすると、自動列は 1 つだけ存在でき、それはキーである必要があることを示すエラー (1075) が発生します。

エラーの解決: 自動インクリメントの保持および Unique Key

この問題を解決するには、インデックス (キー) が定義されていれば、PRIMARY KEY ではない自動インクリメント列を使用できます。変更されたテーブル定義は次のとおりです:

CREATE TABLE members (
  id int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  memberid VARCHAR(30) NOT NULL,
  `time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  firstname VARCHAR(50) NULL,
  lastname VARCHAR(50) NULL,
  PRIMARY KEY (memberid),
  KEY (id)                          # or: UNIQUE KEY (id)
) ENGINE = MYISAM;

ID 列に KEY または UNIQUE KEY インデックスを追加すると、自動インクリメント機能が維持され、memberid 列が主キーになり、memberid 値に基づいた効率的なクエリが可能になります。

最適なアプローチの選択: パフォーマンスと容量のバランス

最適な選択は、パフォーマンスとディスク容量の相対的な重要性によって決まります。パフォーマンスが最も重要な場合は、自動インクリメント ID 列を維持し、memberid のインデックスを使用するとバランスが取れます。

  • 自動インクリメント ID により、効率的な並べ替えと範囲クエリが提供されます。
  • memberid のインデックスにより、一意のメンバー ID を使用した迅速な検索が保証されます。

ただし、ディスク容量が重要な問題である場合は、id 列を完全に削除し、主キーと自動の両方として memberid 列を利用することを検討してください。 -増加フィールド。このアプローチでは、スペース利用率を向上させるためにパフォーマンスがある程度犠牲になります。最終的に、パフォーマンスとスペースのどちらを選択するかは、アプリケーションの特定の要件によって決まります。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3