iT邦幫忙

2023 iThome 鐵人賽

0
自我挑戰組

用ChatGPT詠唱來完成工作與點亮前後端技能樹系列 第 39

【Day39】ChatGPT請教教我:基礎SQL語法!NodeJS連結SQL!

  • 分享至 

  • xImage
  •  

上一篇我們針對資料庫的基本概念以及MySQL的安裝、建置與使用做了探討
這個章節要來學習基礎的SQL語法,以及使用NodeJS要怎麼連結MySQL資料庫

Go Go!

SQL語法

https://ithelp.ithome.com.tw/upload/images/20231021/20135750B6j6ihzlW4.png

好的,我會以繁體中文提供一份完整的SQL語法入門教學,並盡量使用台灣慣用的方式來回答。

SQL語法入門教學

目錄

  1. 什麼是SQL?
  2. 基本的SQL語法
    • CREATE TABLE
    • INSERT INTO
    • SELECT
    • WHERE
    • UPDATE
    • DELETE
  3. 資料型態
  4. 關聯式資料庫
  5. 常用的SQL函數
  6. GROUP BY 與 HAVING
  7. JOIN
  8. 子查詢
  9. 索引
  10. 常見的SQL問題

1. 什麼是SQL?

SQL(Structured Query Language)是一種用來管理、操作關聯式資料庫的程式語言。它允許我們進行資料的查詢、新增、修改和刪除等操作。

2. 基本的SQL語法

2.1 CREATE TABLE

用來建立新的資料表。

CREATE TABLE table_name (
   column1 datatype1 constraints,
   column2 datatype2 constraints,
   ...
);

2.2 INSERT INTO

用來新增資料到資料表中。

INSERT INTO table_name (column1, column2, ...)
VALUES (value1, value2, ...);

2.3 SELECT

用來查詢資料。

SELECT column1, column2, ...
FROM table_name
WHERE condition;

2.4 WHERE

用來篩選資料。

SELECT column1, column2, ...
FROM table_name
WHERE condition;

2.5 UPDATE

用來更新資料。

UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;

2.6 DELETE

用來刪除資料。

DELETE FROM table_name
WHERE condition;

3. 資料型態

在建立資料表時,我們需要指定每個欄位的資料型態,例如整數、字串、日期等。

4. 關聯式資料庫

關聯式資料庫是由多個資料表組成,這些資料表之間透過特定的欄位建立關聯。

5. 常用的SQL函數

SQL提供了許多內建的函數,用來處理資料,如SUM、AVG、COUNT等。

6. GROUP BY 與 HAVING

用來進行分組和過濾。

7. JOIN

用來結合兩個或多個資料表。

8. 子查詢

在查詢中使用另一個查詢。

9. 索引

用來提升查詢效能。

10. 常見的SQL問題

包括重複資料、遺漏資料等常見的問題。

這份教學提供了SQL的基本概念和常用語法,希望對你作為前端工程師的學習有所幫助。如果你有任何問題或需要進一步的解釋,請隨時向我詢問!

我們從他所提到的「基本的SQL語法」,逐一的去詢問細節

INSERT INTO 語法

https://ithelp.ithome.com.tw/upload/images/20231021/20135750sezQAHkWDa.png

當然,我會提供針對 INSERT INTO 的完整教學,並使用表格示範資料的樣子。以下是詳細的介紹:

INSERT INTO 教學

插入新資料到資料表

INSERT INTO 語句用來將新的資料插入到資料表中。讓我們一步一步介紹如何使用它。

語法:

INSERT INTO table_name (column1, column2, ...)
VALUES (value1, value2, ...);

範例:

假設我們有一個資料表 customers,包含 customer_idfirst_namelast_nameemail 等欄位。現在我們要新增一位客戶的資料:

INSERT INTO customers (customer_id, first_name, last_name, email)
VALUES (1, 'John', 'Doe', 'john.doe@example.com');

插入多筆資料

你可以一次插入多筆資料,只需在 VALUES 子句中使用多個組合。

範例:

INSERT INTO customers (customer_id, first_name, last_name, email)
VALUES (2, 'Jane', 'Smith', 'jane.smith@example.com'),
       (3, 'Bob', 'Johnson', 'bob.johnson@example.com'),
       (4, 'Alice', 'Brown', 'alice.brown@example.com');

