常用的資料庫代碼 -- 通過 * 把 users 表中所有的數據查詢出來 -- select * from users -- 從 users 表中把 username 和 password 對應的數據查詢出來 -- select username, password from users -- 向 ...
- 常用的資料庫代碼
-- 通過 * 把 users 表中所有的數據查詢出來
-- select * from users
-- 從 users 表中把 username 和 password 對應的數據查詢出來
-- select username, password from users
-- 向 users 表中,插入新數據,username 的值為 tony stark password 的值為 098123
-- insert into users (username, password) values ('tony stark', '098123')
-- select * from users
-- 將 id 為 4 的用戶密碼,更新成 888888
-- update users set password='888888' where id=4
-- select * from users
-- 更新 id 為 2 的用戶,把用戶密碼更新為 admin123 同時,把用戶的狀態更新為 1
-- update users set password='admin123', status=1 where id=2
-- select * from users
-- 刪除 users 表中, id 為 4 的用戶
-- delete from users where id=4
-- select * from users
-- 演示 where 子句的使用
-- select * from users where status=1
-- select * from users where id>=2
-- select * from users where username<>'ls'
-- select * from users where username!='ls'
-- 使用 AND 來顯示所有狀態為0且id小於3的用戶
-- select * from users where status=0 and id<3
-- 使用 or 來顯示所有狀態為1 或 username 為 zs 的用戶
-- select * from users where status=1 or username='zs'
-- 對users表中的數據,按照 status 欄位進行升序排序
-- select * from users order by status
-- 按照 id 對結果進行降序的排序 desc 表示降序排序 asc 表示升序排序(預設情況下,就是升序排序的)
-- select * from users order by id desc
-- 對 users 表中的數據,先按照 status 進行降序排序,再按照 username 字母的順序,進行升序的排序
-- select * from users order by status desc, username asc
-- 使用 count(*) 來統計 users 表中,狀態為 0 用戶的總數量
-- select count(*) from users where status=0
-- 使用 AS 關鍵字給列起別名
-- select count(*) as total from users where status=0
-- select username as uname, password as upwd from users
實際開發中庫、表、行、欄位的關係
- 在實際項目開發中,一般情況下,每個項目都對應獨立的資料庫。
- 不同的數據,要存儲到資料庫的不同表中,例如:用戶數據存儲到 users 表中,圖書數據存儲到 books 表中。
- 每個表中具體存儲哪些信息,由欄位來決定,例如:我們可以為 users 表設計 id、username、password 這 3 個
欄位。 - 表中的行,代表每一條具體的數據。
欄位的特殊標識
- PK(Primary Key)主鍵、唯一標識
- NN(Not Null)值不允許為空
- UQ(Unique)值唯一
- AI(Auto Increment)值自動增長
在項目中使用Mysql資料庫
在項目中操作資料庫的步驟
- 安裝操作 MySQL 資料庫的第三方模塊(mysql)
- 通過 mysql 模塊連接到 MySQL 資料庫
- 通過 mysql 模塊執行 SQL 語句
安裝mysql模塊
mysql 模塊是托管於 npm 上的第三方模塊。它提供了在 Node.js 項目中連接和操作 MySQL 資料庫的能力。想要在項目中使用它,需要先運行如下命令,將 mysql 安裝為項目的依賴包:
npm install mysql
配置
mysql模塊
在使用 mysql 模塊操作 MySQL 資料庫之前,必須先對 mysql 模塊進行必要的配置,主要的配置步驟如下:
測試mysql模塊是否可以正常工作
調用 db.query() 函數,指定要執行的 SQL 語句,通過回調函數拿到執行的結果:
const mysql = require('mysql')
const db = mysql.createPool({
host: '127.0.0.1',
user: 'root',
password: 'root',
database: 'bookman',
})
//檢查mysql模塊是否正常使用
db.query('SELECT 1', (err, results) => {
if (err) return console.log(err.message);
//只要可以輸出[ RowDataPacket { '1': 1 } ]的結果,就證明資料庫鏈接沒問題。
console.log(results);
})
查詢語句
查詢表中數據示例:
const mysql = require('mysql')
const db = mysql.createPool({
host: '127.0.0.1',
user: 'root',
password: 'root',
database: 'bookman',
})
db.query('SELECT * FROM tb_book', (err, results) => {
//查詢失敗
if (err) return console.log(err.message);
//查詢成功
//如果執行的是select查詢語句,則返回的是數組
console.log(results);
})
插入數據
向表中插入數據,示例代碼如下。
- 便捷方式
//插入數據 簡化形式
const user = { username: 'liyu2', password: '49023dfs!2' }
//待執行的sql語句
const sqlStr = 'INSERT INTO tb_user SET ?'
//使用數組的形式,依次為?占位符指定具體的值。
db.query(sqlStr, user, (err, results) => {
//失敗了
if (err) return console.log(err.message);
//成功了
if (results.affectedRows) {
console.log('插入數據成功');
}
})
註意:
這種方法適合插入多項屬性時使用
db.query里的第二個值一定是對象,如果是多個值,就用中括弧包含
如果執行的是insert into語句,則result是一個對象
可以通過affectedRows屬性,來判斷是否插入成功
- 初始形式
//插入數據
const list = { username: 'liyu3', password: '23123' }
//待執行的sql語句
const sqlstr = 'INSERT INTO tb_user SET ?'
//使用數組的形式,依次為?占位符指定具體的值。
db.query(sqlstr, [list.username, list.password], (err, results) => {
//失敗了
if (err) return console.log(err.message);
//成功了
//註意:如果執行的是insert into語句,則result是一個對象
//可以通過affectedRows屬性,來判斷是否插入成功
if (results.affectedRows) {
console.log('插入數據成功');
}
})
更新數據
可以通過如下方式,更新表中的數據:
//需要更新的數據
const update = { username: 'liyu', password: '3343' }
//要執行的SQL語句
const updateSql = 'UPDATE tb_user SET password=? WHERE username = ?'
//3.調用db.query()執行 SQL 語句的同時,依次為占位符指定具體的值
db.query(updateSql, [update.password, update.username], (err, results) => {
if (err) return console.log(err.message);
if (results.affectedRows) { console.log('更新狀態成功'); }
})
註意:
執行了update後,返回的也是一個對象,可以通過.affectedRows來判斷是否成功
- 便捷方式
const update2 = { username: 'liyu2', password: '111' }
const updateSql1 = 'UPDATE tb_user SET ? WHERE username=?'
db.query(updateSql1, [update2, update2.username], (err, results) => {
if (err) return console.log(err.message);
if (results.affectedRows) { console.log('更新成功'); }
})
註意:
在是使用便捷方式開發代碼時需要註意,db.query里的第二參數里,第一個值一定是對象。
刪除數據
在刪除數據時,推薦根據 id 這樣的唯一標識,來刪除對應的數據。示例如下:
const sqlStr = 'delete from tb_user where username = ?'
db.query(sqlStr, 'liyu2', (err, results) => {
if (err) return console.log(err.message);
if (results.affectedRows) {
console.log('刪除成功');
}
})
註意:
調用db.query()執行SQL語句時,為占位符指定具體的值
如果SQL里有多個占位符,則必須使用數組為每個占位符指定具體的值
如果SQL里只有一個占位符,則可以省略數組
標記刪除
使用 DELETE 語句,會把真正的把數據從表中刪除掉。為了保險起見,推薦使用標記刪除
的形式,來模擬刪除的動作。
所謂的標記刪除,就是在表中設置類似於 status
這樣的狀態欄位
,來標記當前這條數據是否被刪除。
當用戶執行了刪除的動作時,我們並沒有執行 DELETE 語句把數據刪除掉,而是執行了 UPDATE 語句,將這條數據對應
的 status 欄位標記為刪除即可。