存储引擎

mysql的锁

扶醉桌前 提交于 2020-01-28 19:16:22
mysql的锁 一、锁的分类: 锁粒度: 表级锁 (mysam) 行级锁 (innodb) 用途: 读锁:共享锁,只读不可写(包括当前事务,当前会话中的其他表不可以更新、) ,多个读互不阻塞 写锁:独占锁,排它锁,写锁会阻塞其它事务(不包括当前事务)的读和它锁 实现 : 存储引擎:自行实现其锁策略和锁粒度 服务器级:实现了锁,表级锁,用户可显式 请求分类: 隐式锁:由存储引擎自动施加锁 显式锁:用户手动请求 二、锁的策略 ​ 在锁粒度及数据安全性寻求的平衡机制 三、锁的使用示例 3.1 显式使用锁 3.1.1 表锁: 加锁 LOCK TABLES tbl_name [[AS] alias] lock_type [, tbl_name [[AS] alias] lock_type] … lock_type: READ , WRITE Database changed MariaDB [ hellodb ] > lock table students read ; Query OK , 0 rows affected ( 0.00 sec ) MariaDB [ hellodb ] > grant all privileges on hellodb . * to 'a' @' 192.168 . % ' identified by ' a '; ERROR 1100 (HY000):

MySQL 常见的两种存储引擎

纵然是瞬间 提交于 2020-01-26 14:26:46
  MySQL两种常见的存储引擎有:MyISAM 和 InnoDB,两者区别如下: 1、count运算:MyISAM 有缓存表的 meta-data 元数据,元数据包括行数等,因此其做 COUNT(*) 查询时不需要消耗多少资源。而 InnoDB 就没有这个缓存。 2、事务和崩溃后的安全恢复:MyISAM强调的是性能,每次查询具备原子性,执行速度比 InnoDB 更快,但是 MyISAM 不提供事务的支持。而 InnoDB 支持事务、外部键等高级数据库功能。具有事务提交(commit)、回滚(rollback)和崩溃修复(crash recovery capabilities)的事务安全(transaction-safe (ACID compliant))型表。 3、支持外键:InnoDB支持,MyISAM 不支持。   MyISAM更适合读密集的表,而InnoDB更适合写密集的的表。 在数据库做主从分离的情况下,经常选择MyISAM作为主库的存储引擎。 一般来说,如果需要事务支持,并且有较高的并发读取频率(MyISAM的表锁的粒度太大,所以当该表写并发量较高时,要等待的查询就会很多了),InnoDB是不错的选择。如果你的数据量很大(MyISAM支持压缩特性可以减少磁盘的空间占用),而且不需要支持事务时,MyISAM是最好的选择。 来源: https://www.cnblogs

MySQL8.0新特性【转】

China☆狼群 提交于 2020-01-26 11:50:32
Server层,选项持久化 mysql> show variables like '%max_connections%'; +------------------------+-------+ | Variable_name | Value | +------------------------+-------+ | max_connections | 512 | | mysqlx_max_connections | 100 | +------------------------+-------+ 2 rows in set (0.00 sec) mysql> set persist max_connections=8000; Query OK, 0 rows affected (0.00 sec) mysql> show variables like '%max_connections%'; +------------------------+-------+ | Variable_name | Value | +------------------------+-------+ | max_connections | 8000 | | mysqlx_max_connections | 100 | +------------------------+-------+ 2 rows

MySQL事务和锁的相关概念

断了今生、忘了曾经 提交于 2020-01-26 11:38:47
大家肯定都打过游戏,对于一个游戏通关来说,通了就是通了,没通就是没通。 那对于事务来讲,一组 SQL 语句全部执行成功才是成功,只要有一个 SQL 语句执行失败,整个就崩掉了。 1)事务的概念 2)事务的特性 3)事务的隔离级别 4)锁 5)一些事务相关的 SQL 语句 6) MySQL 中常使用的引擎 1、什么是事务 事务是有一条或者是多条对数据库操作的SQL组成的一个不可分割的单元, 只有当事务中的所有的操作都正常执行时,整个事务才提交给数据库 1)事务是一组SQL语句的执行,要么全部执行成功,要么全部执行失败, 不能出现部分成功和失败,保证原子操作 2)事务中所有的数据执行成功,才能提交( commit )事务,把结果写入磁盘 3)事务在执行过程中,有的SQL出现了错误,那么事务必须回滚( rollback ) 到最初的状态 当一个事务正确提交后,那个值才会刷新到磁盘上。 2、事务的一些性质 事务的ACID特征: 一个事务必须满足以下4个特征: A(Atomic):原子性 事务是一个不可分割的整体,事务必须具有原子特性,当数据发生变更时,要么全部成功,要么全部失败,不存在部分成功和失败 通关与未通关 C(Consistency):一致性 一个事务的执行前后,数据库中的数据必须保持一致性的特征。 I(Isolation):隔离性 当两个或者多个事务进行并发操作时

