MySQL事务管理及存储引擎 《浪姐》万茜点赞宁静、郁可唯黑贴坐实?盗号者和程序员是背锅侠 程序员被公司辞退12天后,前领导要求回公司讲清代码,结果懵了 易语言大漠多线程foobar在游戏多窗口中时时显示输出信息 非科班,自学两年,复盘两个月,侥幸拿到头条、阿里offer 2020年全国数学建模大赛B题源代码以及模型的建立 (2) 2020年数学建模-校园供水系统智能管理 windows破解锁屏密码(亲测有效:再也不怕别人锁屏防你啦!) 清华大佬力荐的JVM学习路线+实战笔记+阿里真题,嚼碎吃透吊打面试官 打造多模块+高可用+高扩展Spring Cloud版分布式电商项目源码分享 Python爬虫入门教程 89-100 定个小目标,先用Python爬个一亿B站用户 五大分布式事务,你了解多少? 2020-09-12 九大核心专题,630页内容,熬夜23天吃透,我收割了3个大厂offer 防抖节流 防抖和节流 函数节流 debounce throttle 每天补充一点 一些零碎的小知识点 JavaScript作用域和作用域链知多少 01-jquery概述 简单概述JSONP原理 02-$符号-jquery与js相互转换 遇见 vue.js --------阿文的vue.js学习笔记(2)----- 基本使用 全国鞋服行业首个5G专项应用落地柒牌 自动搬运作业提升效率150% 大数据系统提高生产效率超10% [网络安全自学篇] 九十四.《Windows黑客编程技术详解》之提权技术(令牌权限提升和Bypass UAC) 鸿蒙OS 2.0 开源蹭热浅读 蚂蚁三面滑铁卢!遭分布式截胡,靠这些笔记潜修30天,挺进京东 【高并发】Redis如何助力高并发秒杀系统,看完这篇我彻底懂了!! K8s概述:几种集群方案的对比 Linux到底该怎么学?RHCA架构师整理了300页学习笔记 到了2020年,技术水平到底需要达到怎样的程度才能成为顶级的阿里P8架构师 Linux怎么学?一张思维导图带你深入Linux核心原理 金九银十首战告捷!凭借这份Alibaba爆款“面试宝典”成功斩获美团Offer 大数据杀熟:我投之以元宝,它报之以砍刀! “物联网加持”下的社区长啥样儿? 潘云鹤院士:大数据智能是人工智能2.0的核心组成部分 防小孩和老人走失,定位精度达1厘米?上海社区为先进物联网产品提供落地场景 技术老兵十年专攻MySQL编写了763页核心总结,90MySQL问题全解 【Jenkins自动化部署】Windows节点Apache+Django服务自动化构建 Mybatis 使用通用 mapper 正道的光!阿里爆款Jenkins+K8s笔记终于全网开源了 不要死磕Java并发了,阿里P7架构师带你深入剖析synchronized的实现原理 EtherNet/IP协议基础知识(Part 1) CGB2005-京淘13 思科 OSPF协议简单配置与分析 在一家公司呆了 10 年的程序员,最后都怎么了? 致力物联网芯片研发,奕斯伟计算获逾20亿元融资 Unity性能优化技巧 纪念首次撸出来的编程题--2020深信服软件测试岗 qml 去除标题栏后 拖动窗口和改变窗口大小 如何舒服地在图书馆用ipad入门深度学习【windows jupyter远程】 力扣Java版个人代码分享-树篇( 107. 二叉树的层次遍历 II)
您的位置:首页 >程序人生 >

MySQL事务管理及存储引擎

MySQL事务管理MySQL事务概念事务的ACID特点事务控制语句MySQL数据库存储引擎概述关于MyISAM存储引擎MyISAM概述MyISAM的适用场景 InnoDB存储引擎InnoDB的概述InnoDB的适用场景 企业选择存储引擎的依据相关操作查看引擎相关语法操作修改表的存储引擎常用语句操作修改默认引擎修改/etc/my.cof 配置文件中配置操作转化存储引擎

MySQL事务管理

MySQL事务概念

是一种机制、一个操作序列,包含了一组数据库操作命令,并且把所有的命令作为一个整体一起向系统提交或撤销操作请求,即这一组数据库命令要么都执行,要么都不执行

是一个不可分割的工作逻辑单元,在数据库系统上执行并发操作时,事务是最小的控制单元

适用于多用户同时操作的数据库系统的场景,如银行、保险公司及证券交易系统等等

通过事务的整体性以保证数据的一致性

事务的ACID特点

原子性(Atomicity) 事务是一个完整的操作,事务的各元素是不可分的事务中的所有元素必须作为一个整体提交或回滚如果事务中的任何元素失败,则整个事务将失败 一致性(Consistency) 当事务完成时,数据必须处于一致状态在事务开始前,数据库中存储的数据处于一致状态在正在进行的事务中,数据可能处于不一致的状态当事务成功完成时,数据必须再次回到已知的一致状态 隔离性(lsolation) 对数据进行修改的所有并发事务是彼此隔离的,表明事务必须是独立的,它不应以任何方式依赖于或影响其他事务修改数据的事务可在另一个使用相同数据的事务开始之前访问这些数据,或者在另一个使用相同数据的事务结束之后访问这些数据 持久性(Durability) 指不管系统是否发生故障,事务处理的结果都是永久的—旦事务被提交,事务的效果会被永久地保留在数据库中

事务控制语句

BEGIN或START TRANSACTION COMMIT ROLLBACK SAVEPOINT identifier RELEASE SAVEPOINT identifier ROLLBACK TO identifier SET TRANSACTION

mysql> create table user(-> id int(10) not null,-> name char(16) default '无名小卒',-> age int(3) default'0',-> primary key (id));Query OK, 0 rows affected (0.01 sec)mysql> desc user;+-------+----------+------+-----+--------------+-------+| Field | Type | Null | Key | Default| Extra |+-------+----------+------+-----+--------------+-------+| id| int(10)| NO | PRI | NULL | || name| char(16) | YES| | 无名小卒| || age | int(3) | YES| | 0| |+-------+----------+------+-----+--------------+-------+3 rows in set (0.00 sec)mysql> insert into user values (1,'zhangshan',25); //插入数据Query OK, 1 row affected (0.00 sec)mysql> select * from user; //查看数据+----+-----------+------+| id | name| age|+----+-----------+------+|1 | zhangshan | 25 |+----+-----------+------+1 row in set (0.00 sec)mysql> begin;//开始一个事务Query OK, 0 rows affected (0.00 sec)mysql> update user set id=2; //更改数据,将id改为2Query OK, 1 row affected (0.00 sec)Rows matched: 1Changed: 1Warnings: 0mysql> select * from user; //查看更改后的数据+----+-----------+------+| id | name| age|+----+-----------+------+|2 | zhangshan | 25 |+----+-----------+------+1 row in set (0.00 sec)mysql> \q //不提交事务,直接退出Bye[root@localhost ~]# mysql -u root -p //再次登入Enter password: Welcome to the MySQL monitor.Commands end with ; or \g.mysql> use bbsReading table information for completion of table and column namesYou can turn off this feature to get a quicker startup with -ADatabase changedmysql> select * from user;//查询数据,发现数据有恢复原样,没有保存修改+----+-----------+------+| id | name| age|+----+-----------+------+|1 | zhangshan | 25 |+----+-----------+------+1 row in set (0.00 sec)###################### 不提交的事务是不会保存的mysql> begin; //开始一个事务Query OK, 0 rows affected (0.00 sec)mysql> update user set id=2;Query OK, 1 row affected (0.00 sec)Rows matched: 1Changed: 1Warnings: 0mysql> select id from user; //查看id信息,id为2+----+| id |+----+|2 |+----+1 row in set (0.00 sec)mysql> savepoint a; //设置一个回滚点Query OK, 0 rows affected (0.00 sec)mysql> update user set id=3; //将id改为3Query OK, 1 row affected (0.00 sec)Rows matched: 1Changed: 1Warnings: 0mysql> select id from user;+----+| id |+----+|3 |+----+1 row in set (0.00 sec)mysql> rollback to a; //回到回滚点a之前Query OK, 0 rows affected (0.00 sec)mysql> select id from user;查看id信息,id变回了2,a之前的信息+----+| id |+----+|2 |+----+1 row in set (0.00 sec)mysql> update user set id=4; //修改id=4Query OK, 1 row affected (0.00 sec)Rows matched: 1Changed: 1Warnings: 0mysql> select id from user;+----+| id |+----+|4 |+----+1 row in set (0.00 sec)mysql> savepoint b;//设置回滚点bQuery OK, 0 rows affected (0.00 sec)mysql> rollback to a; //回到回滚点a之前Query OK, 0 rows affected (0.00 sec)mysql> rollback to b; //再回滚到b,发现回滚点吧不存在,完完全全回到a之前,包括a之后设置的回滚点也会消失ERROR 1305 (42000): SAVEPOINT b does not existmysql> commit;//提交事务Query OK, 0 rows affected (0.00 sec)mysql> select id from user; +----+| id |+----+|2 |+----+1 row in set (0.00 sec)

