Mysql相关
基础语法篇
- 创建数据库 (create database xxx) 后面可以更上 DEFAULT 属性 set 什么值
- 创建表格
CREATE TABLE 名字 (
字段名 类型(限定符) 额外信息 , # 比如 AUTO_INCREMENT , primary key ,not null , DEFAULT
);
- 查看表结构 ( DESC 表名)
- 增删改查…
稍微高级一点的 :
- 左连接
- 右连接
- 全连接
- 等值连接
- GROUP BY
- ORDER BY
- LIMIT
- HAVING
Like的通配符
MySQL中的常用统配符有三个:
%:用来表示任意多个字符,包含0个字符
_ : 用来表示任意单个字符
escape:用来转义特定字符
select username from user where username like '%pbo/_%' escape '/';
MySQL 文件系统
MySQL 有一套 完整的日志系统, 可以通过使用日志系统, 来控制 , 获取一些信息
默认为 INNODB的日志文件
参数文件
告诉MySQL实例启动时在哪里可以找到数据库文件,并且指定某些初始化参数。
MySQL数据库中的参数可以分为两类:
- 动态(dynamic)参数:可以在MySQL实例运行中进行更改
- 静态(static)参数:在整个实例生命周期都不能更改,就好像是只读的
关于对这些变量的获取, 可以进入数据库中, 使用 SHOW VARIABLES LIKE '%';
来查询所有
对于动态变量可以支持在MySQL运行的时候进行修改 , 可以使用一下语句进行修改
SET [global | session] system_var_name = expr
SET [@@global. | @@session.] system_var_name = expr
日志文件
日志文件记录了影响MySQL数据库的各种类型活动。常见的日志文件有
- 错误日志
- 二进制日志
- 慢查询日志
- 查询日志
==== 错误日志: (默认开启)
对MySQL的启动、运行、关闭过程进行了记录。该文件不仅记录了所有的错误信息,也记录了一些警告或正确的信息。可以通过show variables like 'log_error’来定位该文件。默认情况下错误文件的文件名为服务器的主机名。
相关参数 : log_error 表示文件
==== 二进制日志 : (默认不开启) (可以用来搭建集群使用 (主从复制))
记录了对MySQL数据库执行更改的所有操作,但是不包括select和show这类操作,因为这类操作对数据本身并没有修改。此外,二进制日志还包括执行数据库更改操作的时间等其他额外信息。
默认不开启,需要手动修改配置文件参数来启动。
bin_log.index为二进制的索引文件,用来存储过往产生的二进制日志序号。如果超过二进制文件的最大值,则产生新的二进制文件,后缀名+1,并记录到.index文件。
注意 : 该参数是静态参数, 需要修改配置文件来启动 对应 数据库参数中的 log_bin log_bin_basename log_bin_index
二进制日志主要有以下几种作用:
恢复:某些数据的恢复需要二进制日志
复制:通过复制和执行二进制日志使一台远程的MySQL数据库(一般称为slave或standby)与一台MySQL数据库(一般称为master或primary)进行实时同步 (可以用来搭建集群)
审计:通过二进制日志中的信息来进行审计,判断是否有对数据进行注入的攻击
二进制日志的格式有三种,由binlog_format控制:STATEMENT、ROW和MIXED
STATEMENT : 在Master向Slave同步的时候, 会以原生SQL语句进行同步
ROW : 在Master想Slave同步的时候, 直接同步数据.
MIXED : 默认会以 STATEMENT 的方式记录,但在一些情况下可以自动的切换成 ROW 方式,比如执行用户自定义的函数;
相关参数 :
- log_bin 是否开启二进制日志 (未开启是 OFF) 开启的话 需要配置 存放地方 (比如 /var/lib/mysql/bin-log)
- log_bin_basename : log_bin 的附带品 , 如果不指定的话, 就是用log_bin 的文件
- log_bin_index (指定索引文件的位置)
- expire_logs_days : 删除超过这个变量保留期之前的全部日志
==== 慢查询日志 : (默认不开启) (用来断定一些消耗时间过长的语句)
帮助定位可能存在问题的SQL语句,从而进行SQL语句层面的优化。例如,可以在MySQL启动时设一个阈值,将运行时间超过该值的所有SQL语句都记录到慢查询日志文件中。该阈值可以通过参数long_query_time来设置,默认值为10,代表10秒。 只会记录执行时间大于该阈值的SQL。
相关参数 :
- long_query_time : 定义慢查询的阈值, 超过这个时间的都称为 慢查询
- slow_query_log : 是否启动慢查询日志 : OFF 不启动 ON 启动
注意 : 在MySQL 5.1 开始 可以将慢查询的日志记录放入一张表 , 名为slow_log , 在mysql 中
==== 查询日志 : (可以追踪数据库查询过的语句) (默认不开启)
相关参数 :
- log_output : 这个是所有 log 都可以配置的. 使用log 输出的方式 : 默认是 FILE (文件) 可以修改成 TABLE (表格) , 会存放在mysql数据库的相关位置
- general_log : 是否开启查询日志
- general_log_file : 指定查询日志存放的位置 (如果log_output 不是 FILE 就没有用)
套接字文件
pid文件
表结构定义文件
Mysql索引结构
MYSQL的索引类型
其实索引类型 按大类的分 只有 : B-TREE 索引, HASH 索引 ,全文索引
对于 B-TREE索引, INNODB 默认使用的是 B+ 树作为实现 ,
在B-TREE 索引中, 有 普通索引 , 唯一索引 , 和主键索引 …
HASH 索引, 在INNODB 是不显式支持的, 但是INNODB中会有自动调优的时候使用hash索引 . 这个是无法认为控制的
全文索引 : 使用的是一个倒排索引的技术 … 这个技术 也是在 elast