MySQL开发规范

只愿长相守 提交于 2020-01-24 15:25:01
MySQL开发规范 基于阿里数据库设计规范扩展而来 : https://yq.aliyun.com/articles/709387 参考,58到家MySQL军规升级版 : https://www.jianshu.com/p/c077581693fb 基础规范 表存储引擎必须使用InnoDB MySQL常见的三种存储引擎(storage_engine) : InnoDB、MyISAM、MEMORY 存储引擎就是指 表的类型以及表在计算机上的存储方式 通过“SHOW ENGINES”语句来查看 MySQL中的存储引擎 特性 innoDB MyISAM Memory 事务安全 支持 无 无 存储限制 64T 有 有 空间使用 高 低 低 内存使用 高 低 高 插入数据的速度 低 高 高 读取数据的速度 低 高 高 对外键的支持 支持 无 无 全文索引 不支持 支持 InnoDB存储引擎 InnoDB给MySQL的表提供了 事务处理 、 回滚 、 崩溃修复能力 和 多版本并发控制 的事务安全 InnoDB存储引擎总支持 AUTO_INCREMENT 。自动增长列的值不能为空,并且值必须唯一。MySQL中规定自增列必须为主键 InnoDB还支持 外键(FOREIGN KEY) 。外键所在的表叫做子表,外键所依赖(REFERENCES)的表叫做父表,父表中被子表外键关联的字段必须为主键。

MySQL两种存储引擎: MyISAM和InnoDB 简单总结

我是研究僧i 提交于 2020-01-21 00:16:47
MyISAM是MySQL的默认数据库引擎(5.5版之前),由早期的ISAM(Indexed Sequential Access Method:有索引的顺序访问方法)所改良。虽然性能极佳,但却 有一个缺点:不支持事务处理(transaction) 。不过,在这几年的发展下,MySQL也导入了InnoDB(另一种数据库引擎),以强化参考完整性与并发违规处理机制,后来就逐渐取代MyISAM。 InnoDB,是MySQL的数据库引擎之一,为MySQL AB发布binary的标准之一。InnoDB由Innobase Oy公司所开发,2006年五月时由甲骨文公司并购。与传统的ISAM与MyISAM相比,InnoDB的最大特色就是支持了ACID兼容的事务(Transaction)功能,类似于PostgreSQL。目前InnoDB采用双轨制授权,一是GPL授权,另一是专有软件授权。 MyISAM和InnoDB两者之间有着明显区别,简单梳理如下: 1) 事务支持 MyISAM不支持事务,而InnoDB支持。InnoDB的AUTOCOMMIT默认是打开的,即每条SQL语句会默认被封装成一个事务,自动提交,这样会影响速度,所以最好是把多条SQL语句显示放在begin和commit之间,组成一个事务去提交。 MyISAM是非事务安全型的,而InnoDB是事务安全型的,默认开启自动提交,宜合并事务,一同提交

初识MariaDB存储引擎

﹥>﹥吖頭↗ 提交于 2020-01-20 07:01:45
在看MariaDB的存储引擎之前,可以先了解MySQL存储引擎。 MySQL常用的存储引擎: MyISAM存储引擎:是MySQL的默认存储引擎。MyISAM不支持事务、也不支持外键,但其访问速度快,对事务完整性没有要求。 MyISAM表还支持3中不同的存储格式: 1 静态表 2 动态表 3 压缩表 静态表是默认的存储格式,静态表中的字段都是非变长的字段,优点是:存储非常迅速,容易缓存,出现故障容易恢复;缺点是:占用的空间通常比动态表多。(注意: 在存储时,列的宽度不足时,用空格补足,当时在访问的时候并不会得到这些空格) 动态表的字段是变长的,优点是:占用的空间相对较少,但是频繁地更新删除记录会产生碎片,需要定期改善性能,并且出现故障的时候恢复相对比较困难。 压缩表占用磁盘空间小,每个记录是被单独压缩的,所以只有非常小的访问开支。 MyISAM表存储为三个文件: .frm 文件存储表定义。数据文件的扩展名为 .MYD (MYData)。索引文件的扩展名是 .MYI (MYIndex) InnoDB存储引擎:提供了具有提交、回滚和崩溃恢复能力的事务安全。但是比起MyISAM存储引擎,InnoDB写的处理效率差一些并且会占用更多的磁盘空间以保留数据和索引。 MEMORY(heap)存储引擎:memory实际是heap的替代品。使用存在内存中的内容来创建表

