?
This document uses PHP Chinese website manual Release
MySQL可以在一個(gè)SQL語句中更新多張表的記錄,也可以通過多個(gè)表之間的關(guān)聯(lián)關(guān)系更新某個(gè)表的數(shù)據(jù)。
假定目前有兩張表goods
和goods_price
表,前者是保存商品的具體信息,后者是保存商品的價(jià)格,具體的表結(jié)構(gòu)如下:
create table goods ( `id` int unsigned primary key auto_increment, `goods_name` varchar(30) not null default '', `deleted_at` int unsigned default null )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 (id,goods_name) 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');
將未刪除的商品的價(jià)格*0.5,具體SQL語句如下:
UPDATE goods as g , goods_price as p SET p.price = p.price*0.5 WHERE p.goods_id = g.id AND g.deleted_at is null;
UPDATE goods g INNER JOIN goods_price p ON g.id=p.goods_id SET p.price=p.price*0.5 where g.deleted_at is null;
上面的更新語句使用另一個(gè)表的條件,更新一張表,也可以更新多個(gè)表。具體SQL語句如下:
UPDATE goods g INNER JOIN goods_price p on g.id=p.goods_id set p.price=p.price*0.5,g.deleted_at=unix_timestamp(now()) where g.is_deleted_at is null;