1.数据库基础

什么是数据库?

存储数据用文件就可以了,为什么还要弄个数据库?

文件保存数据有以下几个缺点:

  • 文件的安全性问题

  • 文件不利于数据查询和管理

  • 文件不利于存储海量数据

  • 文件在程序中控制不方便

数据库存储介质:

  • 磁盘

  • 内存

为了解决上述问题,专家们设计出更加利于管理数据的东西——数据库,它能更有效的管理数据。数据库的水平是衡量一个程序员水平的重要指标

客户端 VS 服务器

这里我们使用的mysql命令就是MySQL的客户端,而MySQL服务器可以通过ps命令进行查看。如下:

主流数据库

下面列举了几个主流的数据库:

SQL Server:微软的产品,.Net程序员的最爱,适合中大型项目。 MySQL:甲骨文产品,世界上最受欢迎的数据库,并发性好,但不适合做复杂的业务。主要用在电商、SNS、论坛,对简单的SQL处理效果好。 Oracle:甲骨文产品,适合大型项目和复杂的业务逻辑,但并发一般来说不如MySQL。 PostgreSql:加州大学伯利克分校计算机系开发的关系型数据库,无论私用,商用,还是学术研究,都可以免费使用、修改和分发。 SQLite:一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常低,在嵌入式设备中,可能只需要几百K的内存就够了。 H2:是一个用Java开发的嵌入式数据库,它本身只是一个类库,可以直接嵌入到应用项目中

基本使用

连接服务器

连接MySQL服务器的方式如下:

解释说明:

  • -h: 表示你要连接的MySQL服务器所在的主机,127.0.0.1表示本主机。

  • -P: 表示你要连接的MySQL服务器所对应的端口号,一般默认是3306。

  • -u: 表示用哪一个用户连接MySQL服务器,root表示超级用户。

  • -p: 表示该用户对应的密码,密码可以直接跟在-p后面,也可以回车后输入。

此外,如果要连接的是本地的MySQL服务器,那么连接时只需要指明用户名和用户密码即可。如下:

连接到MySQL服务器后,就可以输入各种SQL语句让服务器执行了,当要退出mysql时直接输入quitexit\q即可。如下:

服务器管理

停止服务器

通过systemctl stop mysqld命令或service mysqld stop命令可以停止MySQL服务器。

启动服务器

通过systemctl start mysqld命令或service mysqld start命令可以启动MySQL服务器。

重启服务器

通过systemctl restart mysqld命令或service mysqld restart命令可以重启MySQL服务器。

服务器,数据库,表关系

  • 所谓安装数据库服务器,只是在机器上安装了一个数据库管理系统程序,这个管理程序可以管理多个数据库,一般开发人员会针对每一个应用创建一个数据库。

  • 为保存应用中实体的数据,一般会在数据库中创建多个表,以保存程序中实体的数据。

数据库服务器、数据库和表的关系如下:

说明一下:

  • 图中的Client对应的就是MySQL命令,MySQL对应的就是mysqld服务。

  • DB表示的是mysqld管理的多个数据库,而每一个DB下会包含多张表。

使用案例:

数据存储路径

通过MySQL创建的数据库和各种表结构,最终会以文件的形式存储下来,通过查看MySQL的配置文件中的datadir可以得知数据文件的存储路径。比如我的MySQL配置文件的绝对路径为/etc/my.cnf,配置文件中datadir对应的值为/var/lib/mysql。如下:

将来MySQL创建的数据库文件都会存储在该目录下,可以看到该目录下有很多MySQL相关的数据文件。如下:

创建数据库

这时/var/lib/mysql目录下,就会多出一个名为hwh的目录

目前hwh目录下只有一个名为的db.opt的文件,该文件中指明了当前数据库的默认字符编码和字符校验规则。

综上所述:因此我们创建数据库时,本质就是在MySQL的数据存储路径下新建了一个目录,而当我们将这个数据库删除后,这个目录其实也就不存在了。

使用数据库

使用数据库之前,可以先通过show语句查看当前都有哪些数据库,然后再通过use语句使用指定的数据库。

创建数据库

通过show可以查看创建数据库表的结构

此处我犯下的错误,也不算错误吧,加上分好就会报错。

由于students表采用的存储引擎是InnoDB,因此在MySQL的数据存储路径下的shop目录下会多出来两个文件,分别是students.frm和students.ibd

其中students.frm是表结构文件,students.ibd是表数据和索引的文件。

如果说创建数据库的本质是在数据存储路径下新建一个目录的话,那么创建表本质实际就是在特定的数据库目录下新建若干个文件(InnoDB存储引擎对应的是两个,MyISAM存储引擎对应的是三个),因此在创建表之前一定要先选择一个数据库.

表中插入数据

desc students;可以查看表的结构

通过insert语句插入数据(随便乱写的别骂)

可以通过Select查看插入的内容

MySQL架构

MySQL 是一个可移植的数据库,几乎能在当前所有的操作系统上运行,如 Unix/Linux、Windows、Mac 和 Solaris。各种系统在底层实现方面各有不同,但是 MySQL 基本上能保证在各个平台上的物理体系结构的一致性。

MySQL架构主要可分为如下四层:

  • 连接层:主要完成一些类似连接处理,授权认证及相关的安全方案。

  • 服务层:在MySQL数据库系统处理底层数据之前的所有工作都是在这一层完成的,包括权限判断、SQL接口、SQL解析、SQL分析优化、缓存查询的处理以及部分内置函数执行等。各个存储引擎提供的功能都集中在这一层,如存储过程、触发器、试图等。

  • 引擎层:由多种可拔插的存储引擎共同组成,真正负责MySQL中数据的存储和提取,每个存储引擎都有自己的优点和缺陷,服务层是通过存储引擎API来与它们交互的。

  • 存储层:将数据存储在裸设备的文件系统之上,完成存储引擎的交互。

MySQL客户端

MySQL服务器会收到MySQL客户端发来的SQL语句,并根据SQL语句执行对应的操作。

  • 这里的MySQL客户端不仅仅指的是连接MySQL时使用的mysql命令,MySQL客户端还包括语言接口客户端。

  • MySQL给各种语言提供的用于访问数据库的接口,用户通过调用这些接口也可以向MySQL服务器发送SQL语句。

mysql命令本质是一个可执行程序,通过file命令可以看到该可执行程序是采用动态链接的方式生成的,通过ldd命令可以看到该可执行程序依赖的C/C++库文件。

也就是说,mysql命令本身就是C/C++编写的,因此在编写mysql程序时,一定需要调用MySQL提供给C/C++的语言接口客户端。当然,MySQL不仅仅提供了C/C++对应的语言接口,像Python、Java、PHP等都有对应的MySQL接口。

SQL的分类

DDL【data definition language】 数据定义语言,用来维护存储数据的结构,代表指令: create, drop, alter

DML【data manipulation language】 数据操纵语言,用来对数据进行操作,代表指令: insert,delete,update

DML中又单独分了一个DQL,数据查询语言,代表指令: select

DCL【Data Control Language】 数据控制语言,主要负责权限管理和事务,代表指令: grant,revoke,commit

存储引擎

存储引擎是:数据库管理系统如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。

MySQL的核心就是插件式存储引擎,支持多种存储引擎。

可以通过show查看存储引擎

总结:InnoDB存储引擎是支持事务的,而MyISAM存储引擎不支持。

  • 25
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

对自己好点儿i

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值