🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[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() ~~~