[TOC]
>[success] # 數據庫操作(創建和增、刪、改、查)
<br>
>[success] ## 創建庫
接下來我們完成下面這 **2** 個操作:
* 通過 **workbench** 創建一個 **myblog** 數據庫
* 執行 `show databases;` 查詢
1. 首先 **點擊圖片中的圓柱體圖標** ,這個圖標就是創建庫的按鈕

2. **輸入我們要創建的數據庫名稱** ,然后 **點擊 apply 進行創建**

3. 這時候會彈出一個確認框,確認框中有一句話 `CREATE SCHEMA `myblog` ;` ,這句話是 **workbench** 自動為我們生成的 **SQL語句** ,這句話的的意思是 **創建一個名為 myblog 的庫** , 然后 **點擊 apply 進行創建**

4. 會彈出一個窗口,告訴你創建成功了,然后點擊 **Finish**

然后把這個窗口也關閉

5. 這時候執行 `show databases;` 進行查詢,就可以看到已經新加入了一個 **myblog** 庫

>[success] ## 刪除庫
1. **刪除庫** 只需要 **在庫名稱處單擊右鍵** ,點擊 **Drop Schema...**

2. 點擊 **Review SQL**

3. **點擊Execute**

>[success] ## 創建表
下面這 **2個截圖** 是我們在 **項目需求分析時** ,做存儲時候的講解的圖, **第 1 個圖是存儲用戶的表,第 2 個圖是存儲博客的表**
>[success] ### 創建用戶表
* **id** : **id** 是為了保證 **每一行都不能重復** ,**id** 是標識,**它是會遞增的,123456這樣遞增** ,這里需要注意:**如果創建了 10 條數據,把前 9 條都刪除了,后續數據的 id 是從 11 繼續開始遞增,刪除數據后,后續的數據不會進行篡位**
* **username** : **username** 就是 **用戶名**
* **password** : **password** 就是 **密碼** ,目前還是 **明文密碼** ,后續會講 **密碼如何加密**
* **realname** : **realname** 就是 **中文名** ,如果是英文系統還分為 **firstname** 和 **lastname**

上圖不光有 **表結構** 還有 **內容** ,例如: **張三、李四都屬于內容** ,**但是在建表時候我們只會建表結構,而不會建內容,表結構包括如下內容:**
* **column** : **column** 代表 **列** ,這個 **表有多少列** ,里面是 **列名稱**
* **datatye** : **datatye** 代表 **數據類型** ,**具體數據類型說明可查看結尾總結的表格**
* **pk 主鍵** : **pk 主鍵** 意思是我們所有 **id** 不可以重復,**Y代表不可以重復**
* **nn 不為空** : **nn 不為空** 意思是這一列是否允許為空, **Y代表不能為空**
* **AI 自動增加** : **AI 自動增加** 添加數據時每次會自動增加 **id** , **Y代表自動增加**
* **Default** : **Default** 是默認值,我們暫時不設置默認值

接下來開始正式使用 **workbench** 來創建表
1. 首先展開我們要的 **myblog** 庫

2. 在 **Tables** 上單機右鍵,選擇 **Create Table...**

3. 然后 **按照我們上面的表結構來創建表** ,完成后 **點擊 apply**

4. 點完后會彈出一個窗口,窗口中為我們 **自動生成了建表的 SQL語句** ,然后點擊 **apply**

5. 接下來會彈出一個窗口提示創建成功了,點擊 **Finish**

然后把這個窗口也關閉掉

6. 此時 **點擊刷新按鈕**,然后展開 **users 庫** ,就能看到 **新增加了 1 張表** ,然后點擊 **Columns** 就可以看到剛剛添加的 **列名稱**

>[success] ### 創建博客表
* **id** : **id** 是為了保證 **每一行都不能重復** ,**id** 是標識,**它是會遞增的,123456這樣遞增** ,這里需要注意:**如果創建了 10 條數據,把前 9 條都刪除了,后續數據的 id 是從 11 繼續開始遞增,刪除數據后,后續的數據不會進行篡位**
* **title** : **title** 是標題
* **createtime** : **createtime** 是 **創建時間,創建時間** 是使用的 **13** 位毫秒數 **時間戳** 整數
* **author** : **author** 是作者

