根據運行的環境,操作系統可以分為桌面操作系統,手機操作系統,服務器操作系統,嵌入式操作系統等。 UPDATE是DML(數據操作語言)語句,用于修改表中的行. 更新[LOW_PRIORITY] [IGNORE] table_reference SET Assignment_list [WHERE where_condition] [ORDER BY ...] [LIMIT row_count] 值: {expr |默認值 分配: col_name =值 assignment_list: 任務[,任務] ... 更新[LOW_PRIORITY] [IGNORE] table_references SET Assignment_list [WHERE where_condition] 對于單表語法update語法,UPDATE語句使用新值更新指定表中現有行的列. SET子句指示要修改的列以及應給出的值. 每個值都可以作為表達式給出,或者關鍵字DEFAULT顯式將列設置為默認值. WHERE子句(如果提供)指定了確定要更新哪些行的條件. 沒有WHERE子句,所有行都會更新. 如果ORDER BY指定子句,則將按指定順序更新行. LIMIT子句對可更新的行數設置限制. 對于多表語法,UPDATE更新每個表中名為table_references的行以滿足條件. 即使匹配條件是多次,每個匹配的行也將被更新一次. 對于多表語法,不能使用ORDER BY和LIMIT. where_condition是一個表達式,并且每一行都更新為true. UPDATE語句支持以下修飾符: 在MySQL 5.5.18和更高版本中,UPDATE IGNORE語句(包括帶有ORDER BY子句的語句)被標記為基于語句的不安全復制. (這是因為行的更新順序決定了忽略哪些行. )使用基于語句的模式時,這些語句在錯誤日志中生成警告,并在使用時使用基于行的格式寫入二進制日志混合模式. 如果您從表中訪問表中的UPDATE列,請使用該列的當前值. 例如,以下語句將col1設置為比當前值大一個: 更新t1設置col1 = col1 + 1; 以下語句中的第二個賦值將col2設置為當前(更新的)col1值,而不是原始的col1值. 結果,col1和col2具有相同的值. 此行為不同于標準SQL. 更新t1設置col1 = col1 + 1,col2 = col1; 單表UPDATE分配通常從左到右進行評估. 對于多表更新,不能保證以任何特定順序執行分配. 如果將列設置為當前值,MySQL將注意到這一點,并且不會對其進行更新. 如果NOT NULL通過設置更新聲明的列,則啟用NULL嚴格SQL模式時將發生錯誤;否則,將列設置為列數據類型的隱式默認值,并增加警告計數. 隱式默認值為0數字類型,字符串類型為空字符串(''),日期和時間類型為“零”值. UPDATE返回實際更改的行數. mysql_info()C API函數返回已匹配和更新的行數,以及UPDATE中出現警告的次數. 可用于限制的范圍. 子句是行匹配的限制. 一旦找到滿足該子句的行,該語句就會停止,無論它們是否實際上已更改. 如果UPDATE語句包含ORDER BY子句,則將按該子句指定的順序更新行. 這在某些情況下可能很有用update語法,否則可能會導致錯誤. 假設表t包含其ID具有唯一索引的列. 以下語句可能由于重復的鍵錯誤而失敗,具體取決于行的更新順序: UPDATE t SET id = id + 1; 例如,如果表在id列中包含1和2,并且在2更新為3之前將1更新為2,則會發生錯誤. 為避免此問題,請添加ORDER BY子句,以便在具有較小ID值的行之前更新具有較大ID值的行: 更新t SET id = id + 1 ORDER BY ID DESC; 您還可以執行UPDATE操作來覆蓋多個表. 但是,不能對多個表UPDATE使用ORDER BY或LIMIT. table_references子句列出了連接中涉及的表. 語法在第13.2.9.2節“ JOIN語法”中描述. 這是一個示例: 更新項目,每月設置項目. price= month.price WHERE items.id = month.id; 上一個示例顯示了使用逗號運算符的內部聯接,但是多個表UPDATE語句可以使用該語句中允許的任何類型的聯接SELECT,例如LEFT JOIN. 如果您使用涉及具有外鍵約束的InnoDB表的UPDATE多表語句,則MySQL優化程序可能以與其父/子關系不同的順序處理表. 在這種情況下,該語句失敗并回滾. 而是更新一個表,并依靠ON UPDATE函數InnoDB來相應地修改其他表. 您無法更新表并從子查詢的同一表中進行選擇. UPDATE使用的存儲引擎(例如分區表MyISAM)使用表級鎖來鎖定表中的所有分區. 對于使用存儲引擎的表(例如InnoDB使用行級鎖定),不會發生這種情況.
|
溫馨提示:喜歡本站的話,請收藏一下本站!