MySql—使用汇总

参考手册:https://www.docs4dev.com/docs/zh/mysql/5.7/reference/

1、概念简介

  • MySql的历史

MySql原本是一个开放源码的关系数据库管理系统,原开发者为瑞典的MySQL AB公司;
2008年,AB公司被 Sun Microsystems(太阳微系统) 公司收购。
2009年,甲骨文公司(Oracle)收购 Sun Microsystems公司,MySQL成为Oracle旗下产品。

  • MySql的衰落

MySQL分为社区版和商业版,在被Oracle收购后,一方面商业版的价格大幅调涨,另一方面社区版的GPL也在被 “失误”的情况下移除,导致MySQL社区版无法被自由使用和二次开发;且甲骨文公司不再支持另一个自由软件项目OpenSolaris的发展。

基于以上现状,导致自由软件社群们对于Oracle是否还会持续支持MySQL社群版(MySQL之中唯一的免费版本)有所隐忧,MySQL的创始人麦克尔·维德纽斯以MySQL为基础,成立分支计划MariaDB。而原先一些使用MySQL的开源软件逐渐转向MariaDB或其它的数据库。例如维基百科已于2013年正式宣布将从MySQL迁移到MariaDB数据库。

2、架构设计

2.1、存储引擎

主要为 MyISAM 引擎 和 InnoDB引擎;

InnoDB是事务型数据库的首选引擎,支持事务安全表(ACID),支持行锁定和外键,是默认的MySQL引擎。

2.2、逻辑结构

数据存储:按照表空间、段、簇(区)、页、行的层级;

表空间:一个表空间最多拥有 2^32 个页,默认情况下一个页的大小为 16KB,也就是说一个表空间最多存储 64TB 的数据。

段:表空间是由数据段、索引段、回滚段等各个段组合,段是一个逻辑的概念。一个 ibd 文件(独立表空间文件)里面会由很多个段组成。

区:每个簇(区)的大小是 1MB,即64个连续的页。一个段最少有一个区,段的扩展单位为区;

页:默认情况下一个页的大小为 16KB;这些页面在物理上和逻辑上都是连续的。

2.3、部署模式

mysql 的部署方式分为单节点模式和集群模式;集群模式按照 数据分布特点分为 :

(一)读写分离集群

该模式集群适用于 读多写少的场景,可以有一个 master主节点,多个 slave从节点;

高可用的表现:当主节点宕机无法提供服务时,将提升从节点为主节点保障数据库系统的稳定;

每个节点数据量都是一致的,通过数据冗余来实现主从分离,读写分离;当主节点的数据量很大时,将不再适用;

(二)分库分表集群

该集群模式适用于十几亿数据量级的应用,不支持高可用,某个节点宕机部分数据将不可用;

每个节点的数据通过分片机制来实现数据分发,一般有范围分片和hash分片:
A:范围分片

优点:结构简单,扩展容易;
缺点:容易造成数据分布不均衡,部分节点压力大;

B:hash分片

优点:数据分布均衡;
缺点:节点规模扩展困难,因此一般该种分片模式需要提前评估好需要的节点;

(三)主流架构集群

在这里插入图片描述

该类型的集群模式是将 读写分离的设计和分片机制想结合的架构方式;

该种集群下,按照不同的角色,分为不同的节点类型:

  • 管理节点

MySQL集群的管理者,起到联系并管理整体架构的作用,控制其他节点的启停,监控其他节点的状态,一个集群中只有一个管理节点;

  • 数据节点

该类型的节点负责数据的存储;每个节点都会存储所有数据,当某个节点宕机是可以有其他节点来继续承担对应功能;

  • sql 节点

负责于web程序进行交互,承接来自上层应用的sql命令,主要对外提供sql功能;

3、操作汇总

3.0、字符集

Mysql 中在建库和建表过程中,可以显式指定 character 和 collate 两种属性值;
character 建议使用 utf8mb4,collate 建议设置为 utf8mb4_bin;