**表結構包括如下內容:**
* **column** : **column** 代表 **列** ,這個 **表有多少列** ,里面是 **列名稱**
* **datatye** : **datatye** 代表 **數據類型** ,**具體數據類型說明可查看結尾總結的表格**
* **pk 主鍵** : **pk 主鍵** 意思是我們所有 **id** 不可以重復,**Y代表不可以重復**
* **nn 不為空** : **nn 不為空** 意思是這一列是否允許為空, **Y代表不能為空**
* **AI 自動增加** : **AI 自動增加** 添加數據時每次會自動增加 **id** , **Y代表自動增加**
* **Default** : **Default** 是默認值,時間戳默認設置個0

接下來開始創建 **blogs** 表,順序與 創建 **users** 表順序一致,如果想看前幾個步驟可以去看上面創建 **users** 表的步驟,這里 **前幾個步驟就不在重復了,只展示建表時候的畫面**

>[success] ## 修改表
1. 在想要修改的表名上 **單機右鍵** 點擊 **Alter Table...**

2. 此時會彈出修改界面

這樣就可以直接修改了,修改后點擊 **apply**
>[success] ## 刪除表
1. 在想要刪除的表名上 **單機右鍵** 點擊 **Drop Table...**

2. **點擊 Rview SQL**

3. **點擊 Execute** 就刪除完成了

>[success] ## 表操作(增、刪、改、查)
* **增刪改查**
* **使用SQL語句**
注意:【-- 】**2 個** 橫杠一個空格,是 **SQL** 語句中的注釋
**SQL語句如下:**
~~~
use myblog; -- 使用myblog庫,要對哪個庫進行操作就要 use 哪個庫
-- show tables; -- 顯示這個數據庫所有的表
-- 【增加功能】
-- (不用寫id,因為id自增)
-- password是MySQL關鍵字,寫反斜杠包裹起來才可以使用
-- 下面SQL語句的意思:向 users 表中添加數據, values方法的參數分別對應前面的幾個值
-- insert into users(username, `password`, realname) values('lisi', '123', '李四');
-- 【修改功能】
-- 修改 users 表中 username 等于 list 的數據的 realname 改為 李四2
-- update users set realname='李四2' where username='lisi';
-- 如果更新2個字段的話,加個逗號
-- update users set realname='李四2', password=456 where username='lisi';
-- 直接執行上面修改數據的語句可能會報錯,意思是安全模式不能修改,所以需要一次執行下面這個語句,執行完就刪掉就行
-- SET SQL_SAFE_UPDATES = 0;
-- 【查詢功能】
-- 查詢 users 表中全部列的數據(一般情況下避免使用 * 號,* 會耗費性能)
-- select * from users;
-- 查詢指定列, 查詢 id 和 username 列的數據
-- select id, username from users
-- 根據查詢條件查詢數據(使用where來添加條件進行查詢,username等于zhangsan的用戶)
-- select * from users where username='zhangsan';
-- 根據查詢條件查詢數據 > 多條件查詢(username等于zhangsan并且password等于123)
-- select * from users where username='zhangsan' and `password`='123';
-- 根據查詢條件查詢數據 > 多條件查詢(username等于zhangsan或者password等于123)
-- select * from users where username='zhangsan' or `password`='123';
-- 根據查詢條件查詢數據 > 多條件查詢(username等于zhangsan或者password不等于123)
-- select * from users where username='zhangsan' or `password` <> '123';
-- 模糊查詢(用like 與 %包裹要查詢的名字, 來模糊查詢用戶名稱中包含zhang的數據)
-- select * from users where password like'%zhang%';
-- 排序(order by id ,根據id來排序,默認情況下是正序)
-- select * from users where username='zhangsan' or `password`='123' order by id;
-- 排序(order by id desc 根據id排序倒敘)
-- select * from users where username='zhangsan' or `password`='123' order by id desc;
-- 【刪除功能】
-- 一定要加 where 條件進行刪除,不然的話會把表中數據全部刪除
-- 刪除 username 為 lisi 的數據
-- delete from users where username='lisi';
~~~
可以把這些指令放入到 **workbench** 中運行測試。
>[success] ### 軟刪除
**需要注意:在正式環境中刪除數據并不是像上面的 SQL 指令一樣直接把數據刪除,而是軟刪除** ,**正式環境** 中**數據庫** 會有一個 **state 字段,默認等于 1**

