第04章 逻辑架构
1. 逻辑架构剖析1.1 第1层:连接层系统(客户端)访问 MySQL服务器前,做的第一件事就是建立 TCP连接。
经过三次握手建立连接成功后,MySQL服务器对 TCP传输过来的账号密码做身份认证、权限获取。
用户名或密码不对,会收到一个Access denied for user错误,客户端程序结束执行
用户名密码认证通过,会从权限表查出账号拥有的权限与连接关联,之后的权限判断逻辑,都将依赖于此时读到的权限
TCP连接收到请求后,必须要分配给一个线程专门与这个客户端的交互。所以还会有个线程池,去走后面的流程。每一个连接从线程池中获取线程,省去了创建和销毁线程的开销。
1.2 第2层:服务层
SQL Interface: SQL接口
接收用户的SQL命令,并且返回用户需要查询的结果。比如SELECT … FROM就是调用SQL Interface
MySQL支持DML(数据操作语言)、DDL(数据定义语言)、存储过程、视图、触发器、自定义函数等多种SQL语言接口
Parser: 解析器
在解析器中对 SQL 语句进行语法分析、语义分析。将SQL语句分解成数据结构,并将这个 ...
第03章 用户与权限管理
1. 用户管理1.1 登录MySQL服务器启动MySQL服务后,可以通过mysql命令来登录MySQL服务器,命令如下:
mysql –h hostname|hostIP –P port –u username –p DatabaseName –e "SQL语句"
-h参数后面接主机名或者主机IP,hostname为主机,hostIP为主机IP。
-P参数后面接MySQL服务的端口,通过该参数连接到指定的端口。MySQL服务的默认端口是3306,不使用该参数时自动连接到3306端口,port为连接的端口号。
-u参数后面接用户名,username为用户名。
-p参数会提示输入密码。
DatabaseName参数指明登录到哪一个数据库中。如果没有该参数,就会直接登录到MySQL数据库中,然后可以使用USE命令来选择数据库。
-e参数后面可以直接加SQL语句。登录MySQL服务器以后即可执行这个SQL语句,然后退出MySQL服务器。
mysql -uroot -p -hlocalhost -P3306 mysql -e "select host,user from user"
1. ...
第02章 MySQL的数据目录
1. MySQL8的主要目录结构find / -name mysql
1.1 数据库文件的存放路径show variables like 'datadir'; # /var/lib/mysql/
1.2 相关命令目录相关命令目录:/usr/bin 和/usr/sbin。
1.3 配置文件目录配置文件目录:/usr/share/mysql-8.0(命令及配置文件),/etc/mysql(如my.cnf)
2. 数据库和文件系统的关系2.1 表在文件系统中的表示2.3.1 InnoDB存储引擎模式1. 表结构
为了保存表结构,InnoDB在 数据目录下对应的数据库子目录下创建了一个专门用于 描述表结构的文件
表名.frm
2. 表中数据和索引
① 系统表空间(system tablespace)
默认情况下,InnoDB会在数据目录下创建一个名为 ibdata1、大小为 12M的 自拓展文件,这个文件就是对应的 系统表空间在文件系统上的表示。
② 独立表空间(file-per-table tablespace)
在MySQL5.6.6以及之后的版本中,InnoDB并不会默认的把各个表 ...
第01章 Linux下MySQL的安装与使用
1. 安装前说明1.1 查看是否安装过MySQL
如果你是用rpm安装, 检查一下RPM PACKAGE:
rpm -qa | grep -i mysql # -i 忽略大小写
检查mysql service:
systemctl status mysqld.service
1.2 MySQL的卸载1. 关闭 mysql 服务
systemctl stop mysqld.service
2. 查看当前 mysql 安装状况
rpm -qa | grep -i mysql
# 或
yum list installed | grep mysql
3. 卸载上述命令查询出的已安装程序
yum remove mysql-xxx mysql-xxx mysql-xxx mysqk-xxxx
务必卸载干净,反复执行 rpm -qa | grep -i mysql确认是否有卸载残留
4. 删除 mysql 相关文件
查找相关文件
find / -name mysql
删除上述命令查找出的相关文件
rm -rf xxx
5.删除 my.cnf
rm -rf /etc/m ...
==和equals()的区别
==和equals()有什么区别?Object类提供的equals()方法,默认是用==来进行比较的,也就是说只有两个对象是同一个对象时,才能返回相等的结果,在实际使用中,一般会重写定义的Class的equals方法以下是Object中的equals()方法实现:
public boolean equals(Object obj) {
return (this == obj);
}
使用==进行比较
作用于基本数据类型(byte,short,char,int,long,float,double,boolean)时比较他们之间的值是否相等;
作用于引用数据类型时,是比较两个对象的内存地址是否相同,既判断它们是否为同一个对象;引用数据类型,比较的是他们在堆内存地址是否相等。每新new一个引用类型的对象,会重新分配堆内存空间,使用==比较返回false;
使用equals()方法进行比较
没有重写时,Object默认用==实现,既比较两个对象的内存地址是否相同;
进行重写后,一般会按照对象中的内容来进行比较,若两个对象内容相同则认为对象相同,否则认为对象不等,比如:String类
pu ...