ホームページ >データベース >mysql チュートリアル >MySQL で自動インクリメントカラムと別の主キーの両方を使用するにはどうすればよいですか?
MySQL では、自動インクリメント カラムとそうでない主キーの両方を定義しようとすると課題が発生します。自動インクリメント列。デフォルトでは、MySQL では自動インクリメント カラムは 1 つだけ存在でき、それを主キーとして指定する必要があると規定されています。これは、テーブルのパフォーマンスとデータ取得効率を最適化しようとするときに混乱を招く可能性があります。
次の例を考えてみましょう: id 列が auto- としてマークされているメンバー テーブル視覚的な監視を容易にするために増分され、一方、memberid 列はクエリでメンバーを識別するための主キーとして機能します。目標は、memberid を主キーとして確立しながら自動インクリメント機能を維持することです。
PRIMARY KEY (memberid) を使用してテーブルを作成しようとすると、エラーが発生します:
1075 - Incorrect table definition; there can be only one auto column and it must be defined as a key
エラーにもかかわらず、自動インクリメント列と異なる主キーの両方を使用することは可能です。以下に 2 つの実行可能なアプローチを示します。
1.自動インクリメント列のインデックス作成
ID 列にインデックスを作成して、ID と memberID の両方に基づいて効率的に取得できるようにします。変更されたテーブル定義は次のようになります:
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`) ) ENGINE = MYISAM;
2.自動インクリメント列を主キーの一部にする
主キー複合に id 列を含めるようテーブルを再定義し、id と memberid の両方を主キー識別の定義要素にします。変更された定義は次のようになります。
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 (`id`, `memberid`) ) ENGINE = MYISAM;
これらのアプローチのいずれかを実装すると、視覚的な利便性のための自動インクリメント列の必要性と、効率的なメンバー識別のためのカスタム キー (メンバー ID) の使用のバランスを取ることができます。テーブルのパフォーマンスを損なうことなくクエリを実行できます。
以上がMySQL で自動インクリメントカラムと別の主キーの両方を使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。