插入部分欄位的資料

如果你只想插入部分欄位的資料,可以省略那些不需要的欄位。

範例:

INSERT INTO customers (first_name, last_name)
VALUES ('Ella', 'Williams');

插入資料的注意事項

  • 確保你的資料符合資料表的資料型態和約束。
  • 如果資料表有自動遞增的主鍵,不需要提供主鍵的值,資料庫會自動生成。
  • 總是使用單引號括住字串型態的資料。
  • 檢查資料表的約束,如唯一性約束,以確保資料不重複。

表格示範資料的樣子

以下是一個表格示範資料的樣子,假設我們有一個 customers 資料表:

customer_id first_name last_name email
1 John Doe mailto:john.doe@example.com
2 Jane Smith mailto:jane.smith@example.com
3 Bob Johnson mailto:bob.johnson@example.com
4 Alice Brown mailto:alice.brown@example.com
5 Ella Williams NULL

在這個表格中,我們使用 INSERT INTO 插入了前五筆資料。第五筆資料的 email 欄位是 NULL,表示這個欄位沒有值。

希望這份教學對你理解 INSERT INTO 語句有所幫助。如果有任何進一步的問題,請隨時提出!

SELECT語法

https://ithelp.ithome.com.tw/upload/images/20231021/20135750fxq00acOYI.png

當然,我會提供針對 SELECT 的完整教學,並根據每個範例提供相對應的表格示範資料的樣子。

SELECT 教學

從資料表中檢索資料

SELECT 語句用來從資料表中檢索(選取)資料。讓我們一步一步介紹如何使用它。

語法:

SELECT column1, column2, ...
FROM table_name
WHERE condition;

範例 1:選取所有欄位

SELECT *
FROM customers;

表格示範資料的樣子:

customer_id first_name last_name email
1 John Doe mailto:john.doe@example.com
2 Jane Smith mailto:jane.smith@example.com
3 Bob Johnson mailto:bob.johnson@example.com
4 Alice Brown mailto:alice.brown@example.com
5 Ella Williams NULL

範例 2:選取特定欄位

SELECT first_name, last_name
FROM customers;

表格示範資料的樣子:

first_name last_name
John Doe
Jane Smith
Bob Johnson
Alice Brown
Ella Williams

範例 3:選取特定條件的資料

SELECT *
FROM customers
WHERE last_name = 'Smith';

表格示範資料的樣子:

customer_id first_name last_name email
2 Jane Smith mailto:jane.smith@example.com

範例 4:選取特定條件的部分欄位

SELECT first_name, email
FROM customers
WHERE last_name = 'Brown';

表格示範資料的樣子:

first_name email
Alice mailto:alice.brown@example.com

注意事項:

  • SELECT 語句可以選取所有欄位(使用 ``)或者選取特定欄位。
  • FROM 子句用來指定資料表的名稱。
  • WHERE 子句用來篩選符合特定條件的資料。

希望這份教學對你理解 SELECT 語句有所幫助。如果有任何進一步的問題,請隨時提出!

WHERE 語法

https://ithelp.ithome.com.tw/upload/images/20231021/20135750IuLEnLulXO.png

當然,我會提供針對 WHERE 的完整教學,並詳細介紹其細節。

WHERE 教學

用於篩選資料

WHERE 子句用於在 SELECT, UPDATE, DELETE 等語句中篩選符合特定條件的資料。讓我們進一步瞭解如何使用它。

語法:

SELECT column1, column2, ...
FROM table_name
WHERE condition;

條件運算符

WHERE 子句中,我們可以使用以下條件運算符:

  • =: 等於
  • <>!=: 不等於
  • <: 小於
  • >: 大於
  • <=: 小於等於
  • >=: 大於等於
  • BETWEEN: 在某個範圍內
  • LIKE: 符合特定模式
  • IN: 在指定的值集合中

範例:

1. 等於 (=):

SELECT *
FROM customers
WHERE first_name = 'John';

2. 大於 (>):

SELECT *
FROM orders
WHERE total_amount > 1000;

