[TOC]
>[success] # 数据库操作(创建和增、删、改、查)
<br>
>[success] ## 创建库
接下来我们完成下面这 **2** 个操作:
* 通过 **workbench** 创建一个 **myblog** 数据库
* 执行 `show databases;` 查询
1. 首先 **点击图片中的圆柱体图标** ,这个图标就是创建库的按钮
![](https://img.kancloud.cn/8e/55/8e55c4cb2cf83119a7f07f0c4ee387d8_1183x891.png)
2. **输入我们要创建的数据库名称** ,然后 **点击 apply 进行创建**
![](https://img.kancloud.cn/aa/3d/aa3d668caa4b64c4c42c8840dc08b48d_1182x891.png)
3. 这时候会弹出一个确认框,确认框中有一句话 `CREATE SCHEMA `myblog` ;` ,这句话是 **workbench** 自动为我们生成的 **SQL语句** ,这句话的的意思是 **创建一个名为 myblog 的库** , 然后 **点击 apply 进行创建**
![](https://img.kancloud.cn/64/20/64204efb070fd0cf3b212676fc9e34ec_780x593.png)
4. 会弹出一个窗口,告诉你创建成功了,然后点击 **Finish**
![](https://img.kancloud.cn/f8/fe/f8fef1d8125cdd317862d67f7372598a_780x591.png)
然后把这个窗口也关闭
![](https://img.kancloud.cn/78/d3/78d380585d08ae47cb128506ec6fe9ca_1179x891.png)
5. 这时候执行 `show databases;` 进行查询,就可以看到已经新加入了一个 **myblog** 库
![](https://img.kancloud.cn/5c/20/5c20467dff9eaf4e99824de42be6ce52_1185x884.png)
>[success] ## 删除库
1. **删除库** 只需要 **在库名称处单击右键** ,点击 **Drop Schema...**
![](https://img.kancloud.cn/fa/f7/faf7355e6179297c8a4aec9d642cd0eb_1181x888.png)
2. 点击 **Review SQL**
![](https://img.kancloud.cn/e1/a0/e1a0c66228f3fdc0f07708f7f6edeafb_430x318.png)
3. **点击Execute**
![](https://img.kancloud.cn/ee/d7/eed7a6893f71aa09ff8434d8cd290b0d_542x379.png)
>[success] ## 创建表
下面这 **2个截图** 是我们在 **项目需求分析时** ,做存储时候的讲解的图, **第 1 个图是存储用户的表,第 2 个图是存储博客的表**
>[success] ### 创建用户表
* **id** : **id** 是为了保证 **每一行都不能重复** ,**id** 是标识,**它是会递增的,123456这样递增** ,这里需要注意:**如果创建了 10 条数据,把前 9 条都删除了,后续数据的 id 是从 11 继续开始递增,删除数据后,后续的数据不会进行篡位**
* **username** : **username** 就是 **用户名**
* **password** : **password** 就是 **密码** ,目前还是 **明文密码** ,后续会讲 **密码如何加密**
* **realname** : **realname** 就是 **中文名** ,如果是英文系统还分为 **firstname** 和 **lastname**
![](https://img.kancloud.cn/2f/82/2f824e3b35e45fbe29d4b6d791ca8fd7_554x147.png)
上图不光有 **表结构** 还有 **内容** ,例如: **张三、李四都属于内容** ,**但是在建表时候我们只会建表结构,而不会建内容,表结构包括如下内容:**
* **column** : **column** 代表 **列** ,这个 **表有多少列** ,里面是 **列名称**
* **datatye** : **datatye** 代表 **数据类型** ,**具体数据类型说明可查看结尾总结的表格**
* **pk 主键** : **pk 主键** 意思是我们所有 **id** 不可以重复,**Y代表不可以重复**
* **nn 不为空** : **nn 不为空** 意思是这一列是否允许为空, **Y代表不能为空**
* **AI 自动增加** : **AI 自动增加** 添加数据时每次会自动增加 **id** , **Y代表自动增加**
* **Default** : **Default** 是默认值,我们暂时不设置默认值
![](https://img.kancloud.cn/a2/2e/a22e7a57daa40423731dc1ea004f2711_684x277.png)
接下来开始正式使用 **workbench** 来创建表
1. 首先展开我们要的 **myblog** 库
![](https://img.kancloud.cn/f8/71/f871df05bdc28cf67991be177bbac041_1200x900.png)
2. 在 **Tables** 上单机右键,选择 **Create Table...**
![](https://img.kancloud.cn/e4/d6/e4d66ecd54c3c764b45a37d28499cb1c_1182x893.png)
3. 然后 **按照我们上面的表结构来创建表** ,完成后 **点击 apply**
![](https://img.kancloud.cn/bf/dd/bfdd030725e4bf28fa5249e4585e2c45_1200x900.png)
4. 点完后会弹出一个窗口,窗口中为我们 **自动生成了建表的 SQL语句** ,然后点击 **apply**
![](https://img.kancloud.cn/4e/ad/4ead4dd3d03bce6923c7d43870e63030_791x595.png)
5. 接下来会弹出一个窗口提示创建成功了,点击 **Finish**
![](https://img.kancloud.cn/15/64/15640fbbd18dc7e1b8583ac0e00df874_800x600.png)
然后把这个窗口也关闭掉
![](https://img.kancloud.cn/a6/c8/a6c8018fe9d1e79ebb6fbc0759d69ec2_1200x900.png)
6. 此时 **点击刷新按钮**,然后展开 **users 库** ,就能看到 **新增加了 1 张表** ,然后点击 **Columns** 就可以看到刚刚添加的 **列名称**
![](https://img.kancloud.cn/49/a4/49a475e8ab81b830364c334b9f74f57c_1200x900.png)
>[success] ### 创建博客表
* **id** : **id** 是为了保证 **每一行都不能重复** ,**id** 是标识,**它是会递增的,123456这样递增** ,这里需要注意:**如果创建了 10 条数据,把前 9 条都删除了,后续数据的 id 是从 11 继续开始递增,删除数据后,后续的数据不会进行篡位**
* **title** : **title** 是标题
* **createtime** : **createtime** 是 **创建时间,创建时间** 是使用的 **13** 位毫秒数 **时间戳** 整数
* **author** : **author** 是作者
![](https://img.kancloud.cn/a7/a6/a7a66eab4a2592acc7fbfcd9b8f1db45_563x147.png)
**表结构包括如下内容:**
* **column** : **column** 代表 **列** ,这个 **表有多少列** ,里面是 **列名称**
* **datatye** : **datatye** 代表 **数据类型** ,**具体数据类型说明可查看结尾总结的表格**
* **pk 主键** : **pk 主键** 意思是我们所有 **id** 不可以重复,**Y代表不可以重复**
* **nn 不为空** : **nn 不为空** 意思是这一列是否允许为空, **Y代表不能为空**
* **AI 自动增加** : **AI 自动增加** 添加数据时每次会自动增加 **id** , **Y代表自动增加**
* **Default** : **Default** 是默认值,时间戳默认设置个0
![](https://img.kancloud.cn/51/ad/51ad1e28e9dec3d2edd1af1cbb042598_627x291.png)
接下来开始创建 **blogs** 表,顺序与 创建 **users** 表顺序一致,如果想看前几个步骤可以去看上面创建 **users** 表的步骤,这里 **前几个步骤就不在重复了,只展示建表时候的画面**
![](https://img.kancloud.cn/ca/8b/ca8b4533ba27c1a1fe18bb1f8f872825_1200x900.png)
>[success] ## 修改表
1. 在想要修改的表名上 **单机右键** 点击 **Alter Table...**
![](https://img.kancloud.cn/44/81/4481154c880ffacd55be9239c68a5236_1181x887.png)
2. 此时会弹出修改界面
![](https://img.kancloud.cn/12/fb/12fb71b90ba6a45b80b5b1ed24e48262_1200x900.png)
这样就可以直接修改了,修改后点击 **apply**
>[success] ## 删除表
1. 在想要删除的表名上 **单机右键** 点击 **Drop Table...**
![](https://img.kancloud.cn/e3/20/e320390f980e1375b101aa9a6ffa349f_1174x883.png)
2. **点击 Rview SQL**
![](https://img.kancloud.cn/d5/9e/d59ec9093bee8cb6e8c5c9d52e7e9010_1183x883.png)
3. **点击 Execute** 就删除完成了
![](https://img.kancloud.cn/ca/4f/ca4f231356bdebccaf5ea801d6ad5993_1200x900.png)
>[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**
![](https://img.kancloud.cn/ff/e3/ffe3051bb34e2016b72e2ef0b8438590_1180x884.png)
这里可以看到所有数据的 **state** 都是 **1** ,等于 **1** 代表数据是可用的
![](https://img.kancloud.cn/58/31/5831eb2d603438b90ed4d8d493284f02_802x270.png)
**删除时改成 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做限制