首先,單個表的update語句:
更新[low_priority] [ignore] tbl_name
set col_name1 = expr1 [,col_name2 = expr2 ...]
[where where_definition]
[order by ...]
[limit row_count]
第二,多表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>更新人員資料set age = age + 1;
update分配是從左到右評估的.
例如,將「年齡」列加倍,然後增加:
複製**,**如下:
mysql>更新人員資料set age = age * 2,age = age + 1;
如果將列設定為當前包含的值,mysql會注意到這一點,但不會更新.
如果將已定義為not null的列更新為null,則該列將設定為與該列型別相對應的預設值update語句,並累積警告數.
對於數字型別,預設值為0;對於數字型別,預設值為0. 對於字串型別,預設值為空字串('');對於日期和時間型別,預設值為「零」.
update將返回實際更改的行數. mysql_info()c api函式可以返回匹配和更新的行數,以及在update過程中生成的警告數.
您可以使用limit row_count來限制update的範圍. limit子句是與行匹配的限制.
只要找到滿足where子句的row_count行update語句,該語句就會中止,無論這些行是否已更改.
如果update語句包含order by子句,則按該子句指定的順序更新行.
您還可以執行包含多個表的update操作. table_references子句列出了聯合中包含的表.
示例:複製**,**如下:
sql>更新專案,每月set個專案. price= month.price
where items.id = month.id;
注意: 上面的**顯示了使用逗號運算子的內部聯合,但是多表update語句可以使用select語句中允許的任何型別的聯合,例如left join.
注意: 您不能同時將order by或limit與多表update一起使用.
在已更改的多表update中,引用了一些列. 您只需要這些列的update許可權. 讀取了一些列,但未修改. 您只需要對這些列具有select許可權.
如果您使用的多表update語句包含具有外來鍵限制的innodb表,則mysql優化器處理表的順序可能與上層和下層關係的順序不同.
在這種情況下,該語句無效並回滾. 同時,更新單個表,並依靠on update函式.
此功能由innodb提供,用於相應地修改其他表.
當前,您無法更新子查詢中的表並同時從同一表中選擇.
update語句的幾種基本用法
a. 使用簡單的update
以下示例顯示了如果從update語句中刪除where子句,將如何影響所有行.
下面的示例說明了表發布者中的所有發布者如何將總部遷移到喬治亞州的亞特蘭大,表發布者是如何更新的.
複製**,**如下:
更新發布者
設定城市='亞特蘭大',州='ga'
此示例將所有發布者名稱更改為null.
複製**,**如下:
更新發布者
set pub_name = null
計算的值也可以在更新中使用. 此示例將表標題中的所有**加倍.
複製**,**如下:
更新標題
設定**=*** 2
b. 將where子句與update語句一起使用
where子句指定要更新的行. 例如,在下面的虛擬事件中,北加利福尼亞州將其名稱更改為pacifica(縮寫為pc),奧克蘭市民投票將其城市名稱更改為bay city. 此示例顯示如何為奧克蘭市以前的所有居民(其位址已過時)更新表作者.
複製**,**如下:
更新作者
設定狀態=「 pc」,城市=「海灣城市」
所在州='ca'和城市='奧克蘭'
必須寫另一條宣告來更改北加利福尼亞其他城市居民的州名.
c. 通過update語句使用另乙個表中的資訊
此示例修改了titles表中的ytd_sales列,以反映表銷售額中的最新銷售記錄.
複製**,**如下:
更新標題
from標題,銷售
titles.title_id = sales.title_id
and sales.ord_date =(從銷售中選擇max(sales.ord_date)個)
此示例假定特定產品僅記錄特定日期的一批銷售,並且更新是最新的. 如果不是這種情況(即,如果某個特定產品可以在同一天記錄多個批次的銷售),則此處顯示的示例將出錯. 該示例正常執行,但是無論當天實際銷售多少批次,每個產品僅更新了一批銷售量. 這是因為update語句永遠不會更新同一行兩次.
對於可以在同一天進行多批銷售的特定產品,必須在update語句中將每種產品的所有銷售加在一起,如下例所示:
複製**,**如下:
更新標題
set ytd_sales =
(select sum(qty)
從銷售sales.title_id = titles.title_id
and sales.ord_date in(從銷售中選擇max(ord_date)個)
from標題,銷售
d. 將update語句與select語句中的top子句一起使用
此示例更新了authors表中前十位作者的狀態列.
複製**,**如下:
更新作者
set狀態='zz'
從(從作者開始,按au_lname的順序排序,前10位*)作為t1
wheres authors.au_id = t1.au_id
Mysql8 0的新用法
今天給大家分享一些關於mysql8.0中sql語句的改變和保留。首先,關於外來鍵的建立 與 追加外來鍵,有變化 現有 class 班級表 和 students學生表 在students 學生表中,追加乙個外來鍵fk classid 在students03學生表建立過程中,設定外來鍵fk classi...
mysql建立 mysql建立新使用者
1.新建使用者 1.1 登入mysql mysql u root p 密碼 1.2 建立使用者 mysql insert into mysql.user host,user,password values localhost test password 1234 這樣就建立了乙個名為 test 密碼...
Mysql建立新使用者
1.建立使用者 語法 create user username host identified by password 例子 create user dog localhost identified by 123456 create user pig 192.168.1.101 idendified...