ホームページ  >  記事  >  データベース  >  MySQL で複合キーの自動インクリメントを実現するにはどうすればよいですか?

MySQL で複合キーの自動インクリメントを実現するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-03 05:24:03207ブラウズ

How to Achieve Auto Increment in a Composite Key in MySQL?

MySQL での自動インクリメントを使用した複合キーの定義: 課題

自動インクリメント カラムを使用した複合キーの作成では、課題が発生する可能性があります。 MySQL。これは、特定の制限を課す InnoDB テーブルに特に当てはまります。

シナリオとエラー:

次のテーブル スキーマを考慮してください:

CREATE  TABLE `issue_log` (
`sr_no` INT NOT NULL AUTO_INCREMENT ,
  `app_id` INT NOT NULL ,
  `test_id` INT NOT NULL ,
  `issue_name` VARCHAR(255) NOT NULL ,
primary key (app_id, test_id,sr_no)
);

このクエリを実行しようとすると、次のエラーが発生する可能性があります:

ERROR 1075: Incorrect table definition; there can be only one auto column and it must be defined as a key

目標:

望ましい動作は、一意の組み合わせに対して sr_no 列が自動的に増加することです。

制限事項と解決策:

InnoDB テーブルでは、単一の自動インクリメント列のみが許可されます。したがって、スキーマ定義を通じて目的の動作を直接実現することはできません。

代替案:

この制限を克服する 1 つの解決策は、トリガーまたはプロシージャを使用して手動でインクリメントすることです。基準に基づいて sr_no 列。たとえば、次のトリガーを使用できます:

DELIMITER $$

CREATE TRIGGER xxx BEFORE INSERT ON issue_log
FOR EACH ROW BEGIN
    SET NEW.sr_no = (
       SELECT IFNULL(MAX(sr_no), 0) + 1
       FROM issue_log
       WHERE app_id  = NEW.app_id
         AND test_id = NEW.test_id
    );
END $$

DELIMITER ;

その他の考慮事項:

  • トリガーとプロシージャはデータベースにオーバーヘッドを追加する可能性があります。
  • MyISAM などの代替データベース エンジンは、複合キー内の複数の列にわたる自動インクリメントをサポートしている場合があります。

以上がMySQL で複合キーの自動インクリメントを実現するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。