Ben MySql kayıtları silemezsiniz

2 Cevap php

İki tablo var. tablo, bir tablo başvuruları b inanıyorum.

Ben böyle bir paket alltogether silmek çalıştığınızda:

$query="DELETE a, b FROM classified as a, $sql_table as b WHERE a.ad_id = '$id' 
AND a.classified_id = b.classified_id AND a.poster_password='$pass'";

b MUST be deleted first I guess. Even in PhpMyAdmin I cant delete a if b is still there, so I delete b first.

Ama ilk ne gelir sırayı karar verir?

Tablolar alla InnoDB bulunmaktadır.

Ben ne yapmalıyım?

Teşekkürler

2 Cevap

Delete sözdizimi geçersiz. (Gibi nuqqsa belirtildiği sürece CASCADE tablo a ve b tablo arasındaki ilişki üzerinde etkin SİL var) Siz iki tablolarda bu yapmanız gerekir:

Delete From b
Where Exists    (
                Select 1
                From a
                Where a.poster_password = '$pass'
                    And a.ad_id = '$id'
                    And a.classified_id = b.classified_id
                )

Delete From a
Where a.poster_password = '$pass'
    And a.ad_id = '$id'

Ne ilk geldiği karar yabancı anahtarlar ilişkilerdir. Hangi tablo, üst tablo son silinmesi gerekir edilir.

MySQL manual çoklu masa SİL ve yabancı anahtarlar hakkında şunları söylüyor:

If you use a multiple-table DELETE statement involving InnoDB tables for which there are foreign key constraints, the MySQL optimizer might process tables in an order that differs from that of their parent/child relationship. In this case, the statement fails and rolls back. Instead, you should delete from a single table and rely on the ON DELETE capabilities that InnoDB provides to cause the other tables to be modified accordingly.

Ana tablodaki bir kayıt silindiğinde, bu nedenle dış referanslar vardır ki, örneğin:

ALTER TABLE products
  ADD CONSTRAINT fk_supplier
      FOREIGN KEY (supplier_id, supplier_name)
      REFERENCES supplier(supplier_id, supplier_name)
      ON DELETE CASCADE;