mysql8安装
https://blog.51cto.com/13804472/2134479
事务的介绍:
https://blog.csdn.net/w_linux/article/details/79666086
MySQL 物理文件体系结构的简单整理说明
https://www.cnblogs.com/wy123/p/7102128.html
深度探索MySQL主从复制原理
https://baijiahao.baidu.com/s?id=1617888740370098866&wfr=spider&for=pc
mysql分享博客
https://www.jianshu.com/nb/11064754
使用介绍:
1.如果您决定不想执行正在输入的查询,请键入\c以下命令取消它 :
mysql> SELECT
-> USER()
-> \c
mysql>
2.创建表
mysql> CREATE TABLE pet (name VARCHAR(20), owner VARCHAR(20),
species VARCHAR(20), sex CHAR(1), birth DATE, death DATE)
engine=innodb default charset=gbk;
3.update语句
mysql> UPDATE pet SET birth = '1989-08-31' WHERE name = 'Bowser';
4.授权
mysql>GRANT ALL RRIVILEGES ON *.* TO username@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;
mysql>FLUSH PRIVILEGES;
5.insert插入多行
INSERT INTO pet VALUES
('Fluffy','Harold','cat','f','1993-02-04',NULL),
('Claws','Gwen','cat','m','1994-03-17',NULL),
('Buffy','Harold','dog','f','1989-05-13',NULL),
('Fang','Benny','dog','m','1990-08-27',NULL),
('Bowser','Diane','dog','m','1979-08-31','1995-07-29'),
('Chirpy','Gwen','bird','f','1998-09-11',NULL),
('Whistler','Gwen','bird',NULL,'1997-12-09',NULL),
('Slim','Benny','snake','m','1996-04-29',NULL);
5.排序,通常以不区分大小写的方式执行
可以使用BINARY类似的方式强制对列进行区分大小写的排序: ORDER BY BINARY col_name
DESC:仅适用于紧邻其 前面的列名 (birth); 它不会影响species列排序顺序。
6.日期计算
CURDATE(): 显示当前时间
TIMESTAMPDIFF(YEAR,birth,CURDATE()):它的参数是表达结果的单位,以及取得差异的两个日期。查询显示了每只宠物的出生日期,当前日期和年龄
YEAR(date): 参数为时间,获取时间中的年份
MONTH(date): 获取时间中的月份
DAYOFMONTH(date): 获取时间中的天数
DATE_ADD(): 可以将时间间隔添加到给定日期
当前时间的月份+1:
mysql> SELECT name, birth FROM pet
WHERE MONTH(birth) = MONTH(DATE_ADD(CURDATE(),INTERVAL 1 MONTH));
mod(): 模数函数(MOD)将月份值换行(0如果它是当前值)之后添加以获取当前任务 之后的下一个月12:
上述sql等价于:
mysql> SELECT name, birth FROM pet
WHERE MONTH(birth) = MOD(MONTH(CURDATE()), 12) + 1;
7.null值,任何算术比较的结果 NULL也是NULL
mysql> SELECT 1 = NULL, 1 <> NULL, 1 < NULL, 1 > NULL;
+----------+-----------+----------+----------+
| 1 = NULL | 1 <> NULL | 1 < NULL | 1 > NULL |
+----------+-----------+----------+----------+
| NULL | NULL | NULL | NULL |
+----------+-----------+----------+----------+
mysql> SELECT 1 IS NULL, 1 IS NOT NULL;
+-----------+---------------+
| 1 IS NULL | 1 IS NOT NULL |
+-----------+---------------+
| 0 | 1 |
+-----------+---------------+
8.模式匹配
% 匹配多个字符
_ 匹配单个字符
MySQL提供的另一种模式匹配使用扩展的正则表达式。REGEXP_LIKE()函数( REGEXP或 RLIKE 运算符,它们是同义词 REGEXP_LIKE())。
扩展正则表达式的一些特征:
. 匹配任何单个字符。
字符类[...]匹配括号内的任何字符。例如, [abc]匹配a, b或c。要命名一系列字符,请使用短划线。[a-z] 匹配任何字母,而[0-9] 匹配任何数字。
*匹配前面事物的零个或多个实例。例如,x* 匹配任意数量的x字符, [0-9]*匹配任意数量的数字,并.*匹配任意数量的任何数字。
如果模式匹配正在测试的值中的任何位置,则正则表达式模式匹配成功。(这与LIKE模式匹配不同,模式匹配仅在模式与整个值匹配时才会成功。)
要锚定模式以使其必须与要测试的值的开头或结尾匹配,请使用模式^的开头或$结尾。
要查找以...开头的名称b,请使用 ^以匹配名称的开头:
mysql> SELECT * FROM pet WHERE REGEXP_LIKE(name, '^b');
+--------+--------+---------+------+------------+------------+
| name | owner | species | sex | birth | death |
+--------+--------+---------+------+------------+------------+
| Buffy | Harold | dog | f | 1989-05-13 | NULL |
| Bowser | Diane | dog | m | 1979-08-31 | 1995-07-29 |
+--------+--------+---------+------+------------+------------+
使用 BINARY关键字使其中一个字符串成为二进制字符串
SELECT * FROM pet WHERE REGEXP_LIKE(name, BINARY '^b');
指定c 匹配控制字符。这些查询中的每b一个在名称的开头仅匹配小写
SELECT * FROM pet WHERE REGEXP_LIKE(name, '^b', 'c');
要查找包含a的名称w,请使用以下查询:
mysql> SELECT * FROM pet WHERE REGEXP_LIKE(name, 'w');
+----------+-------+---------+------+------------+------------+
| name | owner | species | sex | birth | death |
+----------+-------+---------+------+------------+------------+
| Claws | Gwen | cat | m | 1994-03-17 | NULL |
| Bowser | Diane | dog | m | 1989-08-31 | 1995-07-29 |
| Whistler | Gwen | bird | NULL | 1997-12-09 | NULL |
+----------+-------+---------+------+------------+------------+
9.计算行,count()
mysql> SELECT species, sex, COUNT(*) FROM pet
WHERE sex IS NOT NULL
GROUP BY species, sex;
+---------+------+----------+
| species | sex | COUNT(*) |
+---------+------+----------+
| bird | f | 1 |
| cat | f | 1 |
| cat | m | 1 |
| dog | f | 1 |
| dog | m | 2 |
| hamster | f | 1 |
| snake | m | 1 |
+---------+------+----------+
如果除了COUNT()值之外还要指定要选择的列 ,则GROUP BY应该存在一个用于命名相同列的子句。否则,会发生以下情况:
如果ONLY_FULL_GROUP_BY启用了 SQL模式,则会发生错误:
mysql> SET sql_mode = 'ONLY_FULL_GROUP_BY';
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT owner, COUNT(*) FROM pet;
ERROR 1140 (42000): In aggregated query without GROUP BY, expression
#1 of SELECT list contains nonaggregated column 'menagerie.pet.owner';
this is incompatible with sql_mode=only_full_group_by
10.在批处理模式下使用mysql
shell> mysql < batch-file
如果要以批处理模式获取交互式输出格式,请使用mysql -t。要回显输出执行的语句,请使用mysql -v。
您还可以使用命令或 命令从mysql提示符中使用脚本: source\.
mysql> source filename;
mysql> \. filename
带窗口函数的公用表表达式:
WITH s1 AS (
SELECT article, dealer, price,
RANK() OVER (PARTITION BY article
ORDER BY price DESC
) AS `Rank`
FROM shop
)
SELECT article, dealer, price
FROM s1
WHERE `Rank` = 1
ORDER BY article;
11.计算每日访问量
SELECT year,month,BIT_COUNT(BIT_OR(1<<day)) AS days FROM t1 GROUP BY year,month;
+------+-------+------+
| year | month | days |
+------+-------+------+
| 2000 | 01 | 3 |
| 2000 | 02 | 2 |
+------+-------+------+
连接层
最上层是一些客户端和连接服务,包含本地socket通信和大多数基于客户端/服务端工具实现的类似于tcp/ip的通信。主要完成一些类似于连接处理、授权认证、及相关的安全方案。在该层上引入了线程池的概念,为通务器也会为安全接入的每个客户端验证它所具有的操作权限。
服务层
主要用来认证安全接入的客户端提供线程,同样在该层可以实现基于SSL的安全连接。
select * from user
Sql语句的执行数据进行解析
Management Serveices & Utilities: 系统管理和控制工具
SQL Interface : SQL接口,接受用户的SQL命令,并且返回用户需要查询的结果。比如select from就是调用SQL Interface
Parser: 解析器, SQL命令传递到解析器的时候会被解析器验证和解析。
Optimizer: 查询优化器。 SQL语句在查询之前会使用查询优化器对查询进行优化。
用一个例子就可以理解: select uid,name from user where gender= 1, 优化器来决定先投影还是先过滤。
Cache和Buffer: 查询缓存。如果查询缓存有命中的查询结果,查询语句就可以直接去查询缓存中取数据。 这个缓存机制是由一系列小缓存组成的。比如表缓存,记录缓存,key缓存,权限缓存等
引擎层
存储引擎层,存储引擎真正的负责了MySQL中数据的存储和提取,服务器通过API与存储引擎进行通信。不同的存储引擎具有的功能不同,这样我们可以根据自己的实际需要进行选取。后面介绍MyISAM和InnoDB
存储层
数据存储层,主要是将数据存储在运行于裸设备的文件系统之上,并完成与存储引擎的交互。
当客户端提交一条SQL语句的时候,会先到缓存中进行相查询,如果没有命中,才会走SQL Interface(DML,DCL等),然后到解析器,然后到优化器,其中优化后会生成执行计划 然后在交给存储引擎,最后存储引擎在和计算机的文件系统进行交互。
mysql系统架构
1.mysql三层逻辑架构:
1层:连接处理、授权认证、安全等
2层:大多数mysql核心功能在此层,包括查询解析、分析、优化、缓存以及内置函数、所有跨存储引擎功能(存储过程、触发器、视图)都在这一层
3层:包括了存储引擎、负责MYSQL中数据存储和提取
2.连接管理和安全性:
每个客户端连接在服务器进程中拥有一个线程,这个连接的查询只会在这个单独的线程中执行,该线程只能轮流在某个CPU核心或者CPU中运行,服务器会负责缓存线程,因此不需要为每个新建的连接创建或者销毁线程
3.优化与执行:
mysql会解析查询,并创建内部数据结构(解析树),然后对其进行各种优化,包括重写查询,决定表的读取顺序,以及选择合适的索引,用户可以根据特殊关键字提示(hint)优化器,影响它的决策过程,也可以用优化器解释器(explain)优化过程的各个因素,使用户知道服务器如何进行优化决策以及提供一个参考基准。
MYSQL的存储引擎
1.InnoDB:mysql默认引擎,它被设计用来处理大量短期事务,短期事务大部分情况都是正常提交的,很少回滚。InnoDB的性能和自动崩溃修复功能,使得它在非事务存储的需求中也很流行。
2.MyISAM:mysql5.1以前的默认存储引擎,不支持行级锁和事务,崩溃后无法修复。可应用在表创建并导入数据后,不会进行修改的场景。
mysiam: 不支持事物,不支持外键,对数据的存储和批量查询的速度比较快
frm:表定义数据
MYD:表具体记录数据
MYI:索引
innodb: 牺牲存储和查询的效率,支持事物安全,支持自动增长列,对事物安全的支持
frm:
idb:数据和索引
权限表:
user表:用户对所有数据的操作
db表:
host表:
sql语句语法
原子数据定义
MySQL 8.0支持原子数据定义语言(DDL)语句。此功能称为原子DDL。原子DDL语句将与DDL操作关联的数据字典更新,存储引擎操作和二进制日志写入组合到单个原子事务中。即使服务器在操作期间停止,也会提交事务,并将适用的更改保留到数据字典,存储引擎和二进制日志中,或者回滚事务。
与表相关的DDL操作需要存储引擎支持,而非表DDL操作则不需要。目前,只有InnoDB存储引擎支持原子DDL。
受支持的表DDL语句包括 CREATE,ALTER和 DROP对数据库,表,表和索引,以及语句 TRUNCATE TABLE声明。
支持的非表DDL语句包括:
CREATE和DROP 语句,以及(如果适用)ALTER 存储程序,触发器,视图和用户定义函数(UDF)的语句。
账户管理语句: CREATE,ALTER, DROP,,如果适用, RENAME报表用户和角色,以及GRANT 和REVOKE报表。
数据库目录: /var/lib/mysql
配置文件:/usr/share/mysql-8.0(mysql.server命令及配置文件)
/etc/mysql/my.conf
集群出现故障:
reboot
丢包
poweroff poweron
亚健康,请求超时
数据异常
python2.7.10安装
https://blog.csdn.net/csnd_one/article/details/80251561
pip换源
http://www.mamicode.com/info-detail-2288373.html
git commit:是将本地修改过的文件提交到本地库中;
git push:是将本地库中的最新信息发送给远程库;
git pull:是从远程获取最新版本到本地,并自动merge;
git fetch:是从远程获取最新版本到本地,不会自动merge;
git merge:是用于从指定的commit(s)合并到当前分支,用来合并两个分支;
$ git merge -b // 指将 b 分支合并到当前分支
git pull 相当于 git fetch + git merge。