程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> mysql update語句的用法詳解

mysql update語句的用法詳解

編輯:MySQL綜合教程

mysql update語句的用法詳解。本站提示廣大學習愛好者:(mysql update語句的用法詳解)文章只能為提供參考,不一定能成為您想要的結果。以下是mysql update語句的用法詳解正文


起首,單表的UPDATE語句:

UPDATE [LOW_PRIORITY] [IGNORE] tbl_name
SET col_name1=expr1 [, col_name2=expr2 ...]
[WHERE where_definition]
[ORDER BY ...]
[LIMIT row_count]

其次,多表的UPDATE語句:
 

UPDATE [LOW_PRIORITY] [IGNORE] table_references
SET col_name1=expr1 [, col_name2=expr2 ...]
[WHERE where_definition]

UPDATE語法可以用新值更新原有表行中的各列。

SET子句指導要修正哪些列和要賜與哪些值。WHERE子句指定應更新哪些行。
假如沒有WHERE子句,則更新一切的行。假如指定了ORDER BY子句,則依照被指定的次序對行停止更新。
LIMIT子句用於給定一個限值,限制可以被更新的行的數量。

UPDATE語句支撐以下潤飾符:

1,假如您應用LOW_PRIORITY症結詞,則UPDATE的履行被延遲了,直到沒有其它的客戶端從表中讀取為止。

2,假如您應用IGNORE症結詞,則即便在更新進程中湧現毛病,更新語句也不會中止。
假如湧現了反復症結字抵觸,則這些行不會被更新。假如列被更新後,新值會招致數據轉化毛病,則這些行被更新為最接近的正當的值。

假如您在一個表達式中經由過程tbl_name拜訪一列,則UPDATE應用列中確當前值。

例如,把年紀列設置為比以後值多一:
 
mysql> UPDATE persondata SET age=age+1;
 
UPDATE賦值被從左到右評價。

例如,對年紀列加倍,然後再停止增長:
 

mysql> UPDATE persondata SET age=age*2, age=age+1;
 
假如您把一列設置為其以後含有的值,則MySQL會留意到這一點,但不會更新。

假如您把被已界說為NOT NULL的列更新為NULL,則該列被設置到與列類型對應的默許值,而且累加正告數。
關於數字類型,默許值為0;關於字符串類型,默許值為空字符串('');關於日期和時光類型,默許值為“zero”值。

UPDATE會前往現實被轉變的行的數量。Mysql_info() C API函數可以前往被婚配和被更新的行的數量,和在UPDATE進程中發生的正告的數目。

您可使用LIMIT row_count來限制UPDATE的規模。LIMIT子句是一個與行婚配的限制。
只需發明可以知足WHERE子句的row_count行,則該語句中斷,豈論這些行能否被轉變。

假如一個UPDATE語句包含一個ORDER BY子句,則依照由子句指定的次序更新行。

您也能夠履行包含多個表的UPDATE操作。table_references子句列出了在結合中包括的表。

例子:


SQL>UPDATE items,month SET items.price=month.price
WHERE items.id=month.id;

解釋:以上代碼顯示出了應用逗號操作符的外部結合,然則multiple-table UPDATE語句可使用在SELECT語句中許可的任何類型的結合,好比LEFT JOIN。

正文:不克不及把ORDER BY或LIMIT與multiple-table UPDATE同時應用。

在一個被更改的multiple-table UPDATE中,有些列被援用。您只須要這些列的UPDATE權限。有些列被讀取了,然則沒被修正。您只須要這些列的SELECT權限。

假如您應用的multiple-table UPDATE語句中包括帶有外鍵限制的InnoDB表,則MySQL優化符處置表的次序能夠與高低層級關系的次序分歧。

在此情形下,語句有效並被 回滾。同時,更新一個單一表,而且依附ON UPDATE功效。
該功效由InnoDB供給,用於對其它表停止響應的修正。

今朝,不克不及在一個子查詢中更新一個表,同時從統一個表當選擇。

update語句的幾種根本用法

A. 應用簡略的 UPDATE

以下示例解釋假如從 UPDATE 語句中去除 WHERE 子句,一切的行會遭到甚麼影響。

上面這個例子解釋,假如表 publishers 中的一切出書社將總部搬家到佐治亞州的亞特蘭年夜市,表 publishers 若何更新。


UPDATE publishers
SET city = 'Atlanta', state = 'GA'

本示例將一切出書商的名字變成 NULL。


UPDATE publishers
SET pub_name = NULL

也能夠在更新中應用盤算值。本示例將表 titles 中的一切價錢加倍。


UPDATE titles
SET price = price * 2

B.把 WHERE 子句和 UPDATE 語句一路應用
WHERE 子句指定要更新的行例如,鄙人面這個虛擬的事宜中,北加利福尼亞改名為 Pacifica(縮寫為 PC),而奧克蘭的市平易近投票決議將其城市的名字改成 Bay City。這個例子解釋若何為奧克蘭市之前的一切居平易近(他們的地址曾經過時)更新表 authors。


UPDATE authors
    SET state = 'PC', city = 'Bay City'
       WHERE state = 'CA' AND city = 'Oakland'

必需編寫另外一個語句來更改北加利福尼亞其它城市的居平易近地點的州名。

C.經由過程 UPDATE 語句應用來自另外一個表的信息
本示例修正表 titles 中的 ytd_sales 列,以反應表 sales 中的最新發賣記載。


UPDATE titles
    SET ytd_sales = titles.ytd_sales + sales.qty
       FROM titles, sales
          WHERE titles.title_id = sales.title_id
          AND sales.ord_date = (SELECT MAX(sales.ord_date) FROM sales)

這個例子假定,一種特定的商品在特定的日期只記載一批發賣量,並且更新是最新的。假如不是如許(即假如一種特定的商品在統一天可以記載不止一批發賣量),這裡所示的例子將失足。例子可准確履行,然則每種商品只用一批發賣量停止更新,而不論那一天現實發賣了若干批。這是由於一個 UPDATE 語句從不會對統一行更新兩次。

關於特定的商品在統一天可發賣不止一批的情形,每種商品的一切發賣量必需在 UPDATE 語句中算計在一路,以下例所示:


UPDATE titles
    SET ytd_sales =
       (SELECT SUM(qty)
          FROM sales
             WHERE sales.title_id = titles.title_id
             AND sales.ord_date IN (SELECT MAX(ord_date) FROM sales))
    FROM titles, sales

D. 將 UPDATE 語句與 SELECT 語句中的 TOP 子句一路應用
這個例子對來自表 authors 的前十個作者的 state 列停止更新。


UPDATE authors
SET state = 'ZZ'
FROM (SELECT TOP 10 * FROM authors ORDER BY au_lname) AS t1
WHERE authors.au_id = t1.au_id

以上就是mysql update語句用法的全體內容,願望對年夜家有所贊助。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved