MySQL学习(一):MySQL架构介绍

一、MySQL架构

1、MySQL服务器由SQL层和存储引擎层构成
  • SQL层:包括权限判断、SQL解析功能和查询缓存处理等
  • 存储引擎层:完成底层数据库数据存储操作
2、MySQL各个模块的特点

MySQL模块

  • 客户端通过连接/线程处理层来连接MySQL数据库
    • 连接/线程处理层主要用来处理客户端的请求、身份验证和数据库安全性验证等。
    • 查询缓存和查询分析器是 SQL 层的核心部分
    • 主要涉及查询的解析、优化、缓存,以及所有内置的函数,存储过程,触发器,视图等功能。
    • 优化器主要负责存储和获取所有存储在 MySQL 中的数据。
    • 这三层统称为 MySQL 数据库的 SQL 层。

(一)、MySQL物理文件的组成

MySQL 的物理文件包括日志文件、数据文件和其他文件

1、日志文件

主要记录了数据库操作信息和错误信息。常用的日志文件包括错误日志、二进制日志、查询日志、慢查询日志和 InnoDB 引擎在线 Redo 日志等。

  • 错误日志:记录了MySQLSever运行过程中遇到的所有严重的错误信息,以及 MySQL每次启动和关闭的详细信息。
    • 默认关闭,启动时要重新配置.-log-error[=file_name]选工页,修改错误日志存放的目录和文件名称 。
  • 二进制日志(binlog):记录了MySQL所有修改数据库的操作,然后以二进制的形式记录在日志文件中,其中还包括每条语句所执行的时间和所消耗的资源,以及相关的事务信息。
    • 默认开启,启动时可以重新配置-log-bin[=file_name]选项,修改二进制日志存放的目录和文件名称。
  • 查询日志: hostname.log,查询日志记录所有的查询操作,包括所有的 select
    操作信息。
    • 体积比较大,开启后对性能有较大的影响,可以通过“-log[=file_name]”选项开启。
  • 慢查询日志: hostname-slow.log,所有 SQL 执行的时间超过 long_query_time 变量的语句和达到min_examined_row_limit 条距离的语句 。
    • 通过设置-log-slow_queries[=file_name]选项开启后,将记录日志所在的路径和名称。
  • InnoDB引擎在线 Redo 日志:记录了 InnoDB 所做的所有物理变更和事务信息。
    • 通过Redo日志和Undo信息,InnoDB大大地加强了事务的安全性。
    • 通过设置innodb_log_group_home_dir选项来更改日志的存放位置,通过innodb_log_files_in_group选项来设置日志的数量。
2、数据文件

会在 data 目录下面建立一个以数据库为名字的文件夹,用来存储数据库中的表文件数据。

  • “ .frm ”文件:表名命名,主要存放与表相关的数据信息,主要包括表结构的定义信息。
  • “ .MYD ”文件:MyISAM 存储引擎创建表时,每一个 MyISAM 类型的表都会有一个“ .MYD ”文件和一个“ .MYI"文件。“ .MYD ” 文件主要用来存放数据表的数据文件。
  • “ .MYI ”文件:对于MyISAM存储引擎来说,可以被缓存的内容主要就是源于“ .MYI”文件中 ,“ .MYI ” 文件中主要用来存储表数据文件中任何索引的数据树。
  • “.ibd” 文件和“.ibdata”文件:用来存储InnoDB存储引擎的数据,其中主要包括索引信息。
3、其他文件

例如系统配置文件、 pid 文件、 socket 文件等等。

二、InnoDB存储引擎

MySQL的存储引擎:MyISAM、InnoDB、MEMORY(默认使用 HASH 索引)、MERGE(一组 MyISAM 表的组合)、BerkeleyDB( BDB)
InnoDB 存储引擎是第三方公司开发的,目前应用最广泛的数据存储引擎除了MyISAM之外就是InnoDB了 , InnoDB 写的处理相对于MyISAM效率低一些,InnoDB牺牲了存储和查询的效率,支持事务安全支持自动增长列对事务安全的支持,这是 InnoDB成为MySQL最为流行的存储引擎之一的重要原因。

