複数テーブル行の削除: データ整合性の維持
相互接続されたデータベーステーブルから行を削除するには、データの整合性を慎重に考慮する必要があります。 これは、messages
や usersmessages
などの関連テーブルを扱う場合に特に当てはまります。 あるテーブルから他のテーブルの関連エントリに対処せずに単に削除すると、不整合が生じる可能性があります。
次のようなクエリを使用した最初の試行:
<code class="language-sql">DELETE FROM messages LEFT JOIN usersmessages USING(messageid) WHERE messageid='1';</code>
と
<code class="language-sql">DELETE FROM messages, usersmessages WHERE messages.messageid = usersmessages.messageid AND messageid='1';</code>
削除対象があいまいなため、効果がないことが判明しました。 JOIN
条件だけでは、削除を指示するには十分ではありません。
より効果的なソリューションでは、INNER JOIN
を利用して削除範囲を明示的に指定します。
<code class="language-sql">DELETE messages, usersmessages FROM messages INNER JOIN usersmessages WHERE messages.messageid = usersmessages.messageid AND messages.messageid = '1';</code>
このクエリでは、両方のテーブルで messageid
値が一致する行のみが削除され、データの一貫性が維持されます。
効率は劣りますが、同様に有効な代替案には、別個の DELETE
ステートメントが含まれます。
<code class="language-sql">DELETE FROM messages WHERE messageid = '1'; DELETE FROM usersmessages WHERE messageid = '1';</code>
このメソッドは機能しますが、単一の JOIN
ベースのクエリほど最適化されていません。
以上が関連する複数のデータベーステーブルから行を効率的に削除するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。