2016-05-04 5 views
0
parent_table 
---------------------------------------------------------------------- 
id   name 
1   a 
2   b 

child_table 
--------------------------------------------------------------------- 
id  parent_table_id   name 
1    1      c 
2    1      d 
3    1      e 
4    2      f 
5    2      g 

親テーブルから最初の行を削除し、親の最初の行のすべての子行を削除します。 どうすれば可能ですか?他のテーブルのすべての子行を持つ親行を削除する方法

+0

あなたは親が削除された場合、子行を削除しますか? –

+1

そのための外部キーの概念を使用してください.http://dev.mysql.com/doc/refman/5.7/en/innodb-foreign-key-constraints.html –

+0

あなたのエンジンは何ですか?テーブルのスキーマを見てみましょう。それがINODBの場合、それは可能です。それ以外の場合は、結合または2つのクエリを使用して記述する必要があります。 –

答えて

1

使用foreign keys

CREATE TABLE parent (
    id INT NOT NULL, 
    PRIMARY KEY (id) 
) ENGINE=INNODB; 

CREATE TABLE child (
    id INT, 
    parent_id INT, 
    INDEX par_ind (parent_id), 
    FOREIGN KEY (parent_id) 
    REFERENCES parent(id) 
    ON DELETE CASCADE 
) ENGINE=INNODB; 


INSERT INTO parent VALUES (1), (2); 
INSERT INTO child VALUES (1, 1); 

# This query implicitly removes from `child` where parent_id = 1 
DELETE FROM parent WHERE id = 1; 
2

cascading deletesで外部キーを定義します。親行を削除すると、子行も同じ行に従います。 Thisチュートリアルでご案内します。

ヒント:あなたはあなたのケースで作成

時に、あなたの子テーブルにON DELETE CASCADEを追加する必要があります。今すぐ

CREATE TABLE parent_table(
    id int(11) NOT NULL AUTO_INCREMENT, 
    name varchar(255) NOT NULL, 
    PRIMARY KEY (id) 
) ENGINE=InnoDB; 

CREATE TABLE child_table (
    id int(11) NOT NULL AUTO_INCREMENT, 
    parent_table_id int(11) NOT NULL, 
    name varchar(255) NOT NULL, 
    PRIMARY KEY (id), 
    KEY parent_table_id (parent_table_id), 
    CONSTRAINT id_ibfk_1 
    FOREIGN KEY (parent_table_id) 
    REFERENCES parent_table (parent_table_id) 
    ON DELETE CASCADE 
) ENGINE=InnoDB; 

、あなたの削除クエリ:

DELETE FROM parent_table 
WHERE id= 2 

あなたの結果のデータは次のようになり:

parent_table 
---------------------------------------------------------------------- 
id   name 
1   a 

child_table 
--------------------------------------------------------------------- 
id  parent_table_id   name 
1    1      c 
2    1      d 
3    1      e 

コメントで要求されたよう:

あなたはmysql docs

  • キーから説明を見ることができます - インデックス
  • 制約のためのシノニム - 外部キー制約
  • 参照 - 外部キー制約の一部であり、MySQLが仕様の値を要求する参照テーブルのifiedカラムも、参照テーブルの指定されたカラムに存在します。

更新既存のテーブル:INODBについては

ALTER TABLE child_table 
     ADD CONSTRAINT id_ibfk_1 
     FOREIGN KEY (parent_table_id) 
     REFERENCES parent_table (parent_table_id) 
     ON DELETE CASCADE 
+0

PARENT_TABLE、子テーブルのこれらの部分 KEY parent_table_id(parent_table_id)を説明してください CONSTRAINT id_ibfk_1 FOREIGN KEY(parent_table_id) REFERENCES(parent_table_id) –

+0

@SalmanQuader更新で更新されました。 – Thamilan

+0

既に私は既存の子クラスを持っています。だから私はどのように手動でキー、制約、参照を設定することができます どのように可能ですか? –

0
function delete($id){ 
$query = "DELETE FROM parent_table WHERE id = $id"; 
$query = "DELETE FROM child_table WHERE parent_table_id = $id"; 
$result = mysqli_query($connect, $query) or die(mysqli_error($connect)); 
return true; 
} 
+0

私は複数のクエリではない単一のクエリが必要 –

1

別にFRリンクTHESチェックOM cascade deleteは、あなたがjoinを使用することができ、以下の例を参照してください。

DELETE parent_table, child_table 
FROM parent_table INNER JOIN child_table 
    ON parent_table.id = child_table.parent_table_id 
WHERE parent_table.id = 1 
関連する問題