MySQL数据库——介绍

目录

1、数据库 和 数据库实例的区别

2、启动数据库

3、存储引擎

3.1、InnoDB引擎

3.2、MyISAM引擎

3.3、NDB引擎

3.4、Memory引擎

3.5、Archive引擎

3.6、Federated引擎

3.7、Maria引擎

3.8、各种引擎的比较

3.9、查看引擎

4、连接数据库

5、数据库的体系结构


1、数据库 和 数据库实例的区别

数据库是一系列文件的集合,是静止的。而数据库实例是运行起来的进程,是动态的,通过运行起来的数据库实例去操作数据库。MySQL数据库实例是单进程的(包含多线程),一般一个实例对应一个数据库,但是对于集群或者分布式,可能多个实例对应于一个数据库。

2、启动数据库

安装好MySQL后,启动数据库:./mysql &

& 作为命令参数,表示将MySQL作为后台进程,即便我们关闭了命令行窗口,数据库依然是运行的。

查看MySQL进程信息:ps -ef | grep mysql 

ps -ef 是一个命令,表示按照一定格式输出所有进程的信息;| 表示管道符,作用是将左边命令的输出作为右边命令的输入; grep mysql也是一个命令,表示在输入的内容中搜索带有mysql信息的内容,此处就是搜索所有进程信息中包含 mysql 字符串的进程信息。

启动的过程:mysql的启动会根据数据库配置文件里的参数来初始化,linux系统版本的mysql的配置文件一般my.cnf,但是windows版本mysql的配置文件时my.ini,如果数据库文件丢失,也可以启动,因为在mysql软件的代码里面本身就设置了默认配置参数,所以也能启动成功。

要注意,更改配置文件里的参数,效果是永久性的,在每次启动数据库时都有效。而在数据库运行期间,通过set指令设置的系统参数是临时的,只要系统重启,这些参数就失效了(因为要按照配置文件里的参数来)。

3、存储引擎

什么是存储引擎?比如执行一条sql语句,只需要我们输入sql指令即可,但是具体怎么执行的呢,具体对数据库的操作与执行就是存储引擎做的事情了,MySQL拥有多种存储引擎,InnoDB、MyISAM、Memory等等,没种存储引擎都有自己的特性、优势和支持的服务,所以,了解几个存储引擎是有必要的,在针对特定的开发需求时,可以选择一个合适的存储引擎。

MySQL是开源的,定义了存储引擎的接口,但是具体的实现可以由我们自己去做(自定义存储引擎)。

由于InnoDB的功能非常棒,因此,它是MySQL的默认存储引擎。

3.1、InnoDB引擎

1、支持事务,支持全文索引。

2、每张表必须有主键,如果用户没有定义主键,InnoDB自动生成一个6字节的ROWID字段作为主键,每张表的记录都是按照主键顺序进行存储的。 

3、支持外键,有行锁设计(写数据的时候,要对该行记录加锁,避免数据出错,但是读取数据的时候,不会加锁)。

4、高并发性,提供4种标准的隔离级别。

5、提供插入缓冲,二次写,自适应哈希索引,预读等高性能功能。

3.2、MyISAM引擎

1、支持全文索引(不支持事务)。

2、数据文件和索引文件是2种不同类型的文件,可以使用myisampack工具对数据文件进行压缩和解压。

3、MyISAM默认支持一张表的最大存储为256TB。

4、MyISAM的缓存(内存)只用于存储索引文件(支持大于4G的缓存大小),数据文件如果需要被缓存的话,交给操作系统完成。

3.3、NDB引擎

1、它是一个针对集群的存储引擎。

2、将全部数据存放在内存中,也可以只将主键数据放在内存中,因此主键查询速度非常快。

3、每台机器的内存有限,那么可以通过添加NDB存储节点来线性提高数据库性能。

感觉和redis很像哦~,在此保留一个疑问。

3.4、Memory引擎

1、将数据全部存放在内存中,如果断电或者系统崩溃,数据将消失。

2、默认使用哈希索引。

3、只支持表锁,并发性差(表锁是以表为单位)。

4、不支持TEXT 和 BLOB 类型。

5、如果Memory引擎表的容量无法存储查询的结果集,或者结果集中有TEXT、BLOB类型,会将其转换为MyISAM表存放到磁盘中,磁盘的读取速度慢,这样会影响性能。

感觉这个更像redis了。

3.5、Archive引擎

1、只支持插入 和 查询操作。

2、存储数据时会进行压缩,压缩比可达 1 :10。

3、适合存储归档数据,支持行锁,高并发。

4、不是事务安全的。

3.6、Federated引擎

1、不存储数据,只是指向一台远程MySQL数据库服务器上的表。

3.7、Maria引擎

1、支持缓存 数据文件 和 索引文件。

2、支持行锁。

3、支持事务。

是MyISAM引擎的升级版本。

3.8、各种引擎的比较

 

每种引擎都各有特点,所以每种引擎的表格的类型是不同的,所以才常常说什么引擎表,比如InnoDB引擎表,只是我们在开发的时候,呈现给我看的就是一张包含业务数据的关系表而已。比如在不同的引擎下,同样创建一张空表,这些表所占的空间大小都是不一样的,因为这些表还包含了不同的特有属性。

3.9、查看引擎

1、使用命令:SHOW ENGINS;        //顺便说一下,应该遵守规范,sql 的关键字要用全大写

2、当我们安装了MySQL数据库后,会自带几个系统方面的数据库,比如information_schema,mysql,sys等等,这些数据库存储的是整个MySQL的非业务数据(系统级别的数据)。在information_schema里面有个ENGINS表,表里存储着引擎的信息:

  

4、连接数据库

一种是MySQL本身提供的(连接,操作)程序,这种是本地的,就是我们用命令行的形式去操作MySQL。另一种是远程连接,需要在用户端有一个远程连接进程,这个连接进程会与MySQL数据库进程进程连接通信,以达到对数据库的操作。进程间的通信方法有匿名管道,命名管道,TCP等等。

远程连接一般是基于TCP的,连接命令:mysql - h IP地址 -u 用户名 -p       。

本地连接一般用管道或者共享内存方式通信。

5、数据库的体系结构

如下图,我用的 java 编程语言,所以 java 版的数据库操作规范是 JDBC,JDBC定义一系列操作数据库的标准接口,比如像数据库插入一条数据用什么方法,删除一条数据用什么方法。但是这些接口的具体实现是用的什么呢?用的是数据库驱动程序,实现了接口,建立了与数据库的连接,将 java 语言版的数据库操作信息转换为MySQL能够识别的SQL语言,是真正与数据库通信交互的角色。关于数据库连接,可以使用第三方的数据库连接池。然后通过连接将SQL发送给数据库,数据库进行语义识别,调用与SQL请求相关的数据库接口去完成SQL任务,而数据库接口的实现是存储引擎,所以具体的执行还是得存储引擎去做(比如查询,插入等等)。最后存储引擎操作的对象就是数据库文件系统(就是我们理解的数据库表)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值