MySOL数据库进阶篇——存储引擎

一.MySQL体系结构图:

MySQL的结构体系主要包含以下几个方面的内容:

1. 服务器层(Server Layer):提供了MySQL的核心服务,包括连接管理、查询解析、优化等功能。

2. 存储引擎(Storage Engine):提供了数据的存储和访问服务。MySQL自身支持多种存储引擎,如InnoDB、MyISAM等,每种存储引擎都有自己特有的特点和功能。

3. 网络层(Connection Layer):提供了MySQL与客户端之间的通讯服务,支持多种协议,如TCP/IP、HTTP等。

4. 应用编程接口(Application Programming Interfaces,APIs):提供了多种编程接口,包括C、C++、Python等接口,以方便应用程序与MySQL进行交互操作。

MySQL的整个体系结构主要是由这几个部分组成的,其中服务器层和存储引擎层是MySQL核心的组成部分,分别负责提供核心服务和数据的存储和访问服务。网络层和应用编程接口层则提供了与客户端和应用程序之间交互操作的相关服务。这些组成部分配合使用,构成了MySQL强大、灵活的系统结构。

InnoDB是MySQL5.5版本后的默认使用存储引擎。

二.存储引擎简介

存储引擎就是存储数据、建立索引、更新/查询数据等技术的实现方式。存储引擎是基于表的,不是基于数据库的,所以存储引擎也被称为表类型。

常见的MySQL存储引擎包括以下几种:

1. InnoDB存储引擎
InnoDB存储引擎是MySQL中最常用的一个存储引擎,也是默认的存储引擎。它支持ACID事务,具有行级锁定和外键约束等特性,适合于应用于事务性和高并发的应用程序。InnoDB支持数据的热备份和恢复,并提供了高效的缓存机制。

2. MyISAM存储引擎
MyISAM不支持事务,并且对于更新操作会锁定整个表,但是在插入和查询方面性能非常好。对于只读应用、或者单线程的应用,使用MyISAM可以获得更好的性能。MyISAM表的特点是表锁定,速度快,但是不支持事务,也不支持外键等约束

3. MEMORY存储引擎
MEMORY存储引擎是将表数据存储在内存中,适用于一些处理销售、环境监测等数据的场景。MEMORY是一个非常快速的存储引擎,但是它的缺点是,当服务器关闭进程或者崩溃时,表数据就被清空了。MEMORY还支持Hash索引,这极大的提高了查询效率。

4. NDB Cluster存储引擎
NDB Cluster可以将一个数据库拆分成多个节点,每个节点都维护一个数据子集,并协同工作以支持完整的数据库操作。这种存储引擎用于大规模、高可用性的数据中心。

5. ARCHIVE存储引擎
ARCHIVE存储引擎是一种仅用于存档目的的存储引擎,适用于一些数据日志、快照备份等场景。它旨在提供一个非常低的磁盘空间消耗和一个高性能的压缩和解压缩能力,不支持索引、更新和删除操作,常用于写入数据后压缩存档。 

不同的存储引擎在性能、特性、使用场景等方面各不相同,开发者在使用MySQL时需要根据需求选择合适的存储引擎。

以下是代码: ```java import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class JDBCUtil { private static final String URL = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC"; private static final String USER = "root"; private static final String PASSWORD = "123456"; static { try { Class.forName("com.mysql.jdbc.Driver"); } catch (ClassNotFoundException e) { e.printStackTrace(); } } // 获取数据库连接 public static Connection getConnection() throws SQLException { return DriverManager.getConnection(URL, USER, PASSWORD); } // 关闭结果集、语句和连接 public static void close(ResultSet rs, PreparedStatement ps, Connection conn) { try { if (rs != null) { rs.close(); } if (ps != null) { ps.close(); } if (conn != null) { conn.close(); } } catch (SQLException e) { e.printStackTrace(); } } } ``` 使用说明: - URL 是数据库连接字符串,test 是数据库名称。 - USER 是数据库用户名,PASSWORD 是密码。 - getConnection() 方法用于获取数据库连接。 - close() 方法用于关闭连接。 使用示例: ```java Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; try { conn = JDBCUtil.getConnection(); ps = conn.prepareStatement("SELECT * FROM user"); rs = ps.executeQuery(); while (rs.next()) { String name = rs.getString("name"); int age = rs.getInt("age"); System.out.println(name + "\t" + age); } } catch (SQLException e) { e.printStackTrace(); } finally { JDBCUtil.close(rs, ps, conn); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值