3. 小於等於 (<=):

SELECT *
FROM products
WHERE price <= 50;

4. 在某個範圍內 (BETWEEN):

SELECT *
FROM employees
WHERE salary BETWEEN 30000 AND 50000;

5. 符合特定模式 (LIKE):

SELECT *
FROM products
WHERE product_name LIKE 'App%';

6. 在指定的值集合中 (IN):

SELECT *
FROM customers
WHERE city IN ('Taipei', 'New York', 'London');

邏輯運算符

你也可以使用邏輯運算符來結合多個條件:

  • AND: 且
  • OR: 或
  • NOT: 非

範例:

1. 使用 AND

SELECT *
FROM products
WHERE category = 'Electronics' AND price < 500;

2. 使用 OR

SELECT *
FROM orders
WHERE status = 'Shipped' OR status = 'Delivered';

3. 使用 NOT

SELECT *
FROM customers
WHERE NOT city = 'Taipei';

注意事項:

  • WHERE 子句應用於各種 SQL 語句,如 SELECT, UPDATE, DELETE 等。
  • 使用條件運算符來指定條件,進行資料的篩選。
  • 可以使用邏輯運算符來組合多個條件。

希望這份教學對你理解 WHERE 子句有所幫助。如果有任何進一步的問題,請隨時提出!

https://ithelp.ithome.com.tw/upload/images/20231021/20135750OQK2tiwQTH.png

好的,我會先提供一個完整的表格資料,然後根據這份表格來示範多個不同的 WHERE 子句範例,並顯示每個查詢的結果表格。

表格資料範例:

假設我們有一個名為 products 的資料表,它包含以下欄位:

product_id product_name category price
1 Laptop Electronics 1000
2 Headphones Electronics 50
3 T-shirt Apparel 20
4 Watch Accessories 300
5 Sneakers Footwear 80
6 Sunglasses Accessories 150
7 Smartphone Electronics 700
8 Jeans Apparel 50
9 Backpack Accessories 70
10 Tablet Electronics 300

WHERE 子句範例:

1. 篩選出 Electronics 類別的產品:

SELECT *
FROM products
WHERE category = 'Electronics';

結果表格:

product_id product_name category price
1 Laptop Electronics 1000
2 Headphones Electronics 50
7 Smartphone Electronics 700
10 Tablet Electronics 300

2. 篩選出價格低於 100 的產品:

SELECT *
FROM products
WHERE price < 100;

結果表格:

product_id product_name category price
2 Headphones Electronics 50
3 T-shirt Apparel 20
5 Sneakers Footwear 80
8 Jeans Apparel 50
9 Backpack Accessories 70

3. 篩選出價格介於 100 到 300 之間的產品:

SELECT *
FROM products
WHERE price BETWEEN 100 AND 300;

結果表格:

product_id product_name category price
4 Watch Accessories 300
6 Sunglasses Accessories 150
10 Tablet Electronics 300

4. 篩選出產品名稱以 'S' 開頭的產品:

SELECT *
FROM products
WHERE product_name LIKE 'S%';

結果表格:

product_id product_name category price
5 Sneakers Footwear 80
6 Sunglasses Accessories 150

5. 篩選出價格為 50 或 300 的產品:

SELECT *
FROM products
WHERE price IN (50, 300);

結果表格:

product_id product_name category price
2 Headphones Electronics 50
4 Watch Accessories 300
8 Jeans Apparel 50
10 Tablet Electronics 300

希望這些範例能夠幫助你更好地理解 WHERE 子句的使用方式。如果有任何進一步的問題,請隨時提出!

UPDATE 語法

https://ithelp.ithome.com.tw/upload/images/20231021/20135750oMt5JGZy2l.png

當然,我會提供針對 UPDATE 的完整教學,並使用表格示範更新前後的結果。

UPDATE 教學

用於更新資料

UPDATE 語句用於更新資料表中已存在的記錄。讓我們一步一步介紹如何使用它。

語法:

UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;

範例:

假設我們要更新之前提到的 products 資料表中的一筆資料:

更新前的表格資料:

product_id product_name category price
1 Laptop Electronics 1000
2 Headphones Electronics 50
3 T-shirt Apparel 20
4 Watch Accessories 300
5 Sneakers Footwear 80
6 Sunglasses Accessories 150
7 Smartphone Electronics 700
8 Jeans Apparel 50
9 Backpack Accessories 70
10 Tablet Electronics 300

更新範例:

假設我們要將 product_id 為 5 的 price 更新為 90:

UPDATE products
SET price = 90
WHERE product_id = 5;

更新後的表格資料:

product_id product_name category price
1 Laptop Electronics 1000
2 Headphones Electronics 50
3 T-shirt Apparel 20
4 Watch Accessories 300
5 Sneakers Footwear 90
6 Sunglasses Accessories 150
7 Smartphone Electronics 700
8 Jeans Apparel 50
9 Backpack Accessories 70
10 Tablet Electronics 300

注意事項:

  • 使用 UPDATE 語句時,請確保 SET 子句中指定的值符合該欄位的資料型態和約束。
  • 使用 WHERE 子句來確定要更新哪些記錄。如果省略 WHERE 子句,將會更新所有記錄。
  • 一定要小心使用 UPDATE 語句,確保不會造成資料的不可逆變化。

希望這份教學對你理解 UPDATE 語句有所幫助。如果有任何進一步的問題,請隨時提出!

DELETE 語法

https://ithelp.ithome.com.tw/upload/images/20231021/20135750Y34mB1wU38.png

當然,我會提供針對 DELETE 的完整教學,並使用表格示範刪除前後的結果。

DELETE 教學

用於刪除資料

DELETE 語句用於從資料表中刪除記錄。讓我們一步一步介紹如何使用它。

語法:

DELETE FROM table_name
WHERE condition;

範例:

假設我們要從之前提到的 products 資料表中刪除一筆資料:

刪除前的表格資料:

product_id product_name category price
1 Laptop Electronics 1000
2 Headphones Electronics 50
3 T-shirt Apparel 20
4 Watch Accessories 300
5 Sneakers Footwear 90
6 Sunglasses Accessories 150
7 Smartphone Electronics 700
8 Jeans Apparel 50
9 Backpack Accessories 70
10 Tablet Electronics 300

刪除範例:

假設我們要刪除 product_id 為 3 的記錄:

DELETE FROM products
WHERE product_id = 3;

刪除後的表格資料:

product_id product_name category price
1 Laptop Electronics 1000
2 Headphones Electronics 50
4 Watch Accessories 300
5 Sneakers Footwear 90
6 Sunglasses Accessories 150
7 Smartphone Electronics 700
8 Jeans Apparel 50
9 Backpack Accessories 70
10 Tablet Electronics 300

注意事項:

  • 使用 DELETE 語句時,請確保條件 WHERE 子句足夠準確以避免刪除不需要刪除的記錄。
  • 如果省略 WHERE 子句,將會刪除所有記錄,這是一個危險的操作,應當謹慎使用。

希望這份教學對你理解 DELETE 語句有所幫助。如果有任何進一步的問題,請隨時提出!

OK ,剩下的進階語法等下一篇再討論

先來處理NodeJS搭配MYSQL的部分

NodeJS + MySQL

https://ithelp.ithome.com.tw/upload/images/20231021/20135750jW0ZwoUSA7.png

當然,我會提供透過 Node.js 連接資料庫並進行操作的教學。以下以 MySQL 資料庫為例:

步驟1:安裝相關套件

首先,你需要安裝 Node.js 的資料庫套件,以便於連接 MySQL 資料庫。在終端中執行以下指令:

npm install mysql

步驟2:連接資料庫

在你的 Node.js 檔案中,使用以下程式碼連接到你的 MySQL 資料庫:

const mysql = require('mysql');

const connection = mysql.createConnection({
  host: 'localhost', // 資料庫位置
  user: 'username',  // 使用者名稱
  password: 'password', // 使用者密碼
  database: 'database_name' // 資料庫名稱
});

connection.connect((err) => {
  if (err) {
    console.error('資料庫連線失敗: ', err);
  } else {
    console.log('成功連線至資料庫');
  }
});

步驟3:進行資料操作

一旦你成功連接到資料庫,你可以進行各種資料操作,如查詢、新增、更新和刪除。

以下是一個範例:

// 查詢
connection.query('SELECT * FROM products', (error, results) => {
  if (error) throw error;
  console.log('查詢結果: ', results);
});

// 新增
const newProduct = { product_name: 'New Product', category: 'Electronics', price: 500 };
connection.query('INSERT INTO products SET ?', newProduct, (error, results) => {
  if (error) throw error;
  console.log('新增成功');
});

// 更新
const productId = 1;
const updatedPrice = 1200;
connection.query('UPDATE products SET price = ? WHERE product_id = ?', [updatedPrice, productId], (error, results) => {
  if (error) throw error;
  console.log('更新成功');
});

// 刪除
const productToDeleteId = 2;
connection.query('DELETE FROM products WHERE product_id = ?', productToDeleteId, (error, results) => {
  if (error) throw error;
  console.log('刪除成功');
});

步驟4:關閉連線

當你完成所有操作後,請記得關閉連線:

connection.end((err) => {
  if (err) {
    console.error('資料庫關閉失敗: ', err);
  } else {
    console.log('成功關閉資料庫連線');
  }
});

這就是使用 Node.js 連接到 MySQL 資料庫並進行操作的基本步驟。請確保將相關資料(如使用者名稱、密碼、資料庫名稱等)替換為你自己的資訊。

希望這份教學對你有所幫助!如果有任何進一步的問題,請隨時提出。

範例都先看過,然後我們先來了解connection.query的教學

connection.query

https://ithelp.ithome.com.tw/upload/images/20231021/20135750wWuQLIehSA.png

當然,我會提供針對 connection.query 的完整教學。

connection.query 教學

connection.query 是用於在 Node.js 中執行 SQL 查詢的方法。它可以處理各種資料庫操作,如查詢、新增、更新和刪除。

執行 SELECT 查詢

connection.query('SELECT * FROM products', (error, results, fields) => {
  if (error) throw error;
  console.log('查詢結果: ', results);
});

在上述範例中,我們執行了一個簡單的 SELECT 查詢來選取 products 表中的所有欄位和資料。results 將包含查詢的結果,fields 包含相關的欄位資訊。

執行 INSERT 操作

const newProduct = { product_name: 'New Product', category: 'Electronics', price: 500 };
connection.query('INSERT INTO products SET ?', newProduct, (error, results) => {
  if (error) throw error;
  console.log('新增成功');
});

在這個範例中,我們使用 SET ? 來插入新資料,newProduct 是一個包含新產品資料的物件。

執行 UPDATE 操作

const productId = 1;
const updatedPrice = 1200;
connection.query('UPDATE products SET price = ? WHERE product_id = ?', [updatedPrice, productId], (error, results) => {
  if (error) throw error;
  console.log('更新成功');
});

這個範例中,我們使用 ? 來傳遞參數,以避免 SQL 注入攻擊。在這種情況下,我們更新了產品ID為1的價格。

執行 DELETE 操作

const productToDeleteId = 2;
connection.query('DELETE FROM products WHERE product_id = ?', productToDeleteId, (error, results) => {
  if (error) throw error;
  console.log('刪除成功');
});

這個範例中,我們使用 ? 來傳遞參數,並在 DELETE FROM 子句中指定要刪除的記錄。

處理結果

在每個查詢中,都提供了一個回調函式,用於處理執行查詢後的結果。error 將包含任何可能的錯誤,results 將包含查詢的結果。

這就是使用 connection.query 方法進行資料庫操作的基本步驟。希望這份教學對你有所幫助!如果有任何進一步的問題,請隨時提出。

範例

OK,直接請ChatGPT來一個完整範例
https://ithelp.ithome.com.tw/upload/images/20231021/201357506Jc9BdLVFb.png

首先,我們需要先建立一個資料庫(DB)並創建一個表格(table)。以下是使用 SQL 語句的示例來建立一個名為 products 的表格,該表格將用於後續的操作範例:

CREATE DATABASE mydatabase;

USE mydatabase;

CREATE TABLE products (
  product_id INT AUTO_INCREMENT PRIMARY KEY,
  product_name VARCHAR(255) NOT NULL,
  category VARCHAR(255),
  price INT
);

