mysql 事务 引擎_mysql引擎和事务

对于应用程序和用户来说,同样一张表的数据无论用什么引擎来存储,看到的数据都是一样的,只是不同的引擎在功能、占用空间大小、读取性能等方面可能有所差别。

mysql最常用的存储引擎为Innodb、MyISAM和全文索引

5.5.5以前默认存储引擎为MyISAM,5.5.5及之后默认存储引擎为Innodb

mysql> show engines \G查看当前数据库系统支持的引擎

mysql5.5支持事务的引擎:Innodb/ndb(集群的引擎)

对于MyISAM来说,每一个表对应于磁盘上的三个文件,这三个文件名称相同,扩展名不同。

.frm文件保存表的定义(是服务器而不是MyISAM引擎的一部分),.MYD保存表的数据,.MYI是表的索引文件(可参考mysql的系统库mysql下的文件)

特点:

1.不支持事务

2.表级锁定(更新时锁定整个表),锁定的成本小,但大大降低了并发性能

3.读写互相阻塞,不仅会在写入的时候阻塞读取,还会在读取的时候阻塞写入,但是读不会阻塞另外的读

4.只会缓存索引不能缓冲数据,可以通过key_buffer_size缓存索引,减少磁盘IO,但是只会缓存索引不会缓存数据

5.读取速度较快,占用资源相对少(功能相对弱,锁的粒度大)

6.不支持外键约束,但支持全文索引

7.mysql5.5.5默认的存储引擎

适用的生产场景:单一对数据库的操作(纯读或者纯写)可以使用

1.不需要事务支持的业务(例如转账、充值就不行)

2.一般为读多或者写多的网站应用,读写都频繁的场景不适合

3.读写并发相对较低的业务(纯读纯写高并发也可以)

4.数据修改相对较少的业务

5.以读为主的业务,例如www、blog、图片信息数据库

6.对数据一致性要求不很高的业务

7.硬件资源相对较差的机器

调优精要:

1.设置合适的索引

2.调整读写优先级,根据实际需要确保重要的操作更优先执行

3.启用延迟插入改善大批量写入性能(降低写入频率)

4.尽量顺序操作,让insert数据都写入到尾部,减少阻塞

5.分解大的时间长的操作,降低单个操作的阻塞时间

6.降低并发数,某些高并发场景通过应用进行排队队列机制

7.对于相对静态(更改不频繁)的数据库数据,充分利用query cache或者mamcached缓存服务极大的提高访问效率

8.count只有在全表扫描的时候高效,带有其他条件的count都需要进行实际的数据访问

9.可以把主从同步的主库使用Innodb,从库使用MyISAM引擎(不推荐)

Innodb

特点:

1.支持事务

2.行级锁定(更新时一般锁定当前行),通过索引实现,如果进行全表扫描仍然会锁全表与MyISAM相同,注意间隙锁的影响

3.读写阻塞与事务隔离级别相关

4.具有高效的缓存特性,能缓存索引,也能缓存数据

5.整个表和主键以cluster方式存储,组成一棵平衡树

6.所有secondary index都会保存逐渐信息

7.支持分区和表空间,类似oracle数据库

8.支持外键约束,5.5以前不支持全文索引,后续支持

9.与MyISAM相比对硬件资源要求相对较高

适用场景:

1.需要事务支持的业务

2.行级锁定对高并发有很好的适应能力,但需要确保查询通过索引完成

3.数据读写及更新都较为频繁的场景,如bbs、sns、微博、微信等

4.对数据一致性要求较高的业务,例如充值转账

5.硬件设备内存大,可以利用Innodb较好的缓存能力来提高内存利用率,尽可能减少磁盘IO

6.与MyISAM引擎相比,Innodb引擎更消耗资源,速度没有MyISAM快

调优精要:

1.主键尽可能小,避免给secondary index带来过大压力

2.避免全表扫描,否则会使用表锁

3.尽可能缓存所有的索引和数据,提高响应速度,减少磁盘IO消耗

4.在大批量小插入的时候,尽量自己控制事务,而不要使用autocommit

4.合理设置innodb_flush_log_at_trx_commit,不要过度追求安全性

5.避免主键更新,这会带来大量的数据移动

事务:逻辑上的一组sql语句操作,这组sql语句执行时要么全部成功要么全部失败

事务的四大特性ACID

原子性(atomicity):事务是一个不可分割的单位,一个事务中的所有sql操作要么全部成功要么全部失败

一致性(consistency):事务发生前和发生后,事务的完整性必须保持一致

