iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 15
0
AI & Data

作者超囉嗦,但一天只要十分鐘的MYSQL真.新手教學系列 第 15

第十五日-批次把資料補齊:更新(UPDATE)資料值

  • 分享至 

  • xImage
  •  

我們在寫考卷的時候常常會有「這題不會寫,先跳過」的情況,
填資料也一樣,有些欄位一開始沒填,想後面再填,
或是想將舊資料值更新,
這時候就需要UPDATE。

UPDATE是很重要的功能,
放到現在來介紹,
是因為我們需要搭配WHERE語法做資料篩選。

  • 無差別範圍UPDATE

假如我們想一次更新所有該資料欄位的值,
語法是:

  1. 更新(UPDATE)
  2. student資料表
  3. 設定(SET)
  4. 欄位名稱
  5. 等於(=)
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

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';

接下來換你寫寫看進行以下更新:

  1. 2019年暑假(七八月)開始上課的人都是上guitar課
  2. 2020年春季(三四五月)開始上課的男生都是上Songwriting課
  3. 2020年暑假(七八月)開始上課而且名字是N開頭的人上vocal課
  4. 剩下其他人都是上piano課

上一篇
第十四日-資料表建錯怎麼辦? 欄位更改:MODIFY、CHANGE、RENAME
下一篇
第十六日-想取幾筆就取幾筆資料:Limit
系列文
作者超囉嗦,但一天只要十分鐘的MYSQL真.新手教學30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言