這將建立一個名為 mydatabase 的資料庫,並在其中建立了一個 products 表格,該表格包含 product_idproduct_namecategoryprice 四個欄位。

接下來,讓我們提供使用 Node.js 和 Express 創建的 API 程式碼示例,以執行插入、查詢、更新和刪除操作。以下是完整的程式碼範例:

const express = require('express');
const mysql = require('mysql');

const app = express();
const port = 3000;

// 建立資料庫連線
const connection = mysql.createConnection({
  host: 'localhost',
  user: 'username',
  password: 'password',
  database: 'mydatabase' // 請替換為你的資料庫名稱
});

connection.connect((err) => {
  if (err) {
    console.error('資料庫連線失敗: ', err);
  } else {
    console.log('成功連線至資料庫');
  }
});

// 新增產品
app.post('/products', (req, res) => {
  const newProduct = { product_name: 'New Product', category: 'Electronics', price: 500 };
  connection.query('INSERT INTO products SET ?', newProduct, (error, results) => {
    if (error) {
      console.error('新增失敗: ', error);
      res.status(500).send('新增失敗');
    } else {
      console.log('新增成功');
      res.status(201).send('新增成功');
    }
  });
});

// 查詢所有產品
app.get('/products', (req, res) => {
  connection.query('SELECT * FROM products', (error, results) => {
    if (error) {
      console.error('查詢失敗: ', error);
      res.status(500).send('查詢失敗');
    } else {
      console.log('查詢結果: ', results);
      res.status(200).json(results);
    }
  });
});

// 更新產品
app.put('/products/:id', (req, res) => {
  const productId = req.params.id;
  const updatedPrice = 1200;
  connection.query('UPDATE products SET price = ? WHERE product_id = ?', [updatedPrice, productId], (error, results) => {
    if (error) {
      console.error('更新失敗: ', error);
      res.status(500).send('更新失敗');
    } else {
      console.log('更新成功');
      res.status(200).send('更新成功');
    }
  });
});

// 刪除產品
app.delete('/products/:id', (req, res) => {
  const productId = req.params.id;
  connection.query('DELETE FROM products WHERE product_id = ?', productId, (error, results) => {
    if (error) {
      console.error('刪除失敗: ', error);
      res.status(500).send('刪除失敗');
    } else {
      console.log('刪除成功');
      res.status(200).send('刪除成功');
    }
  });
});

app.listen(port, () => {
  console.log(`伺服器運行在 <http://localhost>:${port}`);
});

這個程式碼示例使用 Express 創建一個簡單的 API,包含新增、查詢、更新和刪除操作。請確保替換 usernamepasswordmydatabase 等資料庫連接相關資訊,以使程式碼正確運作。

希望這個示例有幫助!如果有任何進一步的問題,請隨時提出。

連入使用者設定

如果直接用初始root的帳號去連線,就會跑出一串資料庫連線錯誤的訊息

Error: ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server; consider upgrading MySQL client

https://ithelp.ithome.com.tw/upload/images/20231021/201357500OHSs8CcxL.png

這個錯誤通常是因為 MySQL 伺服器與現在的 Node.js MySQL 客戶端版本之間的身份驗證方式不相容所引起的。

為了解決這個問題,你可以嘗試以下方法:

方法1:更新 MySQL 使用者的身份驗證方式

  1. 以 root 身份登入 MySQL 伺服器。
sudo mysql -u root -p
  1. 進入 MySQL 命令行,執行以下指令:
ALTER USER 'username'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

注意替換 'username''password' 為你實際的使用者名稱和密碼。

  1. 重新載入權限:
FLUSH PRIVILEGES;
  1. 退出 MySQL 命令行:
exit;
  1. 重新啟動 MySQL 伺服器。
sudo service mysql restart

方法2:使用 mysql2 套件

另一個解決方法是使用 mysql2 套件而非 mysql 套件,因為 mysql2 支援 MySQL 8.x 的身份驗證方式。

首先,安裝 mysql2

npm install mysql2

然後在 Node.js 中使用它:

const mysql = require('mysql2');

const connection = mysql.createConnection({
  host: 'localhost',
  user: 'username',
  password: 'password',
  database: 'mydatabase'
});

