我們在寫考卷的時候常常會有「這題不會寫,先跳過」的情況,
填資料也一樣,有些欄位一開始沒填,想後面再填,
或是想將舊資料值更新,
這時候就需要UPDATE。
UPDATE是很重要的功能,
放到現在來介紹,
是因為我們需要搭配WHERE語法做資料篩選。
假如我們想一次更新所有該資料欄位的值,
語法是:
UPDATE Education.student SET class=1;
執行以後會報錯:
Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column To disable safe mode, toggle the option in Preferences -> SQL Editor and reconnect. 0.000 sec
原因是MYSQL預設開啟了安全更新模式。
SAFE UPDATE MODE是MYSQL怕有人不小心刪除或是更新錯資料,
因此限制使用者一定要在UPDATE時加上WHERE條件,用KEY做篩選,
限縮資料更新/刪除的範圍,
不然可能會出現有人語法還沒打完就按執行,
一口氣刪掉全部資料的窘境。
但有時候我們就是不想要加WHERE,
或是不想用KEY篩選,
這時就要關掉SAFE UPDATE MODE了。
關掉安全更新模式以後,
再執行上面範例的更新語法,就能成功執行了。
SET SQL_SAFE_UPDATES=0;
在操作重要的資料庫的時候,
最好還是打開安全更新模式,
不然手殘刪錯資料真的會欲哭無淚.....
SET SQL_SAFE_UPDATES=1;
UPDATE 語法可以加上WHERE條件,
WHERE的用法和SELECT那時學的是一樣用法,
忘記的可以從第九日- 踏上撈資料之旅,SELECT 與 DISTINCT開始複習。
用我們的student資料表作範例,
如果要UPDATE class欄位的資料:
「2019年開始上課的女生都是參加drum課程」
首先要到class表找到subject欄位內容是drum的資料
SELECT id from Education.class WHERE subject='drum';
SELECT出來的結果會是id:2,
因此要把student表「2019年開始上課的女生」的class欄位值更新成2。
UPDATE Education.student SET class=2
WHERE (start_date BETWEEN '2019/01/01' AND '2019/12/31')
AND gender='F';
接下來換你寫寫看進行以下更新: