Node — 第五天
1. MySQL數據庫
phpstudy 數據庫服務器及圖形化軟件 軟件鏈接
鏈接:https://pan.baidu.com/s/1F8wdoMstHAJkINfDKDejsw
提取碼:xl3k
數據庫對于我們前端同學來說,就是一個了解。
對于不會變化的數據(省、市、縣),我們可以保存到json文件中。
對于經常變化的數據,我們建議保存到數據庫中。
1.1 什么是數據庫
數據庫 (database) 是用來組織、存儲和管理數據的倉庫。 當今世界是一個充滿著數據的互聯網世界,充斥著大量的數據。數據的來源有很多,比如出行記錄、消費記錄、
瀏覽的網頁、發送的消息等等。除了文本類型的數據,圖像、音樂、聲音都是數據。
為了方便管理互聯網世界中的數據,就有了數據庫管理系統的概念(簡稱:數據庫)。用戶可以對數據庫中的數 據進行新增、查詢、更新、刪除等操作。
- 增刪改查
- 新增
- 刪除
- 修改
- 查詢
1.2 常見的數據庫及分類
市面上的數據庫有很多種,最常見的數據庫有如下幾個:
- MySQL 數據庫(目前使用最廣泛、流行度最高的的開源免費數據庫;)
- Oracle 數據庫(收費)
- SQL Server 數據庫(收費)
- Mongodb 數據庫(Community + Enterprise)
其中,MySQL、Oracle、SQL Server 屬于傳統型數據庫(又叫做:關系型數據庫 或 SQL 數據庫),這三者的 設計理念相同,用法比較類似。
而 Mongodb 屬于新型數據庫(又叫做:非關系型數據庫 或 NoSQL 數據庫),它在一定程度上彌補了傳統型 數據庫的缺陷。
1.3 MySQL簡介
MySQL是一個關系型數據庫管理系統,由瑞典MySQL AB 公司開發,目前屬于 Oracle 旗下產品
我們常說數據庫,其實只是一個泛指。那么數據庫的結構是怎樣的呢?
- 數據庫服務器
- 數據庫(一般來說,一個項目,都會使用一個獨立的數據庫)
- 數據表(真正存儲數據的地方)
- 行與列(每一行代表一條數據。列又叫做字段)
- 數據表(真正存儲數據的地方)
- 數據庫(一般來說,一個項目,都會使用一個獨立的數據庫)
真正存儲數據的是數據表。數據表和我們見過的Excel表格結構基本相同。
數據表的結構和excel一模一樣。
| 1 | 王宇 | 23 | 男 | 13200008888 |
| 2 | 王宇 | 23 | 男 | 13300008888 |
| 3 | 裴志博 | 25 | 男 | 18866669999 |
| … | … | … | … | … |
2 安裝MySQL
MySQL 服務器軟件 ---- 存儲數據,可以創建數據庫、數據表
MySQL圖形化管理工具 — 可以使用它管理(創建、增刪改查等等)數據庫
2.1 安裝MySQL服務軟件
安裝wampserver
安裝過程,略
2.2 安裝操作MySQL的圖形化工具(Navicat)
圖形化的管理工具,有很多種
- mysql-workbeach(英文版,沒有中文版)
- Navicat
前面已經安裝了MySQL軟件。那么我們如何管理或者說使用它呢,對于我們來說,還需要安裝一個管理MySQL的工具,它就是 Navicat。
MySQL服務和圖形化工具的關系
安裝過程略,但要記住你的安裝目錄。
破解:將補丁中的 “navicat.exe” 復制到你的安裝目錄中,覆蓋原理的文件即可
3 Navicat使用
3.1 連接到MySQL服務器
3.2 創建數據庫
3.3 創建數據表
比如創建一個學生信息表:
| 1 | 王宇 | 23 | 男 | 13200008888 |
| 2 | 王宇 | 24 | 男 | 13300008888 |
| 3 | 裴志博 | 25 | 男 | 18866669999 |
| … | … | … | … | … |
對于一張表,最重要的是表頭的設計
對于數據庫中的數據表,最重要的設計也是表頭,只不過在數據庫中把表頭叫做字段。
| id | int | √ | 🗝 | 勾選自動遞增 | |
| name | varchar | 10 | √ | ||
| age | int | ||||
| sex | char | 1 |
-
id – 自動遞增 – √
-
最后保存,填表名 student 。
-
其他補充點
- 數據庫中的數字類型
- tinyint -128~127
- smallint -65535 ~ 65535
- int -21億 ~ 21億
- bigint 更大
- 數據庫中的字符串類型
- varchar - 變長字符串類型
- char - 定長字符串類型
- 數據庫中的數字類型
3.4 導入導出數據表
-
導出
- 在數據表名字上,比如 student 上,右鍵 --> 轉儲SQL文件 --> 結構和數據,選擇保存位置保存即可。
-
導入
- 在數據庫名上面 --> 右鍵 --> 運行SQL文件 --> 選擇SQL文件,運行即可完成導入。
- 導入注意事項,表名不能重復。
SQL語句(重點)
SQL(英文全稱:Structured Query Language)是結構化查詢語言,專門用來訪問和處理數據庫的編程語言。
三個關鍵點
SQL能做什么
- 從數據庫中查詢數據
- 向數據庫中插入新的數據
- 更新數據庫中的數據
- 從數據庫刪除數據
- 可以創建新數據庫
- 可在數據庫中創建新表
- 可在數據庫中創建存儲過程、視圖
- etc…
4. 數據查詢
語法格式:
- SQL語句,不區分大小寫。
4.1 基本查詢
格式: select 字段名1, 字段名2,… from 表名
案例1: 查詢所有英雄的姓名和昵稱
select name,nickname from heroes案例2: 查詢全部英雄的全部信息
select * from heroes4.2 帶where子句的查詢
select field1, field2… from 表名 查詢表中的所有數據
where 可以使用條件來篩選查詢出的結果
-- 查詢id小于10的英雄 -- select * from heroes where 條件 -- select * from heroes where id<10-- 查詢id小于20的女英雄 -- select * from heroes where id<20 and sex='女'-- 查詢年齡大于等于20小于等于30的英雄 -- select * from heroes where age>=20 and age<=30 -- select * from heroes where age between 20 and 304.3 模糊查詢
通配符:
-
%: 代表任意長度(包括0)的任意字符
-
_: 代表1位長度的任意字符
like: 在執行模糊查詢時,必須使用like來作為匹配條件
-- 查詢名字中帶有 “斯” 的英雄 -- select * from heroes where name like '%斯%'-- 查詢名字的最后一個字是 “斯” 的英雄 -- select * from heroes where name like '%斯'-- 查詢名字中帶有 “斯” ,并且要求 “斯”前面只能有一個字的英雄 select * from heroes where name like '_斯%'4.34 統計查詢
- max 查詢最大值 select max(age) from heroes
- Min 查詢最小值 select min(age) from heroes
- avg 查詢平均值 select avg(age) from heroes
- sum 查詢總和(查詢所有英雄的年齡之和) select sum(age) from heroes
- count 查詢總記錄數(查詢共計有多少個英雄) select count(*) cc from heroes
4.4 查詢結果排序
order by 可以對查詢結果按某個字段進行升序或者降序排列
- 升序 asc (默認值)
- 降序 desc
可進行排序的字段通常是 整型 英文字符串型 日期型 (中文字符串也行,但一般不用)
-- select * from heroes order by 排序字段 asc/desc -- asc 默認值,可以省略,表示升序 -- desc,表示降序-- 查詢所有的英雄,按年齡升序排序 -- select * from heroes order by age asc -- select * from heroes order by age-- 查詢所有的英雄,按年齡降序排序 -- select * from heroes order by age desc-- 查詢所有的英雄,先按年齡降序排序;如果年齡相同的,再按id降序排序 -- select * from heroes order by age desc, id desc-- 查詢年齡大于50歲的英雄,并按年齡降序排序 select * from heroes where age>50 order by age desc注意:如果SQL語句中,有where和order by,where一定要放到order by之前。
4.5 限制查詢結果
limit 用來限制查詢結果的起始點和長度
- 格式: limit start, length
- start: 起始點。 查詢結果的索引,從0開始。 0代表第一條數據。如果省略start,則默認表示從0
- length: 長度
注意:where、order by、limit如果一起使用,是有順序的,where在最前面、其次是order by、limit要放到最后。另外三者之間沒有and之類的。
4.6 小結
- 控制查詢的列數
- select 字段, 字段, … from heroes ---- 選擇查詢指定的列
- select * from heroes ---- 查詢所有的列
- 控制查詢的行數
- where 條件
- where id>3
- where id>3 and age<30
- where id<3 or sex=‘男’
- where name like ‘%斯%’
- order by 字段 排序規則
- order by age asc
- order by age desc
- limit 起始位置, 長度
- limit 0, 3 相當于 limit 3
- limit 3, 3
- where 條件
select 字段 from 表名 [where 條件] [order by 排序字段 排序規則] [limit 起始位置,長度]
select count(*) as total from 表名 – 查詢總記錄數
5. 添加數據
基本的格式: insert into 表名 …
方式一:指定字段和值,只要字段和值對應即可。和順序無關
insert into heroes (字段, 字段, ...) values (值, 值, ...) insert into heroes (nickname, age, name) values ('虛空恐懼', 98, '科加斯')方式二:和順序有關,因為沒指定字段,所以值必須是所有的值,而且順序和表中字段的順序要一致
insert into heroes values (null, '拉克絲', '光輝女郎', '女', 28)方式三:使用set里設置新數據的值,沒有順序關系
insert into heroes set 字段=值, 字段=值, .... insert into heroes set name='李青', nickname='盲僧'6. 修改數據
格式:
update 表名 set 字段1=值1, 字段2=值2,... where 修改條件
修改表中的哪一條(幾條)數據的 字段1=值1…
不指定修改條件會修改所有的數據
-- 加條件修改 update heroes set age=28, skill='在地上打滾' where id=19 -- 如果不指定條件,則會修改所有的行 update heroes set sex='妖'7. 刪除數據
格式: delete from 表名 where 刪除條件
注意:不指定條件將刪除所有數據
-- delete from heroes where id=19 -- 不加條件,將刪除所有的數據,危險操作 -- delete from heroesdrop table stu; – 刪除stu表
drop database heroes – 刪除庫,加入反引號可以防止出現問題,否則MySQL可能會將70當做關鍵字或其他意思解釋
小結
- 添加
- insert into 表名 set 字段=值, 字段=值, 字段=值, …
- 更新
- update 表名 set 字段=值, 字段=值, 字段=值 where 條件
- 刪除
- delete from 表名 where 條件
8. node中的mysql模塊
8.1 mysql模塊的作用
mysql模塊是一個第三方模塊,專門用來操作MySQL數據庫。 可以執行增刪改查操作。
# 如果前面沒有安裝過其他模塊,需要先初始化 npm i mysqlcurd: 就代表數據庫的增刪改查
c: create 就是添加 (增)
u: update 就是修改 (改)
r: read 就是查詢 (查)
d: delete 就是刪除 (刪)
8.2 mysql模塊的使用步驟
在Node中使用MySQL模塊一共需要5個步驟:
加載 MySQL 模塊
創建 MySQL 連接對象
連接 MySQL 服務器
執行SQL語句
關閉鏈接
8.3 基本的增刪改查
基本的查詢
執行查詢類型的SQL語句,查詢結果(result)是一個數組,數組的每個單元是對象,每個對象就是一條記錄,對象的屬性是數據表的字段名
// 1. 加載mysql const mysql = require('mysql');// 2. 創建連接對象(填寫連接參數) const conn = mysql.createConnection({host: 'localhost',port: 3306,user: 'root',password: '',database: 'yingxiong',multipleStatements: true // 表示可以一次性執行多條SQL })// 3. 連接到MySQL服務器 conn.connect();// 4. 完成查詢 // conn.query(SQL語句, 給占位符的值, 回調函數);/// 4.1 基本的查詢 conn.query('select * from heroes limit 2', (err, result) => {if (err) throw err;console.log(result); });// 5. 關閉連接 conn.end();執行增刪改語句
要完成增刪改操作,只需要將SQL語句換成增刪改語句即可。
對于增刪改語句,返回的result是一個表示SQL執行結果的對象。其主要屬性如下:
- insertId 添加時有該屬性,表示新增數據的id
- affectedRows 受影響行數,表示受影響的行數。增刪改的時候都有該屬性
- changRows 改變的行數,修改操作的時候,會有該屬性
8.4 占位符模式的增刪改查
什么是占位符
SQL中的“?” 就是占位符。比如
- select * from heroes where id > ?
- insert into heroes set ?
- update heroes set ? where id = ?
- delete from heroes where id = ?
如何為占位符傳值
當SQL語句中使用了占位符,則query方法需要使用參數2為這些占位符傳遞實際的值。并且不同的 “?” 需要的值格式也不同。具體要符合下面三種要求:
SQL中有 1 個占位符,則query方法的第二個參數設置為一個值
SQL中有 多 個占位符,則query方法的第二個參數設置為數組,數組中的值按順序分別傳遞給每個占位符
SQL中,如果 字段=值,字段=值...使用 “?” 站位了,則需為這個 “?” 傳遞一個對象,形式如下:
let val = {// 字段: 值name: '壓縮',nickname: '疾風劍豪',// 其他... }有占位符的增刪改查
// 例子一:查詢id小于3的英雄 let sql = 'select * from heroes where id < ?'; conn.query(sql, 3, (err, result) => {if (err) throw err;console.log(result); }); // 例子二:查詢id小于3的女英雄 let sql = 'select * from heroes where id < ? and sex = ?'; conn.query(sql, [3, '女'], (err, result) => {if (err) throw err;console.log(result); }); // 例子三:SQL中的 "字段=值, 字段=值..."的位置使用了一個占位符,則需為該占位符傳遞一個對象 // 如果SQL語句中有 字段=值, 字段=值, .... 可以使用一個 ? 表示;并且要為這個問號傳遞一個對象 let sql = 'insert into heroes set ?'; let values = {// 字段: 值name: '艾克',nickname: '時間刺客',age: 34 }; conn.query(sql, values, (err, result) => {if (err) throw err;// console.log(result);if (result.affectedRows > 0) {console.log('添加成功,最新添加的id為:' + result.insertId);} else {console.log('添加失敗');} }); // 例子四: // SQL中有兩個占位符,所以要傳遞一個數組 // 第1個問號表示 “字段=值, 字段=值...”,所以為這個問號傳遞一個對象 let sql = 'update heroes set ? where id = ?'; let values = {skill: '時光倒流',sex: '男' } conn.query(sql, [values, 36], (err, result) => {if (err) {console.log('修改失敗');} else {console.log('修改成功');} });總結
以上是生活随笔為你收集整理的Node — 第五天的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Node — 第四天(Promise与路
- 下一篇: Node — 第六天(前后端分离)及(身