Memadamkan Catatan yang Berkaitan dengan Pelanggan Tertentu dalam MySQL
Masalah:
Pangkalan data kami mengandungi tiga jadual: clients
, projects
dan posts
. Matlamatnya adalah untuk mengalih keluar semua siaran yang dipautkan kepada pelanggan tertentu. Pernyataan SQL berikut tidak berkesan:
<code class="language-sql">DELETE FROM posts INNER JOIN projects ON projects.project_id = posts.project_id WHERE projects.client_id = :client_id;</code>
Jadual posts
tidak mempunyai kunci asing client_id
langsung; ia hanya memiliki project_id
kunci asing.
Penyelesaian:
Untuk menghapuskan siaran yang disambungkan kepada projek kepunyaan pelanggan tertentu, pernyataan DELETE
mesti menyasarkan jadual posts
secara eksplisit. Pertanyaan yang dibetulkan ialah:
<code class="language-sql">DELETE posts FROM posts INNER JOIN projects ON projects.project_id = posts.project_id WHERE projects.client_id = :client_id;</code>
Penyelesaian Alternatif:
Kaedah yang lebih cekap melibatkan pelaksanaan kekangan ON DELETE CASCADE
apabila mewujudkan hubungan kunci asing antara jadual projects
dan posts
. Ini secara automatik memadamkan siaran apabila projek berkaitannya dipadamkan. Pertanyaan SQL yang disemak menjadi:
<code class="language-sql">DELETE FROM projects WHERE client_id = :client_id;</code>
Pendekatan ini memanfaatkan kekangan ON DELETE CASCADE
untuk mengalih keluar semua siaran berkaitan secara serentak.
Atas ialah kandungan terperinci Bagaimana untuk Memadam Catatan Berkaitan dengan Pelanggan Tertentu Menggunakan MySQL Joins?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!