Node.js - MySQL 更新

您好,未來的編程超級巨星!今天,我們將要深入探索 Node.js 和 MySQL 更新的精彩世界。別擔心如果您是新手——我會成為你這次冒險中的友好指導者。在這個教學的結束時,你將會像專業人士一樣更新數據庫!

Node.js - MySQL Update

了解基礎知識

在我們跳進代碼之前,讓我們先聊聊我們到底在做什麼。當我們在 MySQL 裡提到“更新”時,我們其實是在改變數據庫中已存在的數據。這就像編輯一份文件,但與編輯 Word 文件不同的是,我們是在充滿信息的數據庫上工作。

簡單的 UPDATE

讓我們從一個簡單的更新開始。想像你有一個最喜歡的書籍數據庫,你想改變其中一本書的評分。

以下是如何操作的:

const mysql = require('mysql');

// 首先,我們創建一個連接到我們數據庫的連接
const connection = mysql.createConnection({
host: 'localhost',
user: 'yourusername',
password: 'yourpassword',
database: 'yourdatabase'
});

// 現在,讓我們連接!
connection.connect((err) => {
if (err) throw err;
console.log('已連接到數據庫!');

// 這是我們的 UPDATE 查詢
let sql = "UPDATE books SET rating = 5 WHERE title = 'The Great Gatsby'";

// 讓我們執行這個查詢
connection.query(sql, (err, result) => {
if (err) throw err;
console.log(result.affectedRows + " 筆記錄已更新");
});
});

讓我們分解一下:

  1. 我們從 require MySQL 模塊開始,並創建一個到我們數據庫的連接。
  2. 我們使用 UPDATE SQL 命令將 'The Great Gatsby' 書的 rating 更改為 5。
  3. 我們使用 connection.query() 執行查詢。
  4. 如果成功,我們將記錄我們更新了多少行。

記住,在 UPDATE 說明中總是要仔細檢查你的 WHERE 子句。沒有它,你可能會不小心更新表中的每條記錄!

使用預處理語句的 UPDATE

現在,讓我們提升我們的遊戲水平,使用預處理語句。這些就像是我們 SQL 查詢的可重用模板,使我們的代碼更安全、更高效。

const mysql = require('mysql');

const connection = mysql.createConnection({
host: 'localhost',
user: 'yourusername',
password: 'yourpassword',
database: 'yourdatabase'
});

connection.connect((err) => {
if (err) throw err;
console.log('已連接到數據庫!');

// 我們的預處理語句
let sql = "UPDATE books SET rating = ? WHERE title = ?";
let values = [4, 'To Kill a Mockingbird'];

// 執行預處理語句
connection.query(sql, values, (err, result) => {
if (err) throw err;
console.log(result.affectedRows + " 筆記錄已更新");
});
});

在這個例子中:

  1. 我們創建了一個帶有佔位符(?)的預處理語句,我們想要更新的值將會填入這些佔位符。
  2. 我們提供了一個包含這些值的數組。
  3. MySQL 負責正確轉義這些值,保護我們免受 SQL 注入攻擊。

把預處理語句想像成 Mad Libs 遊戲——我們先創造結構,然後再填入內容!

UPDATE JOIN

有時候,我們需要根據其他表中的信息來更新一個表中的數據。這時 UPDATE JOIN 就派上用場了。想像一下,我們想根據作者的國籍來更新書籍的價格。

const mysql = require('mysql');

const connection = mysql.createConnection({
host: 'localhost',
user: 'yourusername',
password: 'yourpassword',
database: 'yourdatabase'
});

connection.connect((err) => {
if (err) throw err;
console.log('已連接到數據庫!');

let sql = `
UPDATE books b
JOIN authors a ON b.author_id = a.id
SET b.price = b.price * 1.1
WHERE a.nationality = 'British'
`;

connection.query(sql, (err, result) => {
if (err) throw err;
console.log(result.affectedRows + " 筆記錄已更新");
});
});

這裡發生了什麼:

  1. 我們使用 author_id 字段將 books 表和 authors 表進行 JOIN。
  2. 我們將所有英國作者的書籍價格提高 10%(乘以 1.1)。
  3. 這個更新一次就可以影響多個相關表的多行!

把這想像成兩個表的協調舞蹈——它們一起移動以更新我們需要的資訊。

UPDATE 方法比較

讓我們在我們的方法中總結一下:

方法 優點 缺點 最適用於
簡單 UPDATE 易於理解和實現 如果不小心會容易受到 SQL 注入攻擊 做快速、一次性更新
預處理語句 對 SQL 注入攻擊更安全,可以重用 設置稍微複雜一點 為不同的值進行重複更新
UPDATE JOIN 可以根據其他表中的數據更新 查詢結構更複雜 需要根據其他表中的相關信息更新數據

結論

好了,各位!我們已經穿越了 Node.js 和 MySQL 更新的土地,從簡單的變更到複雜的多表操作。記住,能力越大,責任越大——總是仔細檢查你的 WHERE 子句,並在處理用戶輸入時使用預處理語句。

練習這些技術,很快你就能比說“SQL”還要快地更新數據庫!持續編程,持續學習,最重要的是,樂在其中。直到下一次見面,願你的查詢快速,數據庫無 bug!

Credits: Image by storyset