character的两种值,utf8mb3 和 utf8mb4的区别?

"utf8mb3"以前被称为普通的UTF-8,在这个编码中最多支持3个字节来表示Unicode字符,可以表示Unicode字符的范围是从U+0000到U+FFFF。
"utf8mb4"是对"utf8mb3"的扩展,支持使用最多4个字节表示Unicode字符,支持的Unicode的范围为从U+0000到U+10FFFF。

数据类型

数据大类字段类型说明
布尔型true值域 1
布尔型false值域 0
日期型date
日期型datetime
日期型timestamp
字符型char / binary256个字符
字符型varchar / varbinary最大65535个字符
字符型text / blob最大65535个字符
字符型longtext / longblob最大exp(2,24)-1个字符
数值型numeric不会丢失精度
数值型decimal不会丢失精度
数值型float某些场景下会丢失精度
数值型double某些场景下会丢失精度

3.1、DDL相关

  • 创建/删除库
use mysql;

create database|schema <if not exists> $db_name;

drop database|schema <if exists> $db_name;

说明:因为在mysql中schema和database概念等同,所以此处建库关键词可以使用 database或schema都可以;

  • 表创建/删除

mysql 分区类型支持 range、list、hash 三类,分区列支持多列;

mysql中对象的数据量规划,正常单表数据量控制在200~500万以内,阿里的建议是500万,腾讯后面建议2000万;

3.2、DCL相关

  • 创建用户
create user $user_name identified by 'password';

drop user $user_name;
  • 授权/回收
use $target_db;

grant all privileges on $target_db to $target_role@'%';

revoke all on $target_db from $target_role; 

说明:以上授权方式可能会报错:ERROR 1142 (42000): CREATE command denied to user 'webadmin'@'localhost' for table 'aaa'

改为如下的语句:
grant all privileges on $target_db.* to $target_role@'%';

  • 权限查看
show grants for user_name;

3.3、DML相关

mysql不支持 full join 全外关联的语法;

3.4、DQL相关

系统表/视图

  • information_schema.schemata 查询数据库

  • information_schema.tables 查询表

  • information_schema.columns 查询列信息(包含数据类型和字段描述)

  • information_schema.views 查询视图

  • information_schema.view_table_usage 查询视图依赖的表

  • information_schema.TABLE_PRIVILEGES 查询表的权限

  • information_schema.table_constraints 查询表约束

  • information_schema.key_column_usage 查询约束列

  • 版本查询

select version();
  • 查询 schema/db
# 查询当前database
select database();

  • 当前用户
    select current_user();

  • 查询表清单
    SHOW [FULL] TABLES [{FROM | IN} db_name] [LIKE 'pattern' | WHERE expr]

  • 查看DDL

show create table database.object_name;
  • 多表关联
    场景:多表关联报错信息
    SQL Error [1267] [HY000]: Illegal mix of collations (utf8mb4_0900_ai_ci,IMPLICIT) and (utf8mb4_general_ci,IMPLICIT) for operation '='

报错原因:关联字段使用了不同的字符集排序规则(collation)导致的。具体来说,一个表使用 utf8mb4_0900_ai_ci,另一个表使用 utf8mb4_general_ci。

解决方法:

SELECT t.link_name,
       t.source_server_id,
       s.server_name
  FROM T_CTL_INTEGRATION_LINK t
  left join t_ctl_server s
    on (t.source_server_id COLLATE utf8mb4_0900_ai_ci = s.server_id COLLATE
        utf8mb4_0900_ai_ci)
 where 1 = 1;

3.5、对象使用

3.5.2、索引

1)mysql 索引只支持普通btree索引;
2)索引只作用表上,不同表上索引可以重名;

3.5.3、函数

  • cast(colValue , datatype)
    这个函数比较奇快,对于转换前后一致的数据类型貌似会报错;

4、运维监控

============================================== over ==============================================

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值