mysql常识以及存储引擎,锁和事务

常见的数据库系统:

1、甲骨文的Oracle

2、IBM的DB2

3、微软的Access和 SQL Server

4、开源PostgreSQL

5、开源MySQL

mysql数据库三阶段

初期开源数据库阶段

sun mysql阶段

oracle mysql阶段

OLTP:联机事务处理,面向基本的、日常的事务处理。

OLAP:联机分析处理,数据仓库的主要应用。

mysql分支版本(一些):

MariaDB : Maria引擎室myisam存储引擎的升级版本,增加了对Hash join的支持和Semi Join的优化,提高了查询性能,适合OLAP。

Drizzle:适合云计算组件和web应用的数据库,高并发,高效的内存使用,开放源码。

InnoSQL:1、InnoDB Flash Cache:将SSD作为Flash Cache  2、InnoDB Share Memory :将Share Memory作为InnoDB的共享内存,以此提高数据库的预热。3、IO Statistics:扩展了mysql原有的Slow log 的内容,现在可记录某SQL语句的逻辑读取和物理读取的IO

存储引擎(表类型):

InnoDB存储引擎:支持事务、回滚,主要面向OLTP,支持行锁设计、支持外键、支持类似Oracle的非锁定读。(mysql 5.5.8开始是默认存储引擎)数据放在一个独立的表空间、使用MVCC(多版本并发控制)、实现4种隔离级别,默认REPEATABLE级别、使用netx-key locking避免幻读,还有插入缓冲、二次写、自适应哈希索引、预读等。采用聚集的方式,每张表都按主键的顺序进行存储。索引和数据是紧密捆绑的,没有使用压缩从而会造成INNODB比MYISAM体积庞大不小。

使用场合:在承载的大部分项目执行insert 和update的话,应该选择InnoDB.

优势:在于提供了良好的事务管理、崩溃、修复能力和并发控制,

缺点:是其读写效率稍差,占用的数据空间相对比较大.

Myisam存储引擎:不支持事务,表锁设计,支持全文索引,主要面向OLAP,在innodb以前是默认存储引擎,它的缓冲池只缓存索引文件,而不缓存数据文件。索引和数据分开的,可以加载更多的索引,并且索引是压缩的,相对内存来说使用效率就提高不少,他使用一种表格锁定的机制,来优化多个并发读写操作。MYISAM强调了快速读取操作。

使用场合:在承载的大部分项目是读多写少的项目平台中,而MyISAM的读性能是比Innodb强不少的

优点:占用空间小,处理速度快,

缺点: 不支持事务日志的完整性和并发性

NDB存储引擎:集群存储引擎,类似于Oracle的RAC集群(share everything),其结构是share nothing集群结构。数据全部放在内存中,因此主键查找的速度极快,并能在线添加NDB存储数据节点,面向OLTP。貌似mysql集群企业应用不多,因为技术和稳定性都不太成熟。

Memory存储引擎:数据全部房子啊内存,数据库重启或崩溃,表中数据消失,适合存储OLTP应用临时表,也可以作为OLAP数据库应用的数据仓库的维度表,默认使用hash索引而不是B+索引。

优点:存储速度快

缺点:缺乏稳定性和完整性

Infobright存储引擎:第三方存储引擎,存储按照列而非行的,故适合OLAP的数据库应用

merge(mrg_myisam)存储引擎:一组myisam表的组合, 这些myisam表必须结构完全相同,使用merge表来透明地对多个表进行查询和更新操作

NTSE存储引擎:网易开发面向内部使用的,目前不支持压缩、行级缓存等特性。

BDB: 源自Berkeley DB,事务型表的另一种选择

archive: 非常适合存储大量独立的、作为历史记录的数据, 它们不经常被读取, archive拥有高效的插入速度,但对查询的支持相对较差

CSV: 逻辑上由逗号分割数据的存储引擎

BlackHole: 黑洞引擎,写入的任何数据都会消失,一般用于记录binlog, 做复制的中继。

等存储引擎!


mysql下查看存储引擎:

(1)、查询Mysql支持的引擎

Mysql->show engines;

Mysql->show engines\G;    +G和不加G两种不同的显示方式。

(2)、查询Mysql支持引擎的信息

Mysql->show variables like ‘have%’

(3)、查询Mysql默认存储引擎

Mysql-> show variables like‘storage_engine‘;

如果想修改存储引擎,可以在my.ini中进行修改

Default-storage-engine=引擎类型

修改表的存储引擎:

alter table t1 engine = innodb;