隔离性(isolation):当并发访问数据库时,一个正在执行的事务在执行完毕前,对于其他会话是不可见的,多个并发事务之间的数据是互相隔离的(mysqldump时的参数--single-transaction)

持久性(durability):一个事务一旦被提交,它对数据库中的数据改变就是永久性的,如果出了错误,事务不允许撤销,只能通过“补偿性事务”

mysql数据库的事务默认是自动提交的。如果想多条sql在一个事务中执行,则需要使用事务进行处理。如果开启一个事务没有提交,mysql会自动回滚事务,或者手动使用rollback回滚。

start transaction开启事务

rollback回滚事务

commit提交事务

mysql> show variables like '%commit%';结果为on或者off(默认为on)

表创建后修改引擎的方法

1.mysql语句修改

mysql> alter table test2 engine=MyISAM;

2.使用sed对备份内容进行引擎替换,即用mysqldump备份,使用sed对引擎做替换,再导入替换后的备份语句

3.linux命令mysql_convert_table_format修改

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/529416.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

shell mysql eof_shell EOF

1、考虑下面的需求&#xff0c;在主shell执行命令&#xff0c;进入其他的命令&#xff0c;后面的输入&#xff0c;想作为命令的输入&#xff0c;而不是主shell的输入&#xff0c;怎么办&#xff1f;2、使用<3、这里的EOF只是分界符&#xff0c;使用其他的字符也可以。4、比如…

MySQL查询实验报告_实验报告数据库的基本查询'

《实验报告数据库的基本查询》由会员分享&#xff0c;可在线阅读&#xff0c;更多相关《实验报告数据库的基本查询(5页珍藏版)》请在人人文库网上搜索。1、一、实验目的&#xff1a;通过该实验掌握应用SQL 查询数据库的基本方法&#xff0c;包括单表、多表查询。二、实验原理数…

mysql+odbc+ado_MFC ado+mysql+odbc技术分享

第一步&#xff1a;建立数据库假设有一个sql文件mysql>use dbname; //创建一个数据库名为dbname的数据库(空数据库)mysql>set names utf8; //编码&#xff0c;mysql>source D:/dbname.sql; //导入一个数据库源文件创建数据库内容我做…

mysql 5.7 window x64_window环境配置Mysql 5.7.21 windowx64.zip免安装版教程详解

1.从官网下载mysql-5.7.21-windowx64.zip mysql下载页面2.解压到合适的位置(E:mysql) 这名字是我改过的3.配置环境变量&#xff0c;将E:mysqlbin 添加到PATH中4.在mysql目录下(E:mysql) 创建 my.ini文件&#xff0c;内容如下&#xff1a;[mysql]# 设置mysql客户端默认字符集def…

mysql设置查询结果最大值_查找MySQL查询结果字段的最大值

将它连接到仅有最大计数的第二个查询。每天最内部查询(对于给定用户)每天计数的一组行数。从那以后&#xff0c;下一个外部执行从该集合中选择MAX()来查找并获得一个代表最高日数的记录...因为它总是返回一行&#xff0c;并且加入到原始的numRequest表中它将是一个笛卡尔&#…

MySQL建表两个单引号报错_极客起源 - geekori.com - 问题详情 - mysql建表报错,查手册看不懂,求解?...

创建带索引的数据库表需要为表名和属性添加反单引号&#xff0c;并且你当前的primary key的位置需要调整一下&#xff1a;create table abc(id int unsigned auto_increment,usename char(20) not null default ,gender char(1) not null default ,weight tinyint unsigned not…

js 用下标获取map值_javascript怎么获取map的值?

Map对象保存键/值对&#xff0c;是键/值对的集合。任何值(对象或者原始值) 都可以作为一个键或一个值。Object结构提供了“字符串—值”的对应&#xff0c;Map结构提供了“值—值”的对应。JavaScript获取map值示例&#xff1a;map对象如下&#xff1a;var mapObject {id1001:…

python attention机制_从零开始学Python自然语言处理(26)—— 强大的Attention机制...

前文传送门&#xff1a;在上一次面试失利后&#xff0c;我回来仔细研究了一下Attention机制&#xff0c;研究完我不禁感悟&#xff0c;这机制真的厉害啊&#xff01;因为我之前面试被问到的Encoder - Decoder框架中有个瓶颈是编码的结果以固定长度的中间向量表示&#xff0c;这…

[机器人-2]:开源MIT Min cheetah机械狗设计(二):机械结构设计

目录 1、四肢朝向的选择 2、电机布局形式的选择 3、电机的选型及测试&#xff08;非常重要&#xff09; 4、结构优化 5、尺寸效应 6、其他 1、四肢朝向的选择 机械狗的结构设计&#xff0c;第一个摆在我们面前的就说四肢的朝向问题&#xff0c;如下图&#xff0c;我们是…