這里可以看到所有數據的 **state** 都是 **1** ,等于 **1** 代表數據是可用的

**刪除時改成 0**
~~~
-- 把 users 表中 username 等于 lisi 的數據的 state 修改成 0
update users set state='0' where username='lisi' -- 軟刪除(假刪除)
~~~
**軟刪除** 的好處就是 **數據可以恢復** ,**改成 1 就又恢復了** ,根據項目需求而定,因為我們這里要學習刪除指令所以暫時不使用軟刪除
>[success] ### 添加假數據
為了接下來學習時候 **數據庫** 中有 **測試數據** ,我們先 **手動向數據庫中插入幾條假數據** ,**SQL 指令** 如下:
~~~
insert into users(username, `password`, realname) values('lisi', '123', '李四');
insert into users(username, `password`, realname) values('zhangsan', '123', '張三');
insert into blogs(title, content, createtime, author) values('標題A', '內容A', '1646361945579', 'zhangsan');
insert into blogs(title, content, createtime, author) values('標題B', '內容B', '1646362886241', 'lisi');
~~~
然后 **鼠標滑動光標點擊workbench上的閃電圖標一起執行,就可以把他們四個都添加到數據庫了**
>[success] ## 總結
**MySQL表結構中的常用數據類型** :
| 數據類型 | 應用場景 |
| --- | --- |
| int | id、數字整數都可以用int類型 |
| varchar | **字符串類型數據** 都可以使用 **varchar** ,可以限制位數 **varchar(20)** 代表20位字符串長度 |
| longtext | 博客內容, **longtext** 類型不限長度,最多可以 **儲存 4G** 大小的內容 |
| bigint | **時間戳** 是 **13位整數** 就不可以使用 **int** 類型了,所以就需要使用 **bigint(20)** ,20位整數 |
**字符串** 一般用 **varchar** 就可以,如果很長很長內容的話就用 **longtext** ,**整數** 一般情況下用 **int** 就可以,如果 **整數** 不滿足條件的話就要 **bigint**,這些類型 **基本上滿足我們日常系統中所有的數據類型**。
**常用語句 :**
~~~
show databases; // 查詢所有庫
CREATE SCHEMA myblog; // 新建 myblog 庫
DROP DATABASE `myblog`; // 刪除 myblog 庫
// 在myblog庫中創建users表
CREATE TABLE `myblog`.`users` (
`id` INT NOT NULL AUTO_INCREMENT,
`username` VARCHAR(20) NOT NULL,
`password` VARCHAR(20) NOT NULL,
`realname` VARCHAR(10) NOT NULL,
PRIMARY KEY (`id`));
// 刪除 myblog 庫 users 表
DROP TABLE `myblog`.`users`;
// 查詢MySQL版本
select version()
~~~
- NodeJS基礎
- 什么是NodeJS
- npm
- Node.js+Express+Koa2+開發Web Server博客
- 下載和安裝node
- nodejs和js的區別
- commonjs-演示
- nodejs如何debugger
- server端與前端的區別
- 項目需求分析
- 開發接口(不使用任何框架)
- http-概述
- 處理get請求
- 處理post請求
- 處理http請求的綜合示例
- 搭建開發環境
- 初始化并且開發路由
- 開發博客項目之數據存儲
- MySql介紹
- 數據庫操作(創建和增、刪、查)
- Nodejs 操作 Mysql
- Nodejs 鏈接 mysql 做成工具
- API 對接 MySQL
- 開發博客項目之登陸
- cookie-介紹
- cookie用于登錄驗證
- cookie做限制