InnoDB存储引擎
InnoDB存储引擎逻辑存储结构介绍
表空间:表空间是InnoDB存储引擎逻辑结构的最高层, 如果用户启用了参数 innodb_file_per_table(在 8.0版本中默认开启) ,则每张表都会有一个表空间(xxx.ibd),一个mysql实例可以对应多个表空间,用于存储记录、索引等数据。
段:分为数据段(Leaf node segment)、索引段(Non-leaf node segment)、回滚段 (Rollback segment),InnoDB是索引组织表,数据段就是B+树的叶子节点, 索引段即为B+树的非叶子节点。段用来管理多个Extent(区)。
区:表空间的单元结构,每个区的大小为1M。 默认情况下, InnoDB存储引擎页大小为16K, 即一 个区中一共有64个连续的页。
页:是InnoDB 存储引擎磁盘管理的最小单元,每个页的大小默认为 16KB。为了保证页的连续性, InnoDB 存储引擎每次从磁盘申请 4-5 个区。
行:InnoDB 存储引擎数据是按行进行存放的。
在行中,默认有两个隐藏字段(与MVCC相关):
Trx_id:每次对某条记录进行改 ...
MySQL系统数据库和工具
MySQL系统数据库和工具系统数据库Mysql数据库安装完成后,自带了一下四个数据库,具体作用如下:
数据库
含义
mysql
存储MySQL服务器正常运行所需要的各种信息 (时区、主从、用 户、权限等)
information_schema
提供了访问数据库元数据的各种表和视图,包含数据库、表、字段类型及访问权限等
performance_schema
为MySQL服务器运行时状态提供了一个底层监控功能,主要用于收集数据库服务器性能参数
sys
包含了一系列方便 DBA 和开发人员利用 performance_schema 性能数据库进行性能调优和诊断的视图
常用工具mysql该mysql不是指mysql服务,而是指mysql的客户端工具。
语法 : mysql [options] [database]选项 : -u, –user=name #指定用户名 -p, –password[=name] #指定密码 -h, –host=name #指定服务器IP或域名 -P, –port=port #指定连接端口 -e, –execute ...
MySQL事务原理和MVCC
MySQL事务原理和MVCC事务原理事务基础事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。
事务的特性(ACID):
原子性(Atomicity):事务是不可分割的最小操作单元,要么全部成功,要么全部失败。
一致性(Consistency):事务完成时,必须使所有的数据都保持一致状态。
隔离性(Isolation):数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行。
持久性(Durability):事务一旦提交或回滚,它对数据库中的数据的改变就是永久的。
其中的原子性、一致性、持久化,实际上是由InnoDB中的redo log日志和undo log日志保证的。 而持久性是通过数据库的锁和 MVCC 来保证的。
redo log重做日志,记录的是事务提交时数据页的物理修改,是用来实现事务的持久性。
该日志文件由两部分组成:
重做日志缓冲(redo log buffer):在内存中
重做日志文件(redo log):在磁盘中
当事务提交之后会把所 ...
MySQL基础
MySQL基础数据库的相关概念为什么要使用数据库:
持久化(persistence):把数据保存到可掉电式存储设备中以供之后使用。
持久化的主要作用是将内存中的数据存储在关系型数据库中,或存储在磁盘文件、XML数据文件中。
DB:数据库(Database)
即存储数据的“仓库”,其本质是一个文件系统。它保存了一系列有组织的数据。
DBMS:数据库管理系统(Database Management System)
是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库,对数据库进行统一管理和控制。用户通过数据库管理系统访问数据库中表内的数据。
SQL:结构化查询语言(Structured Query Language)
专门用来与数据库通信的语言。
关系型数据库(RDBMS):
这种类型的数据库是最古老的数据库类型,关系型数据库模型是把复杂的数据结构归结为简单的二元关系 (即二维表格形式)。
关系型数据库以 行(row) 和 列(column) 的形式存储数据,以便于用户理解。
优势:
复杂查询可以用SQL语句方便的在一个表以及多个表之间做非常复杂的数据查询。
事 ...
MySQL索引和优化
MySQL索引和优化存储引擎MySQL体系结构MySQL体系结构分为四层:
连接层:主要完成一些类似于连接处理、授权认证、及相关的安全方案。
服务层:主要是如SQL接口,并完成缓存的查询,SQL的分析和优化,部分内置函数的执行等。
引擎层:负责MySQL中数据的存储和提取,数据库中的索引是在存储引擎层实现的。
存储层:主要是将数据(如: redolog、undolog、数据、索引、二进制日志、错误日志、查询日志、慢查询日志等)存储在文件系统之上,并完成与存储引擎的交互。
存储引擎介绍建表时指定存储引擎:
12345CREATE TABLE 表名(字段1 字段1类型 [ COMMENT 字段1注释 ] ,......字段n 字段n类型 [COMMENT 字段n注释 ]) ENGINE = INNODB [ COMMENT 表注释 ] ;
查询当前数据库支持的存储引擎:
1show engines;
查询建表语句:
1show create table account;
总结:MySQL支持InnoDB、MyISAM、MEMORY、CSV、BlACKHOLE等存储引擎,MyS ...
MySQL视图存储过程和触发器
MySQL视图存储过程和触发器视图介绍视图(View)是一种虚拟存在的表。视图只保存了查询的SQL逻辑,不保存查询结果,查询视图就是查询了视图定义的SQL。
基本语法创建:
1234CREATE [OR REPLACE] VIEW 视图名称[(列名列表)] AS SELECT语句 [ WITH [CASCADED | LOCAL ] CHECK OPTION ]-- 示例create or replace view stu_v_1 as select id, name from student where id <= 10;
查询:
1234-- 查看创建视图语句:SHOW CREATE VIEW 视图名称;-- 查看视图数据:SELECT * FROM 视图名称 ......;
修改:
1234-- 方式一:CREATE OR REPLACE VIEW 视图名称[(列名列表)] AS SELECT语句 [ WITH [ CASCADED | LOCAL ] CHECK OPTION ]-- 方式二:ALTER VIEW 视图名称[(列名列表)] AS SELECT语句 [ ...
MySQL锁
MySQL锁锁概述锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除传统的计算资源(CPU、 RAM、I/O)的争用以外,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。
MySQL中的锁,按照锁的粒度分,分为以下三类:
全局锁:锁定数据库中的所有表。
表级锁:每次操作锁住整张表。
行级锁:每次操作锁住对应的行数据。
全局锁介绍全局锁就是对整个数据库实例加锁,加锁后整个实例就处于只读状态,后续的DML的写语句,DDL语句,已经更新操作的事务提交语句都将被阻塞。
其典型的使用场景是做全库的逻辑备份,对所有的表进行锁定,从而获取一致性视图,保证数据的完整性。
对数据库进行进行逻辑备份之前,先对整个数据库加上全局锁,一旦加了全局锁之后,其他的DDL、 DML全部都处于阻塞状态,但是可以执行DQL语句,也就是处于只读状态,而数据备份就是查询操作。 那么数据在进行逻辑备份的过程中,数据库中的数据就是不会发生变化的,这样就保证了数据的一致性和完整性。
一致性数据备份语法: ...
Docker搭建主从
Docker搭建主从docker搭建mysql主从拉取镜像拉取mysql5.7镜像:docker pull mysql:5.7
搭建主库1、新建主服务器容器实例3307
123456docker run -p 3307:3306 --name mysql-master \-v /mydata/mysql-master/log:/var/log/mysql \-v /mydata/mysql-master/data:/var/lib/mysql \-v /mydata/mysql-master/conf:/etc/mysql \-e MYSQL_ROOT_PASSWORD=root \-d mysql:5.7
2、进入/mydata/mysql-master/conf目录下新建my.cnf
vim my.cnf:
12345678910111213141516[mysqld]## 设置server_id,同一局域网中需要唯一server_id=101 ## 指定不需要同步的数据库名称binlog-ignore-db=mysql ## 开启二进制日志功能log-bin=mall-my ...
Activiti整合Spring
Activiti整合Spring一、Activiti与Spring整合开发1.1 Activiti与Spring整合的配置1)、在pom.xml文件引入坐标如下
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103<properties> <slf4j.version>1.6.6</slf4j.version> <log4j.version>1.2.12</log4j.version></properties><dependencies> <dependency> <groupId>org ...
Activiti工作流(二)
Activiti进阶一、流程实例什么是流程实例流程实例(ProcessInstance)代表流程定义的执行实例。
一个流程实例包括了所有的运行节点。我们可以利用这个对象来了解当前流程实例的进度等信息。
例如:用户或程序按照流程定义内容发起一个流程,这就是一个流程实例。
流程定义和流程实例的图解:
启动流程实例 并添加Businesskey(业务标识)流程定义部署在activiti后,就可以在系统中通过activiti去管理该流程的执行,执行流程表示流程的一次执行。
比如部署系统出差流程后,如果某用户要申请出差这时就需要执行这个流程,如果另外一个用户也要申请出差则也需要执行该流程,每个执行互不影响,每个执行是单独的流程实例。
启动流程实例时,指定的businesskey,就会在act_ru_execution #流程实例的执行表中存储businesskey。
Businesskey:业务标识,通常为业务表的主键,业务标识和流程实例一一对应。业务标识来源于业务系统。存储业务标识就是根据业务标识来关联查询业务系统的数据。
比如:出差流程启动一个流程实例,就可以将出差单的id作为业务标识存储 ...


