MyISAM

MySQL 笔记整理(1) --基础架构,一条SQL查询语句如何执行

烂漫一生 提交于 2020-04-27 20:59:09
最近在学习林晓斌(丁奇)老师的《MySQL实战45讲》,受益匪浅,做一些笔记整理一下,帮助学习。如果有小伙伴感兴趣的话推荐原版课程,很不错。 1) --基础架构,一条SQL查询语句如何执行 MySQL大体来说可以分为 Server层 和 存储引擎层 两部分. Server层 包括:连接器,查询缓存,分析器,优化器,执行器等,涵盖MySQL的大多数核心服务功能,以及所有的内置函数(如日期,时间,数学和加密函数等),所有跨存储引擎的功能在这一层实现,比如实现存储过程,触发器,视图等。 存储引擎层 :负责数据的存储和提取,其架构模式是插件式的,支持如InnoDB,MyISAM,Memory等多个存储引擎,现在最常用的存储引擎是InnoDB,它从MySQL5.5.5版本开始成为了默认存储引擎。 不同的存储引擎共用一个Server层。 连接器:连接器负责跟客户端建立连接,获取权限,维持和管理连接。(另:如果连接器认证通过,会到权限表里查出连接者的权限,之后这个连接里的操作权限都依赖于查出权限。也就是说如果Admin修改了某个用户的权限,只有当该用户重新建立连接才会生效。) 查询缓存:MySQL拿到一个查询请求后,会先去查询缓存中查看是否之前执行过这个条语句,如果可以找到就将结果直接返回。否则Mysql就进行后面的执行阶段。(Mysql8.0版直接将查询缓存功能删掉了。即使是之前的版本

MySQL数据库-表操作-SQL语句(二)

久未见 提交于 2020-04-27 19:39:46
1. MySQL多表查询 1.1 外键约束 为了消除多张表查询出现的笛卡尔积的现象,MySQL在建表并进行多表之间的关键查询可以使用外键关联查询。 外键 :从表1(sub)的某列引用(ref)另外一个表2(main)的某列的值,把表1的这列叫做表2这列的外键。 1.2 外键的设置使用 比如上述最简单的员工(employee)和部门表(department),设置外键dept_id与id相关联。 步骤如下: ①在多方表中设置fk外键,使用外键dept_id关联一方表中的主键id,并选择好参考表; ②修改选项设置中的存储引擎为InnoDB,支持设置外键操作; 注意: 在MySQL中,InnoDB支持事务和外键.MyISAM 不支持事务和外键 。 上述操作也可以使用SQL语句方式修改存储引擎为InnDB: ALTER TABLE 表名 ENGINE='InnoDB' ; 如在命令行界面输入如下语句: 同样使用SQL语句创建外键关联: ALTER TABLE employee ADD CONSTRAINT employee_fk( 外键名 ) FOREIGN KEY (dept_id) REFERENCES dept(dept_id); 1.3 连接查询分类 连接查询总的分类可以用一张图来简单描述,主要分为外连接查询( 左外连接、右外连接、全连接 )、内连接查询( 内连接、自连接 )。 1

MySQL5.7.20源码安装以及pt-query-digest用法示例

我们两清 提交于 2020-04-27 19:35:49
MySQL5.7.20源码安装 1.下载解压 cd /data/app/mysql5.7 wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.20.tar.gz tar -zxvf mysql-5.7.20.tar.gz 2.添加mysql用户组并添加mysql用户,并且不允许登录 groupadd mysql useradd -r -g mysql -s /bin/false -M mysql 3.创建安装目录 mkdir -p /data/app/mysql5.7/{data,boost} 4.cmake配置 cmake . -DCMAKE_INSTALL_PREFIX=/data/app/mysql5.7 -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DENABLED_LOCAL_INFILE=ON -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_FEDERATED_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITHOUT_EXAMPLE_STORAGE_ENGINE=1

Mysql--存储引擎

一个人想着一个人 提交于 2020-04-27 11:12:41
一.存储引擎简介 1、文件系统: 1.1 操作系统组织和存取数据的一种机制。 1.2 文件系统是一种软件。 2、文件系统类型:ext2 3 4 ,xfs 数据 2.1 不管使用什么文件系统,数据内容不会变化 2.2 不同的是,存储空间、大小、速度。 3、MySQL引擎: 可以理解为,MySQL的“文件系统”,只不过功能更加强大。 4、MySQL引擎功能: 除了可以提供基本的存取功能,还有更多功能事务功能、锁定、备份和恢复、优化以及特殊功能 总之,存储引擎的各项特性就是为了保障数据库的安全和性能设计结构。 二.MySQL自带的存储引擎类型 MySQL 提供以下存储引擎: 01)InnoDB 02)MyISAM 03)MEMORY 04)ARCHIVE 05)FEDERATED 06)EXAMPLE 07)BLACKHOLE 08)MERGE 09)NDBCLUSTER 10)CSV 还可以使用第三方存储引擎: 01)MySQL当中插件式的存储引擎类型 02)MySQL的两个分支 03)perconaDB 04)mariaDB #查看当前MySQL支持的存储引擎类型 mysql> show engines; +--------------------+---------+----------------------------------------------------------