MySQL数据库存储引擎

概述

MySQL中的数据用各种不同的技术存储在文件中,每一种技术都使用不同的存储机制、索引技巧、锁定水平并最终提供不同的功能和能力,这些不同的技术以及配套的功能在MySQL中称为存储引擎存储引擎是MySQL将数据存储在文件系统中的存储方式或者存储格式MySQL常用的存储引擎: MyISAM lnnoDBMySQL数据库中的组件,负责执行实际的数据l/O操作MySQL系统中,存储引擎处于文件系统之上,在数据保存到数据文件之前会传输到存储引擎,之后按照各个存储引擎的存储格式进行存储

关于MyISAM存储引擎

MyISAM概述

MyISAM不支持事务,也不支持外键访问速度快对事务完整性没有要求MyISAM在磁盘上存储成三个文件: .frm文件存储表定义 数据文件的扩展名为.MYD (MYData) 索引文件的扩展名是.MYI (MYIndex)表级锁定形式,数据在更新时锁定整个表数据库在读写过程中相互阻塞: 会在数据写入的过程阻塞用户数据的读取 也会在数据读取的过程中阻塞用户的数据写入数据单独写入或读取,速度过程较快且占用资源相对少MylAM支持的存储格式: 静态表 动态表 压缩表

MyISAM的适用场景

公司业务不需要事务的支持单方面读取或写入数据比较多的业务MyISAM存储引擎数据读写都比较频繁场景不适合使用读写并发访问相对较低的业务数据修改相对较少的业务对数据业务一致性要求不是非常高的业务服务器硬件资源相对比较差

InnoDB存储引擎

InnoDB的概述

支持4个事务隔离级别行级锁定,但是全表扫描仍然会是表级锁定读写阻塞与事务隔离级别相关非常高效的缓存索引和数据表与主键以簇的方式存储支持分区、表空间,类似oracle数据库支持外键约束,5.5前不支持全文索引,5.5后支持全文索引

InnoDB的适用场景

业务需要事务的支持行级锁定对高并发有很好的适应能力,但需确保查询是通过索引来完成业务数据更新较为频繁的场景(如:论坛,微博等)业务数据一致性要求较高(如:银行业务)硬件设备内存较大,利用lnnodb较好的缓存能力来提高内存利用率,减少磁盘IO的压力

企业选择存储引擎的依据

需要考虑每个存储引擎提供的核心功能及应用场景支持的字段和数据类型: 所有引擎都支持通用的数据类型 但不是所有的引擎都支持其它的字段类型,如二进制对象锁定类型:不同的存储引擎支持不同级别的锁定: 表锁定 行锁定索引的支持 建立索引在搜索和恢复数据库中的数据时能显著提高性能 不同的存储引擎提供不同的制作索引的技术 有些存储引擎根本不支持索引事务处理的支持 提高在向表中更新和插入信息期间的可靠性 可根据企业业务是否要支持事务选择存储引擎

相关操作

查看引擎

相关语法

show engine//查看数据库引擎show table status from 表名 where name='表名'//查看表引擎show create table 表名//同样可以用于查看表引擎

操作

mysql> show engines; //查看引擎+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+| Engine | Support | Comment| Transactions | XA | Savepoints |+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+| InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES| YES| YES|| MRG_MYISAM | YES | Collection of identical MyISAM tables| NO | NO | NO || MEMORY | YES | Hash based, stored in memory, useful for temporary tables| NO | NO | NO || BLACKHOLE| YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO || MyISAM | YES | MyISAM storage engine| NO | NO | NO || CSV| YES | CSV storage engine | NO | NO | NO || ARCHIVE| YES | Archive storage engine | NO | NO | NO || PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO || FEDERATED| NO| Federated MySQL storage engine | NULL | NULL | NULL |+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+9 rows in set (0.00 sec)mysql> show create table user \G; //可以查看表的引擎\G代表竖向排列*************************** 1. row *************************** Table: userCreate Table: CREATE TABLE "user" ("id" int(10) NOT NULL,"name" char(16) DEFAULT '无名小卒',"age" int(3) DEFAULT '0',PRIMARY KEY ("id")) ENGINE=InnoDB DEFAULT CHARSET=utf81 row in set (0.00 sec)

