SQL語句詳解 MySQL update的准確用法。本站提示廣大學習愛好者:(SQL語句詳解 MySQL update的准確用法)文章只能為提供參考,不一定能成為您想要的結果。以下是SQL語句詳解 MySQL update的准確用法正文
單表的MySQL 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子句用於給定一個限值,限制可以被更新的行的數量。
MySQL UPDATE語句支撐以下潤飾符:
假如您應用LOW_PRIORITY症結詞,則UPDATE的履行被延遲了,直到沒有其它的客戶端從表中讀取為止。
假如您應用IGNORE症結詞,則即便在更新進程中湧現毛病,更新語句也不會中止。假如湧現了反復症結字抵觸,則這些行不會被更新。假如列被更新後,新值會招致數據轉化毛病,則這些行被更新為最接近的正當的值。
假如您在一個表達式中經由過程tbl_name拜訪一列,則UPDATE應用列中確當前值。例如,以下語句把年紀列設置為比以後值多一:
MySQL> UPDATE persondata SET ageage=age+1;
MySQL UPDATE賦值被從左到右評價。例如,以下語句對年紀列加倍,然後再停止增長:
MySQL> UPDATE persondata SET ageage=age*2, ageage=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中,有些列被援用。您只須要這些列的MySQL UPDATE權限。有些列被讀取了,然則沒被修正。您只須要這些列的SELECT權限。
假如您應用的multiple-table UPDATE語句中包括帶有外鍵限制的InnoDB表,則MySQL優化符處置表的次序能夠與高低層級關系的次序分歧。在此情形下,語句有效並被 回滾。同時,更新一個單一表,而且依附ON UPDATE功效。該功效由InnoDB供給,用於對其它表停止響應的修正。
今朝,您不克不及在一個子查詢中更新一個表,同時從統一個表當選擇。