ホームページ >データベース >mysql チュートリアル >データベース内の特定の主キー値に基づいて個別の自動インクリメント シーケンスを実現するにはどうすればよいですか?

データベース内の特定の主キー値に基づいて個別の自動インクリメント シーケンスを実現するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2025-01-04 12:24:34505ブラウズ

How Can I Achieve Separate Auto-Increment Sequences Based on Specific Primary Key Values in a Database?

特定の主キー値に対する複数の自動インクリメント

質問:

どのようにすれば、データベースは、特定の主キー値に対して異なる自動インクリメント キーを提供するため、各主キー値は独自の値を持つようになります。独立したシーケンス?たとえば、テーブルに自動インクリメントの「id」列とユーザー ID の「uid」列が含まれている場合、「uid」値ごとに異なる自動インクリメント シーケンスを使用することは可能ですか?

答え:

MySQL と MyISAMエンジン

MySQL の MyISAM エンジンはこの機能をサポートしています。複数列インデックスのセカンダリ列に AUTO_INCREMENT が指定されている場合、AUTO_INCREMENT 列の生成値は MAX(auto_increment_column) 1 WHERE prefix=given-prefix.

その他の解決策

専用テーブルLock

もう 1 つの解決策は、INSERT を試行する前に排他的テーブル ロックを取得することです。これにより、同時 INSERT が競合状態を引き起こすのを防ぎます。ただし、テーブルへのアクセスがシリアル化され、スループットが制限されます。

外部 ID 生成

別のアプローチは、memcached のようなメカニズムを使用して、トランザクション スコープの外で ID 番号を生成することです。または集中型サービス。これにより、データベース機能に依存せずに固有の ID 値が保証されます。

考慮事項

この機能を実装するには、次のような潜在的な問題を慎重に考慮する必要があります。

    自動インクリメント シーケンスのロールバックとギャップ
  • 失敗他のテーブル制約による INSERT
  • 行削除後の再番号付け
  • 外部 ID 生成の場合の一貫性の維持

免責事項:

MySQL の InnoDB エンジンはこの機能をサポートしていません。

以上がデータベース内の特定の主キー値に基づいて個別の自動インクリメント シーケンスを実現するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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