修改表的存储引擎

常用语句

create table 表名 engine=引擎类型//创建表时指定引擎类型alter table 表名 engine=引擎类型 //修改表的引擎类型

操作

mysql> alter table user engine=MyISAM;//修改表引擎为MyISAMQuery OK, 1 row affected (0.01 sec)Records: 1Duplicates: 0Warnings: 0mysql> show create table user \G; //查看,修改成功*************************** 1. row *************************** Table: userCreate Table: CREATE TABLE "user" ("id" int(10) NOT NULL,"name" char(16) DEFAULT '无名小卒',"age" int(3) DEFAULT '0',PRIMARY KEY ("id")) ENGINE=MyISAM DEFAULT CHARSET=utf81 row in set (0.00 sec)mysql> CREATE TABLE "user1" ( //创建表时指定存储引擎-> "id" int(10) NOT NULL,-> "name" char(16) DEFAULT '无名小卒',-> "age" int(3) DEFAULT '0',-> PRIMARY KEY ("id")-> ) ENGINE=innodb DEFAULT CHARSET=utf8;Query OK, 0 rows affected (0.01 sec)mysql> show create table user1 \G;//查看,指定成功*************************** 1. row *************************** Table: user1Create Table: CREATE TABLE "user1" ("id" int(10) NOT NULL,"name" char(16) DEFAULT '无名小卒',"age" int(3) DEFAULT '0',PRIMARY KEY ("id")) ENGINE=InnoDB DEFAULT CHARSET=utf81 row in set (0.00 sec)mysql> create table name(id int)engine=MyISAM;//创建表时指定引擎Query OK, 0 rows affected (0.01 sec)mysql> show create table name \G; //查看验证*************************** 1. row *************************** Table: nameCreate Table: CREATE TABLE "name" ("id" int(11) DEFAULT NULL) ENGINE=MyISAM DEFAULT CHARSET=utf81 row in set (0.00 sec)mysql> alter table name engine=innodb;//使用alter语句修改引擎Query OK, 0 rows affected (0.01 sec)Records: 0Duplicates: 0Warnings: 0mysql> show create table name \G;//查看验证,修改成功*************************** 1. row *************************** Table: nameCreate Table: CREATE TABLE "name" ("id" int(11) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf81 row in set (0.00 sec)ERROR: No query specified

修改默认引擎

修改/etc/my.cof 配置文件中配置

 [mysqld]区域下配置 default-storage-engine=引擎类型 //插入这条配置 例如:default-storage-engine=InnoDB

操作

[root@localhost ~]# vi /etc/my.cnf[mysqld]……省略部分default-storage-engine=myisam //插入这条语句,配置默认引擎为myisam[root@localhost ~]# systemctl restart mysqld//重启生效mysql> CREATE TABLE "user2" ( //创建新表测试-> "id" int(10) NOT NULL,-> "name" char(16) DEFAULT '无名小卒',-> "age" int(3) DEFAULT '0',-> PRIMARY KEY ("id"));Query OK, 0 rows affected (0.01 sec)mysql> show table status where name='user2'\G; //查看新表,默认存储引擎变为myisam类型*************************** 1. row *************************** Name: user2 Engine: MyISAMVersion: 10 Row_format: Fixed Rows: 0 Avg_row_length: 0Data_length: 0Max_data_length: 16044073672507391 Index_length: 1024Data_free: 0 Auto_increment: NULLCreate_time: 2020-09-12 06:07:58Update_time: 2020-09-12 06:07:58 Check_time: NULLCollation: utf8_general_ci Checksum: NULL Create_options: Comment: 1 row in set (0.00 sec)mysql> show variables like '%storage_engine%'; //使用查看变量的方式查看默认引擎+----------------------------------+--------+| Variable_name| Value|+----------------------------------+--------+| default_storage_engine | MyISAM || default_tmp_storage_engine | InnoDB || disabled_storage_engines ||| internal_tmp_disk_storage_engine | InnoDB |+----------------------------------+--------+4 rows in set (0.00 sec)

转化存储引擎

这一种方式目前不是很懂,只是听说能用,希望了解的大佬能指点一下;

格式:Mysql_convert_table_format-user=root--password=密码--sock=/tmp/mysql.sock-engine=引擎 库名 表名
[root@localhost ~]#yum -y install perl-DBI perl-DBD-MySQL[root@localhost ~]# /usr/local/mysql/bin/mysql_convert_table_format --user=root --password='123456' --sock=/tmp/mysql.sock auth

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。