目录
一、什么是数据库
与数据结构的区别
各类软件(数据库)代表
关系型 vs 非关系型
关系型数据库
非关系型数据库
二、初识MySQL数据库
三、MySQL数据库安装
四、常用数据类型
内存 vs 硬盘
数值类型
字符串类型
日期类型
五、MySQL数据库基础
数据库的操作
创建数据库
字符集编码
注意事项
关键字成为数据库名
IF NOT EXISTS 的作用
显示当前数据库
使用数据库
删除数据库
如何避免删库
数据库表的操作
查看当前数据库中有哪些表
创建表
查看表结构
删除表⚠️⚠️⚠️
一、什么是数据库
数据库是 一类 把很多数据组织起来方便进行后续增删改查的 软件
与数据结构的区别
数据结构,是一个学科,这个学科讨论的也是把很多数据组织起来,方便后续进行增删改查。是更抽象的,方法论层面的话题。而数据库是具体的软件了,拿过来就能直接使用,在数据库底层的实现过程中,也会用到很多的数据结构。
各类软件(数据库)代表
关系型 vs 非关系型
关系型数据库是按照比较严格比较整齐的结构来组织数据的。比如,像excel一样按照 "表格" 的形式,在一个表格里,有很多行,每一行,就称为是一条数据(一条记录),一行里,有很多列,每一列都有特定的含义,也有特定的类型。
非关系型数据库使用不太严格,更松散的方式来组织数据。比如,按照键值对/文档。每一个记录,都是一个 "文档", 一个文档中有哪些属性都是可以灵活定义的。文档之间,属性不一定非得一样。
关系型数据库
Oracle:收费贵
MySQL:开源免费
SQL Server:要花钱
SQLite:轻量
非关系型数据库
redis、MongoDB、hbase......
关系型数据库,可以针对数据的处理操作,提供更多的功能,和更多的校验能力
非关系型数据库,针对数据的处理操作,提供的功能更有限,校验能力也比较有限,效率会更高,更适合 "分布式系统" 使用
二、初识MySQL数据库
MySQL是一个"客户端-服务器"结构的程序
C(client)-S(server)
客户端,和服务器,是两个独立的程序,这两程序之间,通过 "网络" 进行通信
主动发起网络通信的一方,称为 "客户端",被动接受网络通信的一方,称为 "服务器"
(相当于两种角色)
服务器特点:
1)被动接受请求,返回响应.
2)服务器往往是要给多个客户端提供服务,而不是只给一个.3)服务器不知道客户端啥时候发来请求,因此只能随时准备着,7*24小时运行.
三、MySQL数据库安装
安装🔗🔗🔗
安装好客户端和服务器
MySQL客户端和MySQL服务器是在同一个主机上,仍然是通过网络来进行交互的。也可以在不同主机上的(工作中常见的情况)。
咱们使用客户端编写代码,用命令行客户端交互
客户端和服务器,谁是本体?
客户端只是一个和用户交互的界面,数据都是由服务器负责 管理 和 存储 的,对于配置的要求更高,服务器是本体。
四、常用数据类型
内存 vs 硬盘
内存,存储空间小,访问速度快,成本更高,掉电之后数据易失
硬盘,存储空间大,访问速度慢,成本更低,掉电之后持久存储
数据库,像MySQL、Oracle这些,都是把数据存储在硬盘上的.
数值类型
INT:整型
DECIMAL(M, D):浮点数类型
双精度,精确数值,M指定长度,D表示小数点位数。
字符串类型
VARCHAR(SIZE):字符串类型
可变长度字符串
日期类型
TIMESTAMP:日期类型
五、MySQL数据库基础
SQL中不区分大小写
数据库的操作
硬盘上存储的数据,先划分成多个 "数据库"(把一些有关联的数据表,放到同一个 "数据库" 中,逻辑上的 "数据集合"),每个数据库里面又包含很多的 "表"。
创建数据库
CREATE DATABASE db_test;
● 如果系统没有db_test的数据库,则创建一个名叫db_test的数据库,如果有则不创建
CREATE DATABASE IF NOT EXISTS db_test;
● 如果系统没有db_test的数据库,则创建一个使用utf8mb4字符集的db_test数据库,如果有则
不创建
CREATE DATABASE IF NOT EXISTS db_test CHARACTER SET utf8mb4;
字符集编码
MySQL 5,默认的字符集是 "拉丁文",此时如果尝试插入中文数据,就会插入失败。此时创建数据库的时候还需要指定数据库的 "字符集"(charset)为 utf8mb4
注意事项
1.创建数据库的时候,数据库的名字,不能和SQL中的 "关键字" 重复
2.创建数据库的名字,也不能和已有的数据库名字重复
关键字成为数据库名
创建数据库的时候,给数据库名,加上 "反引号"
IF NOT EXISTS 的作用
如果只是通过命令行,一条一条的输入sql,此时if not exists就没啥用处。
但是以后在工作中可能也会让数据库,批量执行一组sql(比如把若干sql写到一个文件中),在批量执行过程中,任何一个sql出错,都会使后续的sql无法继续执行(强制终止了)。所以为了避免创建一个已经存在的数据库而出错,导致整个要执行的内容都终止,就会加上if not exists。
显示当前数据库
SHOW DATABASES;
使用数据库
use 数据库名;
删除数据库
DROP DATABASE [IF EXISTS] db_name;
数据库删除以后,内部看不到对应的数据库,里边的表和数据全部被删除。是一个非常危险的操作!⚠️⚠️⚠️
如何避免删库
1、控制权限
2、对数据库中的数据及时备份
3、拉人在旁侧监督
数据库表的操作
查看当前数据库中有哪些表
show tables;
创建表
CREATE TABLE table_name ( field1 datatype, field2 datatype, field3 datatype);
可以使用comment增加字段说明。示例:
create table stu_test ( id int,name varchar(20) comment '姓名', password varchar(50) comment '密码', age int, sex varchar(1), birthday timestamp,amout decimal(13,2), resume text);
查看表结构
desc 表名;
desc是describe(描述)的缩写
删除表⚠️⚠️⚠️
DROP TABLE [IF EXISTS] tb_name;
删表,往往比删库,危险性更大。直觉上来说,删库,意味着把所有的表都删了,为啥说删表比删库更危险呢?对于删库操作,一般都是第一时间就能发现问题的。程序在操作数据库时,第一时间会通过监控报警系统反馈出问题,处理的越及时,损失就越小(损失经常是按照分钟来计算的)。
而对于删表操作,就更隐蔽了。比如一个数据库有100个表,不小心删了其中一个,程序使用数据库的时候,绝大部分的逻辑都是正常的,在使用99个表的过程中,虽然数据库能访问,但是逻辑已经出问题了,不知道要过多久,才能触发一次访问到第100个表这样的操作,才会触发一次报错。
指不定又过了多久,这样的报错积累到一定程度,才触发报警…