InnoDB

mysql学习笔记

跟風遠走 提交于 2020-10-28 11:25:35
【前言】以前学过mongodb,几天的学习,也算入了MySQL的门。参考下面一个网站,慢慢的系统学习一下。 一个系统的网站 (点我) 一、基础介绍   1、数据库——表——列(及其指定的数据类型)。   2、行,表中的数据是按行存储的,保存的每个记录存储在自己的行内。   3、 主键(primary key): 一列或一组列,其值能够唯一区分表中的每一行;唯一标识表中每行的这个列(或这组列)称为主键。例如我设计的(Id)。要求: ① 任意两行都不具有相同的主键值; ② 每个行都必须具有一个主键值(主键列不允许NULL值); #一个表有多个候选键,我们选择一个作为主键 CREATE TABLE student_info ( number INT PRIMARY KEY, name VARCHAR(5) '注释信息', # 注释以单引号放在,里面 sex ENUM('男', '女'), major VARCHAR(30), enrollment_time DATE ); #也可以把主键声明单独提取出来:PRIMARY KEY (列名1, 列名2, ...) #多个列组成的候选主键,必须单独列出 CREATE TABLE student_score ( number INT, subject VARCHAR(30) UNIQUE, #唯一性约束,不允许列中有相同的 score

Mysql(mysql总结)

久未见 提交于 2020-10-28 10:38:36
数据库结构( 原文 ) 在 InnoDB 存储引擎中,所有的数据都被逻辑地存放在表空间中,表空间(tablespace)是存储引擎中最高的存储逻辑单位,在表空间的下面又包括段(segment)、区(extent)、页(page): 1、.frm 文件用来描述表的格式或者说定义; 2、 .i bd 文件 数据索引、数据信息(默认所有表在一个文件中,打开 innodb_file_per_table设置按表区分 ); 同一个数据库实例的所有表空间都有相同的页大小;默认情况下,表空间中的页大小都为 16KB; 每个 16KB 大小的页中可以存放 2-200 行的记录。 索引 CREATE TABLE users( id INT NOT NULL, first_name VARCHAR( 20) NOT NULL, last_name VARCHAR( 20) NOT NULL, age INT NOT NULL, PRIMARY KEY( id), KEY(last_name, first_name, age) KEY(first_name) ); 聚集索引 B+ 树通过 B+ 树实现的就会使用 id 作为索引的键,并在叶子节点中存储一条记录中的所有信息。 所有正常的表应该有且仅有一个聚集索引(绝大多数情况下都是主键),表中的所有行记录数据都是按照聚集索引的顺序存放的。 辅助索引

MySQL基础知识回顾

∥☆過路亽.° 提交于 2020-10-28 09:14:18
Mysql 基本准备 cmd登录 mysql -rusername -ppassword 显示授权用户 show grants 创建数据库 create datebase datebase_name 展示所有数据库 show datebase 使用数据库 use database_name; 建表 create table table_name( id int(11) auto_increment, name varchar(30), primary key(id) )default charset=utf8; 展示表 show tables 删表 drop table table_name 修改表 alter table table_name 重命名表 rename table table_name to table_name 展示列 show columns form table_name 查询 基本查询 select select * from table_name; 条件查询 select where select * from table_name where id = ?; 分页查询 select limit select * from table_name limit 0,5; 查询不同行 select distinct select distinct colunm

MySQL数据库主从同步延迟分析及解决方案

邮差的信 提交于 2020-10-28 08:56:50
一、MySQL的数据库主从复制原理 MySQL主从复制实际上基于二进制日志,原理可以用一张图来表示: 分为四步走: 1. 主库对所有DDL和DML产生的日志写进binlog; 2. 主库生成一个 log dump 线程,用来给从库I/O线程读取binlog; 3. 从库的I/O Thread去请求主库的binlog,并将得到的binlog日志写到relay log文件中; 4. 从库的SQL Thread会读取relay log文件中的日志解析成具体操作,将主库的DDL和DML操作事件重放。 关于DDL和DML SQL语言共分为四大类:查询语言DQL,控制语言DCL,操纵语言DML,定义语言DDL。 DQL:可以简单理解为SELECT语句; DCL:GRANT、ROLLBACK和COMMIT一类语句; DML:可以理解为CREATE一类的语句; DDL:INSERT、UPDATE和DELETE语句都是; 二、主从复制存在的问题 1. 主库宕机后,数据可能丢失; 2. 主从同步延迟。 三、MySQL数据库主从同步延迟产生原因 原因分析 MySQL的主从复制都是单线程的操作,主库对所有DDL和DML产生的日志写进binlog,由于binlog是顺序写,所以效率很高。Slave的SQL Thread线程将主库的DDL和DML操作事件在slave中重放。DML和DDL的IO操作是随即的

