MySQL

2017-07-19  本文已影响0人  yzw12138

一、编码方式

1、gbk编码:是国家标准编码方式, 不论英文和中文都是由双字节来表示,中文最高位为 1,通用性比较差。
2、utf8编码:国际编码,是多字节编码(中文24,英文8),可以包括世界上所有国家用
到的字符,通用性较好。

二、MySQL日志

查询错误日志存储路径

image.png
配置错误日志文件
log-error="error.log"
//日志输出类型
log-output=FILE
general-log=1
general_log_file="filename.log"
log-output=NONE
log_slow_queries=0
slow_query_log_file="filename.log"
//用来记录MySQL中响应时间超过阀值(临界值)的语句
long_query_time=10

执行select sleep(3) SQL语句存入慢查询日志的语句。

三种格式:
Statement 记录每一次修改数据库数据时的sql语句。不用记录修改的内容
Row不记录sql上下文相关信息,仅保存被修改的记录。详细的记录了被修改的信息。
Mixedlevel以上两种的混合。
热备(主从复制):Master服务器将自己的每一次改动信息存入到Binarylog日志中,从服务器Slave用master帐号登录,并读取主服务器内的Binarylog文件,在从服务器上运行该日志,将数据进行更新转移。(包括三个进程:1从服务器发出请求访问Binarylog日志 2住服务器将日志内容传给从服务器 3从服务器运行日志)

三、分析慢查询(explain)

在Mysql的配置文件中配置一个阈值,所有sql语句执行时间超过这个阈值的将被存储到慢查询日志中,在终端通过explain该条sql语句

mysql> explain select * from users where name = 'dd';
+----+-------------+-------+------+---------------+------------+---------+-------+------+-------------+
| id | select_type | table | type | possible_keys | key        | key_len | ref   | rows | Extra       |
+----+-------------+-------+------+---------------+------------+---------+-------+------+-------------+
|  1 | SIMPLE      | users | ref  | name_index    | name_index | 258     | const |    1 | Using where |
+----+-------------+-------+------+---------------+------------+---------+-------+------+-------------+
1 row in set (0.04 sec)
// 主要关注type、key、rows三个属性
//type代表mysql找到所需行的方式,可以取值为:ALL(全表扫描)、ref(哪些列或常量被用于查找索引列上的值)
// key代表实际使用的索引
// rows代表sql查询读取的行数

具体信息在这里这里

四 、索引

索引精讲
分类:

创建索引的条件:

select * from test where col2 = 3;
select * from test where col1 like '%3';

注意:

show status like 'Handler_read%';
// Handler_read_key 值越高表示索引使用率越高
// Handler_read_rnd_next 值越高索引使用率越低

为减少IO操作,每一次IO读取数据时都会将其相邻的数据读取到内存的缓冲区,因为局部预读性原理告诉我们,当计算机访问一个地址的数据的时候,与其相邻的数据也会很快被访问到;
B+Tree索引原理:

image.png
将数据分散存储在不同的磁盘块中,叶子节点用于存储数据,非叶子节点用于存储搜索方向;

五、视图:是一张虚拟表,select语句执行的结果集

视图的优点:

六.数据一致性(处理高并发)

修改下表中的username,打开两个终端窗口,第一个输入

//手动提交事务 为1时自动提交
set autocommit=0; 
begin work; 
select * from users where id=1 for update;

在另一个窗口输入

update users set username=123 where id=1;

此时第一个窗口正在更新该条数据,并为其家锁,因此第二个窗口无法都数据进行更改,数据库报错;


image.png

第一个窗口提交事务后,其余进程才可以修改数据

update users set username=23 where id=1;commit work;

七.函数、存储过程、存储引擎

信息函数:
显示要查询内容的信息(数据库版本 数据的编码方式等)
自定义函数(UDF):必要条件(参数 返回值)
创建自定义函数:
create function 函数名称(参数列表)
returns 返回值类型
函数体(sql语句)
create function f_name
returns{string|interger|real|decimal}
函数体

create procedure sp1(in p_age smallint unsigned,out deleteUser smallint unsigned,out userCount smallint unsigned)
begin
delete from users where age=p_age;(删除年龄为p_age的用户名)
select row_count into deleteUser;(将删除的用户存入deleteUser表;row_count函数返回前一个被sql更新,删除,插入的行)
select count(id) from users into userCount;(将删除后的信息存入userCount表)
end
call sp1(20,@a,@b);

begin—end语句中间声明的局部变量之在begin—end之间有效。
set @num:set或者select 后跟的@num叫做用户变量。
存储引擎:
根据每张表经常的不同操作,而选择不同的存储引擎。一种存储数据,查询数据的技术。

八、范式

第一范式:1NF是对属性的原子性约束,要求属性具有原子性,不可再分解;
第二范式:2NF是对记录的惟一性约束,要求记录有惟一标识,即实体的惟一性;
第三范式:3NF是对字段冗余性的约束,即任何字段不能由其他字段派生出来,它要求字段没有冗余。

上一篇 下一篇

猜你喜欢

热点阅读