データの整合性を維持することが重要な状況では、2 つの列を主キーとして使用することが適切な場合があります。アプローチ。ただし、一方の列にもう一方の特定の値に基づいて自動インクリメントを設定しようとすると、問題が発生する可能性があります。
MySQL ユーザーの場合、この問題に取り組む際には 2 つのオプションを考慮する必要があります。
MyISAM エンジンを使用するテーブルの場合、複数列インデックス内のセカンダリ列の AUTO_INCREMENT 属性。セカンダリ列の自動インクリメント値は次のように計算されます。
MAX(auto_increment_column) + 1 WHERE prefix=given-prefix
この手法を使用すると、プレフィックス列の値に基づいてデータを順序付きセットにグループ化できます。
2 つの主キー列、database_id と 2 つを持つ mytable という名前の次のテーブルについて考えてみましょう。 table_id:
CREATE TABLE mytable ( database_id MEDIUMINT NOT NULL, table_id MEDIUMINT NOT NULL AUTO_INCREMENT, other_column CHAR(30) NOT NULL, PRIMARY KEY (database_id,table_id) ) ENGINE=MyISAM;
mytable にデータを挿入すると、一意のデータベース ID 値ごとに table_id が自動的に増加します:
INSERT INTO mytable (database_id, other_column) VALUES (1,'Foo'),(1,'Bar'),(2,'Baz'),(1,'Bam'),(2,'Zam'),(3,'Zoo');
テーブルからデータを取得すると、行は次の順序に基づいて並べ替えられます。 Database_id 列と table_id 列の両方:
SELECT * FROM mytable ORDER BY database_id,table_id; +----------+-------------+--------------+ | table_id | database_id | other_column | +----------+-------------+--------------+ | 1 | 1 | Foo | | 2 | 1 | Bar | | 3 | 1 | Bam | | 1 | 2 | Baz | | 2 | 2 | Zam | | 1 | 3 | Zoo | +----------+-------------+--------------+
以上がMySQL でセカンダリ主キー列に自動インクリメントを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。