MySQL Replication--GTID基础

守給你的承諾、 提交于 2020-04-27 06:36:22
====================================== TID(Trasaction ID) TID代表实例上已经提交的事务数量,并随着事务提交递增 UUID代表MYSQL实例的唯一表示 GTID(Global Trasaction ID) GTID由MYSQL实例的UUID+已提交事务的TID组成,代表一个全局唯一的编号。 GTID的出现用来解决复制中一个事务在多个节点的binlog文件和位置不一样的问题,当主库发生故障切换后,复制的备库需要与新主库进行关联,使用master_log_file和master_log_pos来重新配置从库变得复杂困难,而基于GTID复制,备库无需关心GTID的位置,直接使用下面语句即可用轻松完成主库切换后的从库配置。: CHANGE MASTER TO MASTER_HOST= ' xxx ' , MASTER_AUTO_POSITION 在MySQL 5.6版本中引入GTID,使用gtid_mode参数来开启或关闭GTID特性,但在MySQL 5.7版本中引入 Anonymous_Gtid的二进制日志event类型,即使在MySQL 5.7版本中停用GTID特性,也会在事务开始前创建一个Anonymous_Gtid。 ====================================== 使用GTID限制 1

2020最新Java工程师面试题-MySQL篇(附答案)

你。 提交于 2020-04-26 17:36:51
1、MySQL 中有哪几种锁? 1、表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最 高,并发度最低。 2、行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最 低,并发度也最高。 3、页面锁:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表 锁和行锁之间,并发度一般。 2、MySQL 中有哪些不同的表格? 共有 5 种类型的表格: 1、MyISAM 2、Heap 3、Merge 4、INNODB 5、ISAM 3、简述在 MySQL 数据库中 MyISAM 和 InnoDB 的区别 MyISAM: 不支持事务,但是每次查询都是原子的; 支持表级锁,即每次操作是对整个表加锁; 存储表的总行数; 一个 MYISAM 表有三个文件:索引文件、表结构文件、数据文件; 采用菲聚集索引,索引文件的数据域存储指向数据文件的指针。辅索引与主索引 基本一致,但是辅索引不用保证唯一性。 InnoDb: 支持 ACID 的事务,支持事务的四种隔离级别; 支持行级锁及外键约束:因此可以支持写并发; 不存储总行数: 一个 InnoDb 引擎存储在一个文件空间(共享表空间,表大小不受操作系统控制, 一个表可能分布在多个文件里),也有可能为多个(设置为独立表空,表大小受 操作系统文件大小限制,一般为 2G),受操作系统文件大小的限制; 主键索引采用聚集索引

面试官邪魅一笑:MySQL千万级别大表,你要如何优化?

为君一笑 提交于 2020-04-26 14:00:55
本博客强烈推荐: Java电子书高清PDF集合免费下载 https://www.cnblogs.com/yuxiang1/p/12099324.html 当MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化: 单表优化 除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑、部署、运维的各种复杂度,一般以整型值为主的表在千万级以下,字符串为主的表在五百万以下是没有太大问题的。而事实上很多时候MySQL单表的性能依然有不少优化空间,甚至能正常支撑千万级以上的数据量: 字段 尽量使用 TINYINT 、 SMALLINT 、 MEDIUM_INT 作为整数类型而非 INT ,如果非负则加上 UNSIGNED VARCHAR 的长度只分配真正需要的空间 使用枚举或整数代替字符串类型 尽量使用 TIMESTAMP 而非 DATETIME , 单表不要有太多字段,建议在20以内 避免使用NULL字段,很难查询优化且占用额外索引空间 用整型来存IP 索引 索引并不是越多越好,要根据查询有针对性的创建,考虑在 WHERE 和 ORDER BY 命令上涉及的列建立索引,可根据 EXPLAIN 来查看是否用了索引还是全表扫描 应尽量避免在 WHERE 子句中对字段进行 NULL 值判断,否则将导致引擎放弃使用索引而进行全表扫描

