## MySQL多表同時刪除方案
MySQL可以在一個SQL語句中刪除多張表的記錄,也可以通過多個表之間的關聯關系刪除某個表的數據,在MySQL4.0版本之后MySQL支持多表刪除。
假定目前有兩張表`goods`和`goods_price`表,前者是保存商品的具體信息,后者是保存商品的價格,具體的表結構如下:
```
create table goods (
`id` int unsigned primary key auto_increment,
`goods_name` varchar(30) not null default ''
)engine innodb charset utf8;
create table goods_price (
`goods_id` int unsigned not null,
`price` decimal(8,2) not null default '0.00'
)engine innodb charset utf8;
insert into goods values (1,'商品1'),(2,'商品2'),(3,'商品3'),(4,'商品4'),(5,'商品5');
insert into goods_price values (1,'5.44'),(2,'3.22'),(3,'5.55'),(4,'0.00'),(5,'4.54');
```
### 在delete時使用逗號分割刪除
這里我們不適用join連接操作進行刪除,具體SQL如下:
```
delete g.*,p.* from goods as g,goods_price as p where g.id = p.goods_id and g.id = 1;
```
### 使用連表查詢
#### 使用inner join刪除
使用`inner join`在連接時指定表與表之間的關聯關系進行刪除,具體SQL如下:
```
DELETE g.*,p.* FROM goods as g INNER JOIN goods_price as p ON g.id=p.goods_id WHERE g.id = 2;
```
> 使用連接刪除的時候不必刪除所有表數據,上面的SQL語句會同時刪除`goods`和`goods_price`兩張表中的數據,但是可以指定`DELETE g.*`從而只刪除`goods`表中的記錄,而不刪除`goods_price`表中的記錄[`DELETE g.* FROM goods as g INNER JOIN goods_price as p ON g.id=p.goods_id WHERE g.id = 3;`],但是在這里明顯是不合適的,但是我們可以這樣做。
### 使用left join刪除
left join的使用方法如上,具體的SQL如下:
```
DELETE g.*,p.* FROM goods as g LEFT JOIN goods_price as p ON g.id=p.goods_id WHERE g.price = '0.00';
```
### 使用外鍵約束
給表新增約束外鍵并使用級聯(cascade)方式對表與表之間關系進行約束。具體的SQL如下:
```
alter table goods_price
add constraint FK_goods_id foreign key(goods_id)
references goods(id) on delete cascade on update cascade;
```
修改完后我們后期刪除主表數據,關聯表數據也會被刪除。
```
delete from goods where id=5;
```
相關推薦:[MySQL中InnoDB表引擎外鍵約束 ](http://blog.webfsd.com/post_mysql-zhonginnodb-biao-yin-qing-wai-jian-yue-shu.html)
- 寫在前面
- MySQL的使用
- MySQL多表同時刪除方案
- MySQL跨表、多表更新SQL語句總結
- MySQL存儲引擎
- 安裝
- 常規方式編譯安裝MySQL
- 采用cmake方式編譯安裝MySQL
- 使用rpm包安裝MySQL
- 使用yum方式安裝MySQL
- 采用二進制方式免編譯安裝MySQL
- 多實例的安裝
- 什么是多實例
- 多實例的作用、問題以及應用場景
- 多實例安裝01【推薦】
- 多實例官方安裝方案02
- 啟動、用戶和權限管理
- 單實例MySQL的啟動和關閉的方法
- 設置及修改MySQL root用戶密碼
- 找回丟失的MySQL root用戶密碼
- 創建MySQL用戶及用戶權限管理
- 基礎命令的操作
- MySQL庫和表相關操作
- MySQL中的索引操作
- MySQL常用命令
- MySQL的錯誤代碼
- MySQL復習秘籍
- 備份與恢復
- 備份
- 恢復
- mysqlbinlog命令
- 服務日志
- 主從復制
- 主從復制部署配置問題匯總
- 主從復制讀寫分離
- 災難恢復
- 配置phpmyadmin連接多實例MySQL
- 其他相關
- Sphinx實驗
- 中文分詞技術
- MySQL語句大全
- 用戶創建、權限、刪除
- 數據庫與表顯示、創建、刪除
- 表復制及備份還原
- 數據庫表中數據操作
- 修改表的列與表名
- 修改表中的數據
- 查詢表
- 日志
- 批量修改Mysql表引擎為InnoDB的方法
- 數據庫抽象層 PDO
- PDO對象常用方法
- PDO 事務處理
- PDO 與 MySQLi 二者效率簡單比較
- 大小寫敏感性 lower_case_table_names
- CentOS7安裝MySQL5.7密碼查看與修改