Update語句
- update語句用於修改表中已經存在的數據
- 單表修改語句結構
- 多表修改語句結構
- update語句的常規用法
update students set sname='abcd',gender='1' where sid=1;
update students,students2 set students.sname=students2.sname,students.gender=students2.gender where students.sid=students2.sid;
- 單表修改是指修改指定單個表中的已經存在數據的一個或多個列 的數值;set短語后面跟要修改的列和值;
- where子句表示限定要修改表中的哪些行數據,如果沒有where子 句則表示所有行都要修改;order by子句表示update數據按照指定 的順序進行;limit子句表示限定修改數據的行數
- 多表修改是指修改table_references指定的多個表中滿足條件的行 數據,多表修改不允許使用order by和limit子句
- 執行update語句需要修改表的權限
- Low_priority關鍵詞表示修改語句需要等待其他鏈接的讀此表操作
- 結束后再執行,只作用在MyISAM, MEMORY, and MERGE存儲引擎
- Ignore關鍵詞表示當修改語句碰到違反唯一性約束條件等情況是, 語句不會報錯回退而是報警告信息
update students set sname=‘abc’ limit 2; -- 只修改首先找到的兩行 記錄
Update students set sid=1 where sid=2; -- 執行失敗,違反唯一性 約束
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'
Update ignore students set sid=1 where sid=2; -- 執行成功但數據 不會修改
以下語句的col1只會比原值增加1
UPDATE t1 SET col1 = col1 + 1;
以下語句的col2和col1的結果是一樣的
UPDATE t1 SET col1 = col1 + 1, col2 = col1;
Order by指定update數據的順序
- 在某些情況下可以避免錯誤的發生,比如t 表中的id字段是有唯一約束的,則以下第一個語句執行會報錯,而第二個語 句執行則正常
UPDATE t SET id = id + 1;
UPDATE t SET id = id + 1 ORDER BY id DESC;
mysql> update students2 set sid=sid+1;
ERROR 1062 (23000): Duplicate entry '2' for key 'PRIMARY'
mysql> update students2 set sid=sid+1 order by sid desc;
Query OK, 2 rows affected (0.04 sec)
Rows matched: 2 Changed: 2 Warnings: 0
多表修改舉例(表之間通過where條件進行join操作)
UPDATE items,month SET items.price=month.price WHERE items.id=month.id;
練習
- 將所有學號小於等於100的學生的系改為education系
- 將姓名為ruth且id在100和200之間的老師的姓名改成carey