// ...

請確保將 'username''password''mydatabase' 替換為你實際的使用者名稱、密碼和資料庫名稱。

這些方法中的其中一個應該可以解決你遇到的問題。如果你還有任何疑問,請隨時提出。

這邊我採用方法2,使用mysql2 來處理,簡單快速
來了解一下這兩個套件的差異
https://ithelp.ithome.com.tw/upload/images/20231021/20135750I5jPGa7dy6.png

mysqlmysql2 是兩個用於 Node.js 的 MySQL 客戶端套件,它們之間的主要區別在於其內部實現和支援的功能。

以下是它們之間的一些主要差異:

1. 內部實現:

  • mysql:
    • mysql 是 Node.js 的一個較早的 MySQL 客戶端套件,使用純 JavaScript 實現。
    • 它使用回調(callbacks)來處理非同步操作。
  • mysql2:
    • mysql2mysql 的增強版,它是基於 C++ 來實現的。
    • 由於它使用了非阻塞 I/O,所以通常比 mysql 在效能上更優秀。

2. 支援的功能:

  • mysql:
    • 對於新的 MySQL 8.x 身份驗證方式(caching_sha2_password)可能會遇到相容性問題。
  • mysql2:
    • 支援 MySQL 8.x 的身份驗證方式,因此在使用新版 MySQL 時更為推薦。
    • 支援 Promise 和 async/await,讓程式碼更容易閱讀和編寫。

總的來說,如果你需要支援最新版的 MySQL 或者你想要更強大的非同步處理能力,mysql2 是一個比較好的選擇。

然而,如果你對性能要求不高,或者你已經在使用 mysql,也可以繼續使用它。兩者之間的基本操作基本上是相似的,可以根據個人偏好來選擇。

統整重點

https://ithelp.ithome.com.tw/upload/images/20231021/20135750GyUZPLYyI5.png

在這次的對話中,我們討論了與資料庫相關的幾個重要主題:

  1. SQL 語法入門教學
    • 我提供了針對 INSERT INTOSELECTWHEREUPDATE 以及 DELETE 的完整教學,並附上相對應的範例和結果表格。
  2. Node.js 連接資料庫教學
    • 我介紹了如何使用 Node.js 連接 MySQL 資料庫,並提供了建立資料庫連線、進行資料操作的基本範例。
  3. connection.query 方法的使用教學
    • 我提供了 connection.query 方法的完整教學,包括了如何執行 SELECTINSERTUPDATE 以及 DELETE 操作。
  4. Node.js + Express 創建 API
    • 我展示了如何使用 Node.js 和 Express 創建一個簡單的 API,包括了新增、查詢、更新和刪除操作。
  5. 解決資料庫連線問題
    • 我解釋了一種可能的資料庫連線失敗錯誤(ER_NOT_SUPPORTED_AUTH_MODE)的解決方法,包括更新 MySQL 使用者的身份驗證方式和使用 mysql2 套件。

總結來說,我們已經涵蓋了許多與資料庫相關的基礎知識和操作。希望這些資訊對你學習和開發有所幫助!如果你有任何其他問題或需要進一步的協助,請隨時提出。祝你學習愉快!

結語

本次的內容在這邊:
https://chat.openai.com/share/388e7e09-558f-4876-9253-dbaa1d4ed678

這篇先討論了基礎的SQL語法
最基礎的增刪查改(CRUD)操作都可以使用這些基礎語法完成
也可以用mysql2這個套件搭配NodeJS來開發對應的API了!

下一篇!繼續討論SQL,要討論這篇沒討論到的進階SQL語法
有關一開始ChatGPT所提到的「資料型態 ****」、「內建的函數」、「GROUP BY 與 HAVING」、「子查詢」、「索引」、「JOIN」這幾個功能與主題
我是會寫出增刪查改API的前端工程師一宵三筵,我們明天見!


上一篇
【Day38】ChatGPT請教教我:資料庫!MySQL!MySQL Workbench!
下一篇
【Day40】ChatGPT請教教我:進階SQL語法!JOIN!
系列文
用ChatGPT詠唱來完成工作與點亮前後端技能樹56
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言