mysql学习

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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值