mysql数据类型整理

南笙酒味 提交于 2020-04-26 07:38:30
电脑的基本数据容量单位。 电脑的一个字节等于8位,也就是1byte=8bit。 字节是计算机信息技术用于计量存储容量的一种计量单位,也表示一些计算机编程语言中的数据类型和语言字符。 bit中文名称是位,音译“比特”,是用以描述电脑数据量的最小单位。 计算机容量单位的换算关系是: 1Byte=8bit, 1KB=1024B ,1MB=1024KB ,1GB=1024MB ,1TB=1024GB ,1PB=1024TB ,1EB=1024PB ,1ZB=1024EB ,1YB=1024ZB。 二进制转十进制。 把各个为拆开。乘以2的次幂。末尾位乘2的0次幂。依次类推。 比如:10010111 十进制=1*2^7+0*2^6+0*2^5+1*2^4+0*2^3+1*2^2+1*2+1*2^0 ; PS:末尾位是2的零次幂,所以是1。 字符与字节。 字符是指计算机中使用的文字和符号,比如1、2、3、A、B、C、~!·#¥%……—*()——+、等等。 UTF-8编码:一个英文字符等于一个字节,一个中文(含繁体)等于三个字节。中文标点占三个字节,英文标点占一个字节。 Unicode编码:一个英文等于两个字节,一个中文(含繁体)等于两个字节。中文标点占两个字节,英文标点占两个字节。 数据表:也就是建立列的过程,数据是以文件的形式放在硬盘(也有的放在内存中) 列:不同的列类型占得空间不一样

MySQL 数据库设计总结

荒凉一梦 提交于 2020-04-26 05:52:58
转至:https://cloud.tencent.com/developer/article/1004367 规则1 :一般情况可以选择MyISAM存储引擎,如果需要事务支持必须使用InnoDB存储引擎。 注意:MyISAM存储引擎 B-tree索引有一个很大的限制:参与一个索引的所有字段的长度之和不能超过1000字节。另外MyISAM数据和索引是分开,而InnoDB的数据存储是按聚簇(cluster)索引有序排列的,主键是默认的聚簇(cluster)索引,因此MyISAM虽然在一般情况下,查询性能比InnoDB高,但InnoDB的以主键为条件的查询性能是非常高的。 规则2 :命名规则。 数据库和表名应尽可能和所服务的业务模块名一致 服务与同一个子模块的一类表应尽量以子模块名(或部分单词)为前缀或后缀 表名应尽量包含与所存放数据对应的单词 字段名称也应尽量保持和实际数据相对应 联合索引名称应尽量包含所有索引键字段名或缩写,且各字段名在索引名中的顺序应与索引键在索引中的索引顺序一致,并尽量包含一个类似idx的前缀或后缀,以表明期对象类型是索引。 约束等其他对象也应该尽可能包含所属表或其他对象的名称,以表明各自的关系 规则3 :数据库字段类型定义 经常需要计算和排序等消耗CPU的字段,应该尽量选择更为迅速的字段,如用 TIMESTAMP (4个字节,最小值1970-01-01 00

详解MariaDB数据库的事务

这一生的挚爱 提交于 2020-04-25 18:34:50
1.什么是事务 数据库事务:(database transaction): 事务是由一组SQL语句组成的逻辑处理单元,一组事务中的SQL语句要不全部执行成功功;如果其中某一条执行失败,则这组SQL语句中已经执行的语句会回滚到这组SQL语句执行之前的状态。 事务处理,可以确保非事务性单元的多个操作都能成功完成,否则不会更新数据资源。 数据库默认事务是自动提交的, 也就是发一条 sql 它就执行一条。如果想多条 sql 放在一个事务中执行,则需要使用事务进行处理。 当我们开启一个事务,并且没有提交,可以使用 rollback 命令手动回滚事务。 优点: 通过将一组操作组成一个事务执行时,要么全部成功,要么全部失败的单元。 使程序更可靠,简化错误恢复。 例如,A用户给B用户转账1000元,此时表现在SQL语句上,就是先更新A账户在的余额,减去1000,然后再更新B账户的余额,加上1000。以上操作对应数据库为两个update操作,这两个操作属于一个事物。否则,万一当数据库在减去A账户上的钱,而还没来得及在B账户加上1000时,数据库出现故障,此时就会出现这1000元钱消失的悲剧,这时数据库的事务就派上用场了。 2. 事务四大特性 事务是必须满足4个条件(ACID): 2.1 原子性(Autmic) 事务在执行时,要做到“要么不做,要么全做!”,就是说不允许事务只执行其中一部分。