B树索引最通俗易懂的介绍

余生长醉 提交于 2020-10-28 02:22:13
先来一段有莫的对话: 前几天下班回到家后正在处理一个白天没解决的bug,厕所突然传来对象的声音:   对象:xx,你有《时间简史》吗?   我:我去!妹子,你这啥癖好啊,我有时间也不会去捡屎啊!   对象:...人家说的是霍金的科普著作《时间简史》,是一本书啦!   我:哦,那我没有...   对象:人家想看诶,你明天帮我去图书馆借一本吧...   我:我明天还要改...   对象:你是不是不爱我了,分手!   我:我一大早就去~   第二天一大早我就到了图书馆,刚进门就看到一个索引牌,标识着不同楼层的功能,这样我很快能定位到我要找的目标所在的楼层了。      我到楼上后又看到每排的书架上又对书的分类进行了细分,这样我能更快的定位到我要找的书具体在哪个书架!   并且每个楼层都有一台查询终端,输入书名就能查到对应的唯一标识“索书号”,类似于P159-49/164这样的一个编码,书架上的书都是按照这个编码进行排序的!有了这个编码再去对应的书架上,很快就能找到对应的书在书架的具体位置了。      不到十分钟,我就从图书馆借好书出来了。   这么大的图书馆,我为什么能在这么短的时间内找到我要的书?如果这些书是杂乱无章的堆放,或者没有任何标识的放在书架,我还能这么快的找到吗?   这不禁让我想到了我们开发中用到的数据库,图书馆的书就类似我们数据表中的数据,楼层索引牌、书架分类标识

MyRocks及其使用场景分析

孤街浪徒 提交于 2020-10-27 18:34:10
出处:https://zhuanlan.zhihu.com/p/45652076 作者:温正湖(任职于网易杭州研究院,从事数据库内核开发) MyRocks是一种经过空间和写性能优化的MySQL数据库,为您业务的数据库选型提供一种靠谱的选择。本文主要介绍什么是MyRocks,包括其功能特性,重点讲解MyRocks相比InnoDB的优势,详细分析MyRocks适用的各种场景。 RocksDB是FaceBook基于Google开源的LevelDB实现的,使用LSM(Log-Structure Merge)树来存储数据。Facebook开发工程师对RocksDB进行了大量的开发,使其符合MySQL的插件式存储引擎框架的要求,移植到了MySQL上,并称之为MyRocks。MyRocks支持基于SQL的数据读写、锁机制、MVCC、事务、主从复制等MySQL绝大部分功能特性。从使用习惯考虑,使用MyRocks还是使用MySQL/InnoDB并没有多大区别。 经过4年多的发展,MyRocks已经成熟,开源的MySQL分支版本Percona和MariaDB已将MyRocks迁移到自己的MySQL分支中,InnoSQL作为网易的MySQL分支,目前也已支持MyRocks,具体版本为InnoSQL 5.7.20-v4,在开源的MyRocks代码基础上,我们对其做了功能优化增强、bugfix

MySQL 树形索引结构 B树 B+树

