MySQL 常用的UPDATE操作

pursuer.chen發表於2015-12-02

標籤:UPDATE

概述  

測試環境:mysql 5.6.21

 

步驟

建立測試表

CREATE TABLE `product` (
   `proID` int(11) NOT NULL AUTO_INCREMENT COMMENT '商品表主鍵',
   `price` decimal(10,2) NOT NULL COMMENT '商品價格',
   `type` int(11) NOT NULL COMMENT '商品類別(0生鮮,1食品,2生活)',
   `dtime` datetime NOT NULL COMMENT '建立時間',
   PRIMARY KEY (`proID`)
 ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='商品表';

CREATE TABLE `producttype` (
   `ID` int(11) NOT NULL COMMENT '商品類別(0生鮮,1食品,2生活)',
   `amount` int(11)  COMMENT '每種類別商品總金額',
   UNIQUE KEY (`ID`)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='商品類別資金彙總表'

插入測試資料

INSERT INTO product(price,type,dtime) VALUES(10.00,0,now()),(10.00,1,now()),(10.00,1,now()),(20.00,2,now()),(30.00,3,now());

INSERT INTO producttype(ID) VALUES(1),(2),(3);
SELECT * FROM  product;

SELECT * FROM producttype;

 單表更新操作

UPDATE product
SET price='20.00',type=0 
WHERE proID=2;

 關聯更新操作 

UPDATE producttype,product
SET producttype.amount=product.price
where product.TYPE = producttype.ID AND product.TYPE=1;

 1.查詢所有欄位

INSERT INTO producttype(ID) VALUES(4);
UPDATE producttype
SET producttype.amount= (SELECT ifnull(SUM(product.price),0.00)    FROM product WHERE product.TYPE = producttype.ID GROUP BY product.TYPE);

注意:大家注意看到rows matched:4,表示符合條件的記錄是4條,實際更新了三條,關聯語句預設不去判斷裡面的關聯的實際行。

2.只查詢需要更新的欄位

UPDATE producttype
SET amount=null;
UPDATE producttype,product
    SET producttype.amount= 
       (SELECT ifnull(SUM(product.price),0.00)
          FROM product
             WHERE product.TYPE = producttype.ID
             GROUP BY product.TYPE)
 where product.TYPE = producttype.ID;

改用下面這種方法:Rows matched:3,查詢到了符合條件的行是3行,沒有查詢無關聯的行。

3.別名更新

update a tb1, b tb2 
set tb1.num=tb1.num+tb2.num
where tb1.id=tb2.id

總結

 mysql的update的關聯操作在5.6中後面不能直接接FROM語句,只能UPDATE 所有的連線表然後WHERE,如果之前有事情其它資料庫產品的習慣在這裡要注意了。

 

 文章如果對大家有幫助,請幫忙推薦,謝謝!!!

 

備註:

    作者:pursuer.chen

    部落格:http://www.cnblogs.com/chenmh

本站點所有隨筆都是原創,歡迎大家轉載;但轉載時必須註明文章來源,且在文章開頭明顯處給明連結,否則保留追究責任的權利。

《歡迎交流討論》

 

---恢復內容結束---

相關文章