漫谈MySQL体系结构[转]

落爺英雄遲暮 提交于 2020-01-20 01:47:38
背景 了解MySQL的架构图,对MySQL有一个整体的把握,对于以后深入理解MySQL是有很大帮助的。比如:很多查询优化工作实际上就是遵循一些原则让MySQL的优化器能够按照预想的合理方式运行。 MySQL从概念上分为四层,如下图: 这四层自顶向下分别是 网络连接层,服务层(核心层),存储引擎层,系统文件层 。 我们自顶向下开始讲解。 网络接入层 作用 主要负责 连接管理、授权认证、安全 等等。每个客户端连接都对应着服务器上的一个线程。服务器上维护了一个线程池,避免为每个连接都创建销毁一个线程。当客户端连接到MySQL服务器时,服务器对其进行认证。可以通过用户名与密码认证,也可以通过SSL证书进行认证。登录认证后,服务器还会验证客户端是否有执行某个查询的操作权限。这一层并不是MySQL所特有的技术。 为什么要设计成线程池? 在服务器内部,每个client都要有自己的线程。这个连接的查询都在一个单独的线程中执行。想象现实场景中数据库访问连接实在是太多了,如果每次连接都要创建一个线程,同时还要负责该线程的销毁。对于系统来说是多么大的消耗。由于线程是操作系统宝贵的资源。这时候线程池的出现就显得自然了,服务器缓存了线程,因此不需要为每个Client连接创建和销毁线程。 服务层 作用 第二层服务层是MySQL的核心,MySQL的核心服务层都在这一层, 查询解析,SQL执行计划分析

存储引擎-Bitcast

眉间皱痕 提交于 2020-01-20 00:45:56
Bitcast是一种日志型的基于hash表结构的健值对的存储系统,最早追溯于Riak分布式数据库。 目前,Berkeley DB,Tokyo Cabinet,Innostore都使用了这种存储引擎。使用这种引擎拥有以下优点: 比较低的读写时延。 比较高的随机写吞吐率。 能够控制更大的数据库。 容易备份和恢复。 相对简单,容易理解。 可预计的高访问压力情况。 Bitcast只支持追加操作(Append-only),即所有的写操作只追加而不修改老的数据,每个文件都有一定的大小限制,当文件增加到相应的大小,就会产生一个新的文件,老的文件只读不写。在任意时刻,只有一个文件是可写的,用于追加数据,被称为活跃数据文件(active data file)。而其它已经达到大小限制的文件,被称为(older data file)。 活跃数据文件仅支持追加写入,因此所有的写入操作都是串形化的而不用磁盘随机定位。写入的健值对格式如下: 健值对的删除也是追加写的方式写入活动数据文件中,真正的删除会在下一次的数据合并中进行, 合并操作是定时对所有的旧数据文件进行扫描并生成新的数据文件(其本质是将同一个Key的多个操作进行合并。) 在Bitcast模型中,使用了Hash表的索引结构。除了存储在磁盘的数据文件,还有内存中的Hash表,通过Hash表中的key值可以快速地定位到磁盘中的数据。大致结构如下图所示:

mysql基础篇-引擎区别

孤人 提交于 2020-01-19 19:33:00
引擎是什么? MySQL中的数据用各种不同的技术存储在文件(或者内存)中。这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。通过选择不同的技术,你能够获得额外的速度或者功能,从而改善你的应用的整体功能。 在文件系统中,MySQL将每个数据库(也可以称之为schema)保存为数据目录下的一个子目录。创建表时,MySQL会在数据库子目录下创建一个和表同名的.frm文件保存表的定义。例如创建一个名为 MyTable的表,MySQL会在MyTable.frm文件中保存该表的定义。 因为MySQL使用文件系统的目录和文件来保存数据库和表的定义,大小写敏感性和具体的平台密切相关。在Windows中,大小写是不敏感的;而在类Unix中则是敏感的。不同的存储引擎保存数据和索引的方式是不同的,但表的定义则是在MySQL服务层统一处理的。 查看引擎 show engines; Engine Support Comment Transactions XA Save point InnoDB DEFAULT Supports transactions, row-level locking, and foreign keys YES YES YES MRG_MYISAM YES Collection of identical MyISAM tables NO