事务:

transaction(事务):

所谓事务是用户定义的一个操作序列, 这些操作要么全做要么全不做, 是一个不可分割的工作单位

在MySQL中, 事务可以是一条sql语句、一组sql语句或是整个程序

只有innodb、bdb存储引擎支持事务

show engines\G

事务的4个特性(ACID)

Note: 注意engine

原子性(Atomicity):

原子意为最小的粒子, 或者说不能再分的事物, 组成事务的所有语句要么全部执行, 要么全部取消

一致性(Consistency):

指数据在同一个事务中, 前后应保持一致

s1读数据, s2也访问同一数据, 且修改了它, s1再读, 得到的数据与刚才不一样了, 这就违反了一致性

(s1在事务中)

隔离性(Isolation):

commit前, 某个事务的操作对其他session不可见

持久性(Durability):

当事务完成后, 其影响应该保留下来, 不能撤消

事务工作原理

若dml不在事务中, s1改了, s2马上就可以看到

若dml在事务中, commit前dml并没有作用到表, 而是记录在事务日志文件中

所以其他session看不到结果

commit时, 就将记录在事务日志f文件中的dml作用到表

当执行了commit或rollback后, 这个事务就结束了


锁的介绍:

计算机协调多个进程或线程并发访问某一资源的机制

除cpu/mem/hd外, 数据(或表、一行记录)也是一种供多用户共享、争用的资源

MySQL提供了多用户并发访问数据的能力,不同的dbms均提供了并发控制功能, 不同的开发工具往往也提供了实现数据库并发控制的命令

mysql常见的三种锁级别——表级锁、页面锁、行级锁;其中表级锁有两种模式——表共享读锁和表独占写锁。

MyISAM:
表级锁。对myisam表进行读操作的时候,它不会阻塞其他用户对同一表的读请求,但会阻塞对同一表>的写操作;
对myisam表进行写操作的时候,它会阻塞其他用户对同一表的读、写请求.

innodb:
提供行锁(locking on row level),另外,InnoDB表的行锁也不是绝对的,如果在执行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表.

行级锁的优点如下:
1)当很多连接分别进行不同的查询时减小LOCK状态。
2)如果出现异常,可以减少数据的丢失。因为一次可以只回滚一行或者几行少量的数据。

行级锁的缺点如下:

1)比页级锁和表级锁要占用更多的内存。

2)进行查询时比页级锁和表级锁需要的I/O要多,所以我们经常把行级锁用在写操作而不是读操作。

3)容易出现死锁。

注意:nnodb不能确定操作的行,这个时候就使用的意向锁,也就是表锁

手动加锁

lock tables emp read|write;

unlock tables;或quit均会释放锁

flush tables with read lock; -- 所有表加读锁


图形化SQL查询分析器:

MYSQL Workbench

Toad for Mysql

Imysql-Front

其他相应工具:phpMyAdmin,navicat for mysql,mysqlQueryBrowser。

时间: 2024-09-30 17:51:50

mysql常识以及存储引擎,锁和事务的相关文章

mysql中InnoDB存储引擎的行锁和表锁

Mysql的InnoDB存储引擎支持事务,默认是行锁.因为这个特性,所以数据库支持高并发,但是如果InnoDB更新数据的时候不是行锁,而是表锁的话,那么其并发性会大打折扣,而且也可能导致你的程序出错. 而导致行锁变为表锁的情况之一就是: SQL的更新(update)或者删除(delete)语句中未使用到索引,导致在InnoDB在对数据进行相应操作的时候必须把整个表锁起来进行检索(表锁).而如果使用了索引的话,InnoDB只会通过索引条件检索数据,而只锁住索引对应的行(行锁). 下面记录一下我遇到

MySQL数据库InnoDB存储引擎中的锁机制

MySQL数据库InnoDB存储引擎中的锁机制    http://www.uml.org.cn/sjjm/201205302.asp   00 – 基本概念 当并发事务同时访问一个资源的时候,有可能导致数据不一致.因此需要一种致机制来将访问顺序化. 锁就是其中的一种机制.我们用商场的试衣间来做一个比喻.试衣间供许多消费者使用.因此可能有多个消费者同时要试衣服.为了避免冲突,试衣间的门上装了锁.试衣服的人在里边锁住,其他人就不能从外边打开了.只有里边的人开门出来,外边的人才能进去. - 锁的基本

mysql数据库之 存储引擎、事务、视图、触发器、存储过程、函数、流程控制