橙三吉。 提交于 2020-10-27 17:57:07
MySQL 树形索引结构 B树 B+树 如何评估适合索引的数据结构 索引的本质是一种数据结构 内存只是临时存储,容量有限且容易丢失数据。因此我们需要将数据放在硬盘上。 在硬盘上进行查询时也就产生了硬盘的I/O操作,而硬盘的I/O存取消耗的时间要比读取内存大很多。因此 数据查询的时间主要决定于I/O操作的次数 。 每访问一次节点就需要对磁盘进行一次I/O操作 。 树模型 二分查找的时间复杂度是O(log2n),是一种很高效的查询方式。在一系类树种使用二分查找的树有很多,但并不是所有树都适合作为索引的结构。 Binary Search Tree 二叉搜索树(BST) 性质: 对任意节点,左子树不为空则左子树所有节点小于或等于该节点的值 对任意节点,右子树不为空则右子树所有节点大于或等于该节点的值 但二叉搜索树不一定是"平衡的",它有可能退化成一条链表,那么他的搜索时间就变成了O(n)。 平衡二叉搜索树(AVL) 为了避免退化成一条链表,人们提出了二叉搜索树,AVL在二叉搜索树的基础上增加了约束: 每个节点的左子树和右子树的高度差不能超过1 也就是说要求节点的左右子树仍然为平衡二叉树。 常见的平衡二叉树有很多种,包括了AVL树、红黑树、数堆、伸展树。AVL树是最早提出来的自AVL树,当我们提到平衡二叉树时一般指的就是AVL树 左右平衡后就使得搜索时间复杂度能稳定在O(log2n)。

[翻译]——Zabbix: Partitioning MySQL / MariaDB database Tables in 5 min

拟墨画扇 提交于 2020-10-27 16:16:23
前言:本文是对这篇博客Zabbix: Partitioning MySQL / MariaDB database Tables in 5 min的翻译,翻译如有不当的地方,敬请谅解,请尊重原创和翻译劳动成果,转载的时候请注明出处。谢谢! 英文地址:https://bestmonitoringtools.com/zabbix-partitioning-tables-on-mysql-database 在本教程中,我们将逐步学习如何使用分区脚本(partitioning script)在MySQL或MariaDB服务器上对Zabbix数据库(history和trends表)进行分区。 Zabbix从主机采集数据并将其存储在history和trends表中,Zabbix的history表中保存原始数据(Zabbix采集的每一个值),trends表中存储每小时内的合并数据,那些数据的平均值、最小值、最大值。 Zabbix的housekeeping进程负责删除trends表和history表中的旧数据。使用delete语句从数据库删除旧数据可能对数据库性能产生负面的性能影响。因此,我们中许多人都收到过令人讨厌的警报 “ Zabbix housekeeper processes more than 75% busy ” 这个问题能够通过数据库分区方案轻松的解决

使用JDBC进行批量插入后,通过getGeneratedKeys方法获取到的插入记录的自增主键与数据库中的不符

假如想象 提交于 2020-10-27 01:39:52
1.背景 我们使用的是myabtis框架,同事在做一个批量插入的需求,需要获取到插入数据的自增id,然后做业务处理。同事在xml文件中写了 INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....),(值1, 值2,....) 这样的语句进行插入,当然xml中需要用到mybatis的一些语法和属性,但最终执行的语句就是上面写的这样。当执行完成之后,我们发现在程序中获取到的自增id是错误的。 2.解决方案 将mysql数据库的innodb_autoinc_lock_mode设置为1 来源: oschina 链接: https://my.oschina.net/u/2312080/blog/4354752

快手Java后台三面,意向已拿,复盘面试官都问了些啥?

非 Y 不嫁゛ 提交于 2020-10-26 10:51:26
快手的面试挺有挑战性的感觉哈哈哈哈,不过我觉得挺有意思的,感觉啥都能问到。(二面是10天前约的面试,差点要忘了)然后是HR面,昨天就收到offer 一面二面啥的我都忘记具体的了,就简单的总结一下 基础 int float short double long char 占字节数? int 范围?float 范围? hashcode 和 equals 的关系 深拷贝、浅拷贝区别 java 异常体系?RuntimeException Exception Error 的区别,举常见的例子 lambda 表达式中使用外部变量,为什么要 final? 集合 集合这块关注一下 1.8 的实现吧,和 1.7 相比变化了很多 Collection 有什么子接口、有哪些具体的实现 简单介绍下 ArrayList 怎么实现,加操作、取值操作,什么时候扩容? 讲一下 hashMap 原理。hashMap 可以并发读么?并发写会有什么问题? 讲一下 concurrentHashMap 原理。头插法还是尾插法?扩容怎么做? 堆是怎么存储的,插入是在哪里? 集合在迭代的过程中,插入或删除数据会怎样? 并发 线程进程和线程的区别?并行和并发的区别?了解协程么?进程间如何通信:进程 A 想读取进程 B 的主存怎么办?线程间通信?线程的生命周期有哪些状态?怎么转换?wait 和 sleep 有什么区别