从一个查询中的两个表中删除行

The*_*tor 7 mysql cascade

我有两个表:orders和orders_items.两者共享字段orderID.

我想删除orderID = 500的两个表中的所有行,但我只需要在一个查询中执行此操作.这可能吗?

Res*_*uum 10

当然你可以这样做:

DELETE FROM `table1`, `table2` WHERE `orderId` = 500
Run Code Online (Sandbox Code Playgroud)

请参阅http://dev.mysql.com/doc/refman/5.0/en/delete.html

[编辑:]

这是一个完整的伎俩:

DELETE FROM `orders`, `orders_items` 
  USING `orders` 
  INNER JOIN `orders_items` ON `orders`.`orderId` = `orders_items`.`orderId` 
  WHERE `orders`.`orderId`= 500
Run Code Online (Sandbox Code Playgroud)

如果orderId是varchar,则将语句更改为 = '500'.


yey*_*man 8

您可以使用ON DELETE CASCADE定义表.如果这样做,您只需要在订单表上删除.使用order_id作为启用该选项的外键的其他表中的条目将自动删除.

这个例子取自MySQL手册:

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;
Run Code Online (Sandbox Code Playgroud)

请注意,引擎是InnoDB.