python传文件给java_用java pyhont通过HTTP协议传输文件流

// 代码网上抄的 忘记链接了 抱歉哈packageupload;importjava.io.BufferedReader;importjava.io.DataOutputStream;importjava.io.FileInputStream;importjava.io.IOException;importjava.io.InputStream;importjava.io.InputStreamReader;importjava.net.HttpURLConnection;im…

mysql挪到小数点位置_mysql数据库迁移到另一个硬盘上

archliun系统mysql数据库1、对新硬盘分区与格式化1)# fdisk /dev/sdb2) # mkfs.ext4 /dev/sdb12、停止MYSQL服务systemctl stop mysqld3、对数据库文件拷贝# cp -Rp data /mnt/data/4、删除原data文件# rm -rf /data5、禁止开机自启MYSQL服务# systemctl disable mysqld6、对自…

mysql用户权限表join_MyBatis映射利用mysql left join 解决N+1查询问题

1.权限是几乎每个系统都需要的2.一般在用户请求某个url的时候&#xff0c;都需要验证用户是否拥有该url的访问权限3.最简单的权限系统需要 用户表&#xff0c;角色表&#xff0c;用户角色表&#xff0c;权限表&#xff0c;角色权限表# Host: 127.0.0.1 (Version: 5.6.22)# Date…

python 爬取贝壳网小区名称_如何使用 python 爬取全国小区名称

前言笔者在做一个 NLPNLPNLP 项目时&#xff0c;需要识别小区名&#xff0c;因此想要查询网上是否有相关的数据集。经过一番搜索后一无所获…从而决定自己来爬取这份数据。由于爬取网站的内容信息之后可能会发生变更&#xff0c;因此此处给出具体的爬虫思路&#xff0c;便于应对…

mysql hint 简书_MySQL

为满足不同数据库设计要求&#xff0c;减少数据冗余而指定设计规范&#xff0c;可称为数据库范式数据库范式呈递次规范&#xff0c;即高阶范式必然满足低阶范式越高的数据库范式意味着越严格的设计要求&#xff0c;同时数据冗余越小第一范式(1NF)&#xff1a;数据库表的每一列都…

python获取手机通知栏消息_Python编写简单的通知栏脚本启动工具

随着自己编写的脚本与安装的工具越来越多,电脑的桌面和文件夹也越来越乱了。就在前几天因为一个不小心,我把自己的一个项目给删了,所以决定将电脑整理一下。不过这一整理我很多脚本和工具的位置我就忘记了,所以决定写个小工具来快速启动一些常用的脚本或工具这里选择Python是因…

java 圆 继承_java 类的继承(转)

这个星期主要是学习了Java中类的继承问题.继承就是由已有的类创建新类,通过子类继承父类的方法,实现一些功能.下面就是老师布置作业的其中一个:定义父类圆&#xff0c;通过继承&#xff0c;获得子类球、圆锥、圆柱&#xff0c;子类具有计算体积的功能。1)新建文件夹Test1&#…

java爬虫 京东_Java爬虫实现京东物流查询

网上没有免费的接口&#xff0c;只能自己写一套了&#xff0c;参考代码如下public static JSONObject getLastInfo(String no){JSONObject jsonObjectnew JSONObject();jsonObject.put("no", no);Connection connectionJsoup.connect("http://www.jdwl.com/orde…

java list stream avg_Java 8 Stream API中的多个聚合函数

要在没有自定义收集器的情况下执行此操作(不再对结果进行流式传输),您可以这样做.它有点脏,因为它首先收集到Map< String,List< TimePeriodCalc>>然后流式传输该列表并获得平均加倍.由于你需要两个平均值,它们被收集到一个Holder或一对,在这种情况下我使用的是Abst…

java 发送邮件昵称_利用JavaMail发送QQ邮件

一、RFC882文档简单说明RFC882文档规定了如何编写一封简单的邮件(纯文本邮件)&#xff0c;一封简单的邮件包含邮件头和邮件体两个部分&#xff0c;邮件头和邮件体之间使用空行分隔。邮件头包含的内容有&#xff1a;from字段   --用于指明发件人to字段    --用于指明收件…

java没有timer类_Java中的Java.util.Timer类 - Break易站

scheduleAtFixedRate(TimerTask task, long delay, long period): java.util.Timer.scheduleAtFixedRate(TimerTask task, long delay, long period)在指定的延迟语法后开始&#xff0c;为重复的固定速率执行调度指定的任务&#xff1a;public void scheduleAtFixedRate(TimerT…