我有两个表: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'.
您可以使用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.