Node.js - MySQL 更新
您好,未來的編程超級巨星!今天,我們將要深入探索 Node.js 和 MySQL 更新的精彩世界。別擔心如果您是新手——我會成為你這次冒險中的友好指導者。在這個教學的結束時,你將會像專業人士一樣更新數據庫!
了解基礎知識
在我們跳進代碼之前,讓我們先聊聊我們到底在做什麼。當我們在 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 + " 筆記錄已更新");
});
});
讓我們分解一下:
- 我們從 require MySQL 模塊開始,並創建一個到我們數據庫的連接。
- 我們使用
UPDATE
SQL 命令將 'The Great Gatsby' 書的rating
更改為 5。 - 我們使用
connection.query()
執行查詢。 - 如果成功,我們將記錄我們更新了多少行。
記住,在 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 + " 筆記錄已更新");
});
});
在這個例子中:
- 我們創建了一個帶有佔位符(
?
)的預處理語句,我們想要更新的值將會填入這些佔位符。 - 我們提供了一個包含這些值的數組。
- 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 + " 筆記錄已更新");
});
});
這裡發生了什麼:
- 我們使用
author_id
字段將books
表和authors
表進行 JOIN。 - 我們將所有英國作者的書籍價格提高 10%(乘以 1.1)。
- 這個更新一次就可以影響多個相關表的多行!
把這想像成兩個表的協調舞蹈——它們一起移動以更新我們需要的資訊。
UPDATE 方法比較
讓我們在我們的方法中總結一下:
方法 | 優點 | 缺點 | 最適用於 |
---|---|---|---|
簡單 UPDATE | 易於理解和實現 | 如果不小心會容易受到 SQL 注入攻擊 | 做快速、一次性更新 |
預處理語句 | 對 SQL 注入攻擊更安全,可以重用 | 設置稍微複雜一點 | 為不同的值進行重複更新 |
UPDATE JOIN | 可以根據其他表中的數據更新 | 查詢結構更複雜 | 需要根據其他表中的相關信息更新數據 |
結論
好了,各位!我們已經穿越了 Node.js 和 MySQL 更新的土地,從簡單的變更到複雜的多表操作。記住,能力越大,責任越大——總是仔細檢查你的 WHERE 子句,並在處理用戶輸入時使用預處理語句。
練習這些技術,很快你就能比說“SQL”還要快地更新數據庫!持續編程,持續學習,最重要的是,樂在其中。直到下一次見面,願你的查詢快速,數據庫無 bug!
Credits: Image by storyset