亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

文字

MySQL多表同時刪除方案

MySQL可以在一個SQL語句中刪除多張表的記錄,也可以通過多個表之間的關聯(lián)關系刪除某個表的數(shù)據(jù),在MySQL4.0版本之后MySQL支持多表刪除。

假定目前有兩張表goodsgoods_price表,前者是保存商品的具體信息,后者是保存商品的價格,具體的表結(jié)構(gòu)如下:

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在連接時指定表與表之間的關聯(lián)關系進行刪除,具體SQL如下:

DELETE g.*,p.* FROM goods as g INNER JOIN goods_price as p ON g.id=p.goods_id WHERE g.id = 2;

使用連接刪除的時候不必刪除所有表數(shù)據(jù),上面的SQL語句會同時刪除goodsgoods_price兩張表中的數(shù)據(jù),但是可以指定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';

使用外鍵約束

給表新增約束外鍵并使用級聯(lián)(cascade)方式對表與表之間關系進行約束。具體的SQL如下:

alter table goods_price
add constraint FK_goods_id foreign key(goods_id)
 references goods(id) on delete cascade on update cascade;

修改完后我們后期刪除主表數(shù)據(jù),關聯(lián)表數(shù)據(jù)也會被刪除。

delete from goods where id=5;
上一篇: 下一篇: