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