目录 一.存储引擎 1.什么是存储引擎? 2.mysql支持的存储引擎 3. 使用存储引擎 二.事务 三.视图 1.什么是视图 2.为什么要用视图 3.如何用视图 四.触发器 为何要用触发器 创建触发器语法 五.存储过程 六.函数 七.流程控制 八.数据库备份(运维方向) 一.存储引擎 1.什么是存储引擎? mysql中建立的库===>文件夹 库中建立的表===>文件 现实生活中我们用来存储数据的文件有不同的类型,每种文件类型对应各自不同的处理机制:比如处理文本用txt类型,处理表格用exce

mysql三:存储引擎

一 什么是存储引擎 mysql中建立的库===>文件夹 库中建立的表===>文件 现实生活中我们用来存储数据的文件应该有不同的类型:比如存文本用txt类型,存表格用excel,存图片用png等 数据库中的表也应该有不同的类型,表的类型不同,会对应mysql不同的存取机制,表类型又称为存储引擎. 存储引擎说白了就是如何存储数据.如何为存储的数据建立索引和如何更新.查询数据等技术的实现方法.因为在关系数据库中数据的存储是以表的形式存储的,所以存储引擎也可以称为表类型(即存储和操作此表的类型) 在O

转!!MySQL中的存储引擎讲解(InnoDB,MyISAM,Memory等各存储引擎对比)

MySQL中的存储引擎: 1.存储引擎的概念 2.查看MySQL所支持的存储引擎 3.MySQL中几种常用存储引擎的特点 4.存储引擎之间的相互转化 一.存储引擎: 1.存储引擎其实就是如何实现存储数据,如何为存储的数据建立索引以及如何更新,查询数据等技术实现的方法. 2.MySQL中的数据用各种不同的技术存储在文件(或内存)中,这些技术中的每一种技术都使用不同的存储机制,索引技巧,锁定水平并且最终提供广泛的不同功能和能力.在MySQL中将这些不同的技术及配套的相关功能称为存储引擎. 二.MyS

细聊MySQL的Innodb存储引擎(二)

细聊MySQL的Innodb存储引擎(一) 上一篇主要和大家探讨了下Innodb的锁机制与隔离机制.本篇来和大家一起研究下在使用Innodb是会出现的问题以及如何解决它们. Innodb是如何解决幻读问题的 什么是幻读?听起来似乎很高端,但实际上它只是反映了事务中的一种数据不一致的情况.下面看我来描述这样一个场景,通过这个场景,大家就能很清楚的知道幻读到底是什么意思. 打开两个客户端,设为A和B A客户端 mysql> start transaction; (步骤一) Query OK, 0 r

MySQL Study案例之--MySQL体系和存储引擎

MySql Study案例之--MySql体系和存储引擎 1.数据库和实例     数据库:物理操作系统文件或其他形式文件类型的集合.在MySQL中,数据库文件可以是frm.myd.myi.ibd结尾的文件.当使用NDB引擎时,数据库文件可能不是操作系统上的文件,而是存放与内存之中的文件,但是定义仍然不变.      数据库实例:由数据库后台进程/线程以及一个共享内存区组成.共享内存可以被运行的后台进程/线程所共享.需要牢记的是,数据库实例才是真正用来操作数据库文件的. 在MySQL中,实例和数

MySQL 架构组成--存储引擎

http://hongge.blog.51cto.com/ MySQL Server 系统架构 在前一节中我们学习了mysql的逻辑模块组成,接下来我们来学习mysql存储引擎. 一.mysql存储引擎介绍: MySQL在5.1(不包括)之前的版本中,存储引擎是需要在MySQL 安装的时候就必须和MySQL 一起被编译并同时被安装的. 但是从MySQL5.1 开始,MySQL AB 对其结构体系做了较大的改造,并引入了一个新的概念:插件式存储引擎体系结构.MySQL AB 在架构改造的时候,让存

mysql数据库各存储引擎比较

mysql数据库区别于其他数据库的最重要的一个特点是其插件式的表存储引擎,存储引擎是基于表的,而不是数据库 InnoDB存储引擎: 支持事务,其设计目标主要面向在线事务处理(OLTP)的应用,其特点是行锁设计.支持外键.并支持类似于oracle的非锁定读,即默认读取操作不会产生锁,其将数据放在一个逻辑的表空间中,此外,InnoDB存储引擎支持用裸设备用来建立其表空间,所谓裸设备即是是一种没有经过格式化,不被Unix通过文件系统来读取的特殊块设备文件,是不被操作系统直接管理的设备.这种设备少了操作