mysql 存储引擎  和 事务

2021-08-27 11:31:04 浏览数 (1)

存储引擎

最常见的是:Myisam和 innoDB

数据库的engine显示

MyISAM ,批量插入速度快,不支持事务,锁表

InnoDB 批量插入相对较慢,支持事务,锁行

-----------官方文档---------begin

MySQL插件式存储引擎的体系结构

下述存储引擎是最常用的:

·  MyISAM:默认的MySQL插件式存储引擎,它是在Web、数据仓储和其他应用环境下最常使用的存储引擎之一。注意,通过更改STORAGE_ENGINE配置变量,能够方便地更改MySQL服务器的默认存储引擎。

·  InnoDB:用于事务处理应用程序,具有众多特性,包括ACID事务支持。

·  BDB:可替代InnoDB的事务引擎,支持COMMIT、ROLLBACK和其他事务特性。

·  Memory:将所有数据保存在RAM中,在需要快速查找引用和其他类似数据的环境下,可提供极快的访问。

·  Merge:允许MySQL DBA或开发人员将一系列等同的MyISAM表以逻辑方式组合在一起,并作为1个对象引用它们。对于诸如数据仓储等VLDB环境十分适合。

·  Archive:为大量很少引用的历史、归档、或安全审计信息的存储和检索提供了完美的解决方案。

·  Federated:能够将多个分离的MySQL服务器链接起来,从多个物理服务器创建一个逻辑数据库。十分适合于分布式环境或数据集市环境。

·  Cluster/NDB:MySQL的簇式数据库引擎,尤其适合于具有高性能查找要求的应用程序,这类查找需求还要求具有最高的正常工作时间和可用性。

·  Other:其他存储引擎包括CSV(引用由逗号隔开的用作数据库表的文件),Blackhole(用于临时禁止对数据库的应用程序输入),以及Example引擎(可为快速创建定制的插件式存储引擎提供帮助)。

----------------------------------end

事务

通俗来将就是,一组操作,要么同时执行,要么同时不执行。

选择存储引擎 InnoDB

事务的使用:

开启事务:start transaction;

执行sql操作

(结束事务)commit(提交)/rollback(回滚/ 撤销)

模拟银行转账示例:

commit示例:

说明:

(结束事务)commit(提交)/rollback(回滚/ 撤销)

之后,事务结束,如果需要再使用,那么需要重新开始事务;

rollback示例:

事务原理:

建库建表的时候 要选用I nnoDB

说明:

-----------------摘自官方文档--------begin

不能回滚的语句

有些语句不能被回滚。通常,这些语句包括数据定义语言(DDL)语句,比如创建或取消数据库的语句,和创建、取消或更改表或存储的子程序的语句。

您在设计事务时,不应包含这类语句。如果您在事务的前部中发布了一个不能被回滚的语句,则后部的其它语句会发生错误,在这些情况下,通过发布ROLLBACK语句不能 回滚事务的全部效果。

会造成隐式提交的语句

以下语句(以及同义词)均隐含地结束一个事务,似乎是在执行本语句前,您已经进行了一个COMMIT。

·  ALTER FUNCTION, ALTER PROCEDURE, ALTER TABLE, BEGIN, CREATE DATABASE, CREATE FUNCTION, CREATE INDEX, CREATE PROCEDURE, CREATE TABLE, DROP DATABASE, DROP FUNCTION, DROP INDEX, DROP PROCEDURE, DROP TABLE, LOAD MASTER DATA, LOCK TABLES, RENAME TABLE, SET AUTOCOMMIT=1, START TRANSACTION, TRUNCATE TABLE, UNLOCK TABLES.

·  当当前所有的表均被锁定时,UNLOCK TABLES可以提交事务。

·  CREATE TABLE, CREATE DATABASE DROP DATABASE, TRUNCATE TABLE, ALTER FUNCTION, ALTER PROCEDURE, CREATE FUNCTION, CREATE PROCEDURE, DROP FUNCTION和DROP PROCEDURE等语句会导致一个隐含提交。

·  InnoDB中的CREATE TABLE语句被作为一个单一事务进行处理。这意味着,来自用户的ROLLBACK不会撤销用户在事务处理过程中创建的CREATE TABLE语句。

事务不能被嵌套。这是隐含COMMIT的结果。当您发布一个START TRANSACTION语句或其同义词时,该COMMIT被执行,用于任何当前事务。

----------------------------------end

0 人点赞