1.数据库的概念
数据库是按照数据结构来组织、存储和管理数据的仓库,是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。
虽然单纯的使用文件也可以存储数据,但会存在如下缺点:
• 安全性问题:数据误操作后无法进行回滚。
• 不利于数据的查询和管理:没有将存储的数据以某种数据结构组织起来。
• 控制不方便:数据的控制需要用户自己来完成。
• 不利于存储海量数据:数据量越大用户操控数据的成本越高。
为了解决上述问题,于是专家们设计出了更利于管理数据的数据库。
客户端 VS 服务器:
数据库是分为数据库服务器和数据库客户端的,以MySQL数据库为例,我们使用MySQL数据库时会先通过mysql -uroot -p命令连接MySQL服务器。如下:
这里我们使用的mysql命令就是MySQL的客户端,而MySQL服务器可以通过ps -axj | head -1 && ps -axj | grep mysqled | grep -v grep命令进行查看。如下:
这里查看到的mysqld就是MySQL的服务器,我们使用mysql命令实际就是在连接mysqld服务。通过 netstat -ltp 命令可以看到,MySQL服务器底层采用的是TCP6协议,目前服务器处于监听状态。如下:
也就是说,MySQL服务器本质是一个网络服务器,我们使用mysql命令连接MySQL服务器时,本质就是MySQL客户端在向MySQL服务器发起连接请求,连接建立成功后MySQL客户端就会将用户输入的SQL语句发送给MySQL服务器,之后MySQL服务器就会根据SQL语句对数据进行对应的操作。
数据库的存储介质:
• 磁盘,比如MySQL就是一种磁盘数据库。
• 内存,比如redis就是一种内存数据库。
注:
1.数据库按存储介质可以分为磁盘数据库和内存数据库,其中内存数据库又称为主存数据库(Main Memory Database)。
2.磁盘数据库的数据主要存储在磁盘上,因此磁盘数据库在数据的持久化保存上有明显优势。但磁盘数据库为了提高数据的存储效率,也有自己对应的缓存机制,因此在某一个时刻之内,不一定所有数据都会被刷新到磁盘上。
3.内存数据库的数据主要存储在内存中,与磁盘数据库相比,内存数据库可以大大提高读取速度,减少数据库的访问时间。但内存数据库并非完全不使用磁盘,数据库的启动信息、初始数据等还是需要存储在磁盘上的,只是数据主要在内存中进行存储和运算。
4.由于内存数据库的数据存储在内存中,数据库主机掉电后数据就会丢失,因此在数据库服务关闭前通常需要把内存中的数据转储到磁盘上,甚至在内存数据库运行期间,一些数据也会持久化到磁盘存储。
数据库的狭义概念:
• 我们将数据库客户端mysql、数据库服务端mysqld、数据库数据存储目录下的所有数据(默认目录为/var/lib/mysql)合起来称为数据库。
• 也就是说数据库=mysql+mysqld+数据。
数据库的广义概念:
提供较为便捷的数据存取服务的软件集合解决方案称为数据库。
2.主流数据库
下面列举了几个主流的数据库:
• SQL Server:微软的产品,.Net程序员的最爱,适合中大型项目。
• MySQL:甲骨文产品,世界上最受欢迎的数据库,并发性好,但不适合做复杂的业务。主要用在电商、SNS、论坛,对简单的SQL处理效果好。
• Oracle:甲骨文产品,适合大型项目和复杂的业务逻辑,但并发一般来说不如MySQL。
• PostgreSql:加州大学伯利克分校计算机系开发的关系型数据库,无论私用,商用,还是学术研究,都可以免费使用、修改和分发。
• SQLite:一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常低,在嵌入式设备中,可能只需要几百K的内存就够了。
• H2:是一个用Java开发的嵌入式数据库,它本身只是一个类库,可以直接嵌入到应用项目中。
3.基本使用
4.MySQL架构
5.SQL分类
6.存储引擎