1、支持事务
  • MySQL 支持对 InnoDB 存储事务控制,实现了 SQL92 标准所定义的 4 个级别(read uncommitted, repeatable read, read committed 和 serializable) 。
  • MySQL 通过 commit 、 rollback 、set autocommit 、 start transaction 等语法支持本地事务,具体语法如下所示:
START TRANSACTION | BEGIN [WORK]
COMMIT [WORK] [AND [NO] CHAIN] [[NO] RELEASE]
ROLLBACK [WORK] [AND [NO] CHAIN] [[NO] RELEASE]
SET AUTOCOMMIT = {0|1}
2、自动增长列
  • 列的后面添加 auto increment 属性
  • 表在添加数据 的过程中,可以插入空值,该列可以自动增加数据。
# 创建表
create table authors(
    id integer primary key auto_increment,
    name varchar (1O)
) engine=innodb default charset=gbk;
# 插入空值
insert into authors(name) values (’ ivan'), (’ susan ’),(’ shark ’);
3、 外键约束
  • 从数据库性能上讲数据库外键降低了数据库查询的效率,数据库表之间的精合度更加紧密,但是对于不少用户来讲,采用外键约束可能是最低成本的选择方式。
  • MySQL 支持外键的存储引擎只有 InnoDB。
  • 在创建外键的时候,要求父表必须有对应的索引,子表在创建外键的时候会添加相对应的索引 。
# 表sclass
create table sclass(
    id integer primary key auto_increment,
    cname varchar(20) not null,
    last_update timestamp not null default current_timestamp on update current_timestamp
)engine=innodb default charset=gbk;
# 表st,添加外键约束
create table st(
    id integer primary key auto_increment,
    sname varchar(20) not null,
    class_id integer not null,
    last_update timestamp not null default current_timestamp on update
current_timestamp,
    foreign key (class_id ) references sclass (id) on delete restrict on update
cascade
)engine=innodb default charset=gbk;

在删除操作时,如果是删除主表的数据,子表对应的记录不会被删除:如果是更新主表,子表对应的记录会更新。

  • 在物理存储方面 , InnoDB 有自己独特的存储方式,数据也是存放在.frm 文件里面,但是表数据和索引数据是存放在一起的。 InnoDB 的存储表和索引有以下两种方式:
    • 使用共享表空间存储,也就是所有表和索引数据存放在同 一个表空间中,数据和索引在 innodb_data\ _home_dir 和 innodb_ data_file_path 定义的表空间中,可以使用一个或者多个
      数据文件。
      • 使用多表空间存储,这种存储方式创建的表结构存放在 .frm文件中,但是每个表的
        数据和索引被存放在一个单独的 .ibd 文件中。如果是分区表,则每个分区对应单独的 .ibd 文件,
        文件名称是“表名+分区名”,可以在创建分区的时候指定每个分区的数据文件的路径,这样
        的好处在于可以将表的读取操作平均分布到若干个磁盘分区文件上,提高数据访问的效率。
  • InnoDB 所有的参数基本上都是加了前缀“ innodb_”。

三、MySQL 工具

MySQL服务器端工具:mysqld、 mysqld_safe、mysql.server、mysqld_multi 、myisamchk 、mysql.server、mysqlbug、mysql_install_db 。
MySQL客户端工具:myisampack、mysql 、 mysqlaccess、mysqladmin、mysqlbinlog、mysqIcheck、mysqldump、mysqlbotcopy 、mysql import、 mysqlshow、perror 。

1、MySQL 客户端连接工具一mysql
  • 登录本地 MySQL 服务器:mysql -u root -p,回车,输入密码
  • 登录远程 MySQL 服务器:mysql -u ivan -h 192.168.0.5 -p,回车,输入密码
    • 查看当前连接用户 :select current user(); –> ivan@%
  • MySQL 的字符集选项可 以在/etc/my.cnf 中配置 ,也可 以在 MySQL 命令 中手工指定客户
    端字符集 :mysql -u root -p –default-character-set=gbk,回车,输入密码
  • 直接在 MySQL 客户端执行的语旬,对于一些批处理脚本,这种方式比较方便:mysql -u root -p mysql -e “select host,user from user”;,回车,输入密码

四、如何选择合适的存储引擎

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值