数据引擎

时间:2024-06-30 20:23:09编辑:阿星

MySql数据库的常用存储引擎以及它们的区别?

MySQL支持多种存储引擎,其中最常用的有MyISAM、InnoDB和MEMORY三种。MyISAM:MyISAM是MySQL最常用的存储引擎,它支持全文索引,支持表锁,支持热备份,但不支持事务,不支持外键,不支持行级锁,不支持并发控制,性能较高,适合查询量大,更新量小的应用场景。InnoDB:InnoDB是MySQL的另一种存储引擎,它支持事务,支持外键,支持行级锁,支持并发控制,但不支持全文索引,不支持热备份,性能较低,适合查询量小,更新量大的应用场景。MEMORY:MEMORY是MySQL的另一种存储引擎,它将数据存储在内存中,性能最高,但不支持事务,不支持外键,不支持行级锁,不支持并发控制,不支持热备份,适合查询量大,更新量小的应用场景。【摘要】
MySql数据库的常用存储引擎以及它们的区别?【提问】
MySQL支持多种存储引擎,其中最常用的有MyISAM、InnoDB和MEMORY三种。MyISAM:MyISAM是MySQL最常用的存储引擎,它支持全文索引,支持表锁,支持热备份,但不支持事务,不支持外键,不支持行级锁,不支持并发控制,性能较高,适合查询量大,更新量小的应用场景。InnoDB:InnoDB是MySQL的另一种存储引擎,它支持事务,支持外键,支持行级锁,支持并发控制,但不支持全文索引,不支持热备份,性能较低,适合查询量小,更新量大的应用场景。MEMORY:MEMORY是MySQL的另一种存储引擎,它将数据存储在内存中,性能最高,但不支持事务,不支持外键,不支持行级锁,不支持并发控制,不支持热备份,适合查询量大,更新量小的应用场景。【回答】


Mysql数据库3种存储引擎有什么区别?

Mysql数据库3种存储(MyISAM、MEMORY、InnoDB)引擎区别:1、Myisam是Mysql的默认存储引擎,当create创建新表时,未指定新表的存储引擎时,默认使用Myisam。MEMORY、InnoDB不是默认存储引擎。2、InnoDB存储引擎提供了具有提交、回滚和崩溃恢复能力的事务安全。但是对比Myisam的存储引擎,InnoDB写的处理效率差一些并且会占用更多的磁盘空间以保留数据和索引。Mysql数据库3种存储(MyISAM、MEMORY、InnoDB)区别对比:1、MyISAM它不支持事务,也不支持外键,尤其是访问速度快,对事务完整性没有要求或者以SELECT、INSERT为主的应用基本都可以使用这个引擎来创建表。数据文件和索引文件可以放置在不同的目录,平均分配IO,获取更快的速度。要指定数据文件和索引文件的路径,需要在创建表的时候通过DATA DIRECTORY和INDEX DIRECTORY语句指定,文件路径需要使用绝对路径。2、MEMORYmemory使用存在内存中的内容来创建表。每个MEMORY表实际对应一个磁盘文件,格式是.frm。MEMORY类型的表访问非常快,因为它到数据是放在内存中的,并且默认使用HASH索引,但是一旦服务器关闭,表中的数据就会丢失,但表还会继续存在。默认情况下,memory数据表使用散列索引,利用这种索引进行“相等比较”非常快,但是对“范围比较”的速度就慢多了。因此,散列索引值适合使用在"="和""的操作符中,不适合使用在""操作符中,也同样不适合用在order by字句里。如果确实要使用""或betwen操作符,可以使用btree索引来加快速度。存储在MEMORY数据表里的数据行使用的是长度不变的格式,因此加快处理速度,这意味着不能使用BLOB和TEXT这样的长度可变的数据类型。VARCHAR是一种长度可变的类型,但因为它在MySQL内部当作长度固定不变的CHAR类型,所以可以使用。3、InnoDBInnoDB存储引擎提供了具有提交、回滚和崩溃恢复能力的事务安全。但是对比MyISAM的存储引擎,InnoDB写的处理效率差一些并且会占用更多的磁盘空间以保留数据和索引。(1)自动增长列:InnoDB表的自动增长列可以手工插入,但是插入的如果是空或0,则实际插入到则是自动增长后到值。可以通过"ALTER TABLE...AUTO_INCREMENT=n;"语句强制设置自动增长值的起始值,默认为1,但是该强制到默认值是保存在内存中,数据库重启后该值将会丢失。可以使用LAST_INSERT_ID()查询当前线程最后插入记录使用的值。如果一次插入多条记录,那么返回的是第一条记录使用的自动增长值。对于InnoDB表,自动增长列必须是索引。如果是组合索引,也必须是组合索引的第一列,但是对于MyISAM表,自动增长列可以是组合索引的其他列,这样插入记录后,自动增长列是按照组合索引到前面几列排序后递增的。(2)外键约束:MySQL支持外键的存储引擎只有InnoDB,在创建外键的时候,父表必须有对应的索引,子表在创建外键的时候也会自动创建对应的索引。

如何查看mysql数据库表所使用的引擎(转载)

我们怎么样才能准确的查看mysql的存储引擎呢,下面我给大家介绍两种正确的方式。1)正确方式一: SHOW TABLE STATUS from 数据库库名 where Name=‘表名‘2)mysqlshow -u 数据库登录帐号 -p有时的时候,我们想查看以下mysql的表的存储引擎是什么类型的,不用说,大家直接想到的就是使用show create table命令查看创建表的命令,从而直接认为定义表的引擎就是表的真正存储引擎,这个方法在大多数情况下是没有错的,但是在有的时候却是致命的错误,因为有的时候明明看的的是 engine =myisam ,怎么会select count(*) from tbl_name 的查询速度怎么会真么慢呢。这种情况一般会出现在使用该创建表的存储没有安装成功,从而导致表使用的时数据库的默认存储引擎。因此严格的来说查看mysql的表的存储引擎使用show create table命令是不完全正确的。正确的方式是使用下面我介绍的两种方式,这两种方式查看出来的是没有任何问题的,还请大家仔细阅读下面的文章正确方式一: SHOW TABLE STATUS from 数据库库名 where Name=‘表名‘;01.hymin@Ubuntu:/myhome$mysql -uroot -p‘mypassword‘ 02.Welcome to the MySQL monitor. Commands end with ; or \g. 03.Your MySQL connection id is 221 04.Server version: 5.1.41-3ubuntu12.7 (Ubuntu) 05. 06.Type ‘help;‘ or ‘\h‘ for help. Type ‘\c‘ to clear the current input statement. 07. 08.mysql> SHOW TABLE STATUS from mytest where Name=‘test‘; 09.+------------+--------+---------+------------+------+----------------+-------------+(省略部分结果) 10.| Name | Engine | Version | Row_format | Rows | Avg_row_length | Data_length |(省略部分结果) 11.+------------+--------+---------+------------+------+----------------+-------------+(省略部分结果) 12.| test | MyISAM | 10 | Fixed | 0 | 0 | 0 |(省略部分结果) 13.+------------+--------+---------+------------+------+----------------+-------------+(省略部分结果) 14.1 row in set (0.02 sec) 15. 16.mysql>5. 正确方式二: mysqlshow -u 数据库登录帐号 -p ‘数据库登录帐号密码‘ --status 数据库库名 表名1.hymin@Ubuntu:/myhome$mysqlshow -uroot -p‘mypassword‘ --status mytest test 2.Database:mytest Wildcard: test 3.+------------+--------+---------+------------+------+----------------+-------------+(省略部分结果) 4.| Name | Engine | Version | Row_format | Rows | Avg_row_length | Data_length |(省略部分结果) 5.+------------+--------+---------+------------+------+----------------+-------------+(省略部分结果) 6.| test | MyISAM | 10 | Fixed | 0 | 0 | 0 |(省略部分结果) 7.+------------+--------+---------+------------+------+----------------+-------------+(省略部分结果)转载自:http://www.cnblogs.com/clouds008/archive/2013/06/10/3130680.html如何查看mysql数据库表所使用的引擎(转载)标签:


常用的数据库引擎有哪些

1.数据库引擎
Microsoft JET (Joint Engineering Technologe) 是Access和Visual Basic所提供的内嵌数据库功能的核心元素。JET是一种全能关系数据库引擎,可用来处理大多数中小型数据库。所谓数据库引擎是应用程序和数据库存储之间的一种接口,它将与数据库有关的内存管理、游标管理和错误管理等具体而复杂的细节问题抽象为一个既高度一致又简化的编程接口。
Jet数据库引擎包含在一组动态链接库(DLL)文件中,在运行时,这些文件被链接到Visual Basic程序。它把应用程序的请求翻译成对.mdb文件或其他数据库的物理操作。它真正读取、写入和修改数据库,并处理所有内部事务,如索引、锁定、安全性和引用完整性等。它还包含一个查询处理器,用于接收并执行结构化查询语言(SQL)的查询来实现所需的数据库操作。另外,Jet数据库引擎还包含一个结果处理器.用来管理查询所返回的结果。
2.ODBC
Open DataBase Connectivity(ODBC,开放数据库互连)是由Microsoft定义的一种数据库访问标准,它提供一种标准的数据库访问方法以访问不同平台的数据库。一个ODBC应用程序既可以访问在本地PC机上的数据库,也可以访问多种异构平台上的数据库,例如SQL Server、Oracle或者DB2。
ODBC本质上是一组数据库访问API(应用编程接口),但编程人员通过ODBC访问数据库时无需深入理解ODBC函数就可以访问ODBC功能,这是因为象Visual Basic这样的开发工具都提供了一些对象封装了ODBC函数。
3.OLE DB
OLE DB是Microsoft开发的最新数据库访问接口,Microsoft将其定义为ODBC接班人。与ODBC类似,OLE DB提供了对关系数据库的访问,同时在此基础上,它对ODBC所提供的功能进行了一部分的扩展。作为一种标准的接口,OLE DB可以访问所有类型的数据,包括关系数据库、dBase等ISAM(索引序列访问方法)类型的文件、甚至E-MAIL或者Windows 2000活动目录等。
OLE DB应用程序可以分为两种:OLE DB提供者(OLE DB Provider)和OLE DB使用者(OLE DB Consumer),OLE DB使用者就是使用OLE DB接口的应用程序,而OLE DB提供者负责访问数据源,并通过OLE DB接口向OLE DB使用者提供数据。


mysql数据库支持的存储引擎有哪些?默认的存储引擎是什么?主要特性有什么?

1、MySQL常见的存储引擎有:InnoDB、MyISAM。2、Mysql 5.0之后的版本,默认的存储引擎就是InnoDB。3、各自主要特点有:事务:MyISAM不支持,InnoDB支持。锁级别: MyISAM 表级锁,InnoDB 行级锁及外键约束。MyISAM存储表的总行数;InnoDB不存储总行数。MyISAM采用非聚集索引,B+树叶子存储指向数据文件的指针。InnoDB主键索引采用聚集索引,B+树叶子存储数据。MyISAM适合场景: 插入不频繁,查询非常频繁,如果执行大量的SELECT,MyISAM是更好的选择, 没有事务。InnoDB适合场景: 可靠性要求比较高,或者要求事务; 表更新和查询都相当的频繁, 大量的INSERT或UPDATE。

如何查看mysql数据库的引擎/MySQL数据库引擎详解

一般情况下,mysql会默认提供多种存储引擎,你可以通过下面的查看:看你的mysql现在已提供什么存储引擎:mysql> show engines;看你的mysql当前默认的存储引擎:mysql> show variables like ‘%storage_engine%‘;你要看某个表用了什么引擎(在显示结果里参数engine后面的就表示该表当前用的存储引擎):mysql> show create table 表名;MySQL数据库引擎详解作为Java程序员,MySQL数据库大家平时应该都没少使用吧,对MySQL数据库的引擎应该也有所了解,这篇文章就让我详细的说说MySQL数据库的Innodb和MyIASM两种引擎以及其索引结构。也来巩固一下自己对这块知识的掌握。Innodb引擎Innodb引擎提供了对数据库ACID事务的支持,并且实现了SQL标准的四种隔离级别,关于数据库事务与其隔离级别的内容请见数据库事务与其隔 离级别这篇文章。该引擎还提供了行级锁和外键约束,它的设计目标是处理大容量数据库系统,它本身其实就是基于MySQL后台的完整数据库系统,MySQL 运行时Innodb会在内存中建立缓冲池,用于缓冲数据和索引。但是该引擎不支持FULLTEXT类型的索引,而且它没有保存表的行数,当SELECT COUNT(*) FROM TABLE时需要扫描全表。当需要使用数据库事务时,该引擎当然是首选。由于锁的粒度更小,写操作不会锁定全表,所以在并发较高时,使用Innodb引擎 会提升效率。但是使用行级锁也不是绝对的,如果在执行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表。MyIASM引擎MyIASM是MySQL默认的引擎,但是它没有提供对数据库事务的支持,也不支持行级锁和外键,因此当INSERT(插入)或UPDATE(更 新)数据时即写操作需要锁定整个表,效率便会低一些。不过和Innodb不同,MyIASM中存储了表的行数,于是SELECT COUNT(*) FROM TABLE时只需要直接读取已经保存好的值而不需要进行全表扫描。如果表的读操作远远多于写操作且不需要数据库事务的支持,那么MyIASM也是很好的选 择。两种引擎的选择大尺寸的数据集趋向于选择InnoDB引擎,因为它支持事务处理和故障恢复。数据库的大小决定了故障恢复的时间长短,InnoDB可以利用事务日志 进行数据恢复,这会比较快。主键查询在InnoDB引擎下也会相当快,不过需要注意的是如果主键太长也会导致性能问题,关于这个问题我会在下文中讲到。大 批的INSERT语句(在每个INSERT语句中写入多行,批量插入)在MyISAM下会快一些,但是UPDATE语句在InnoDB下则会更快一些,尤 其是在并发量大的时候。Index——索引索引(Index)是帮助MySQL高效获取数据的数据结构。MyIASM和Innodb都使用了树这种数据结构做为索引,关于树我也曾经写过一篇文章树是一种伟大的数据结构,只是自己的理解,有兴趣的朋友可以去阅读。下面我接着讲这两种引擎使用的索引结构,讲到这里,首先应该谈一下B-Tree和B+Tree。B-Tree和B+TreeB+Tree是B-Tree的变种,那么我就先讲B-Tree吧,相信大家都知道红黑树,这是我前段时间学《算法》一书时,实现的一颗红黑树,大家 可以参考。其实红黑树类似2,3-查找树,这种树既有2叉结点又有3叉结点。B-Tree也与之类似,它的每个结点做多可以有d个分支(叉),d称为B- Tree的度,如下图所示,它的每个结点可以有4个元素,5个分支,于是它的度为5。B-Tree中的元素是有序的,比如图中元素7左边的指针指向的结点 中的元素都小于7,而元素7和16之间的指针指向的结点中的元素都处于7和16之间,正是满足这样的关系,才能高效的查找:首先从根节点进行二分查找,找 到就返回对应的值,否则就进入相应的区间结点递归的查找,直到找到对应的元素或找到null指针,找到null指针则表示查找失败。这个查找是十分高效 的,其时间复杂度为O(logN)(以d为底,当d很大时,树的高度就很低),因为每次检索最多只需要检索树高h个结点。接下来就该讲B+Tree了,它是B-Tree的变种,如下面两张图所示:vcHLx/i85LLp0a/Qp8LKoaM8L3A+DQo8aDMgaWQ9"myisam引擎的索引结构">MyISAM引擎的索引结构MyISAM引擎的索引结构为B+Tree,其中B+Tree的数据域存储的内容为实际数据的地址,也就是说它的索引和实际的数据是分开的,只不过是用索引指向了实际的数据,这种索引就是所谓的非聚集索引。Innodb引擎的索引结构MyISAM引擎的索引结构同样也是B+Tree,但是Innodb的索引文件本身就是数据文件,即B+Tree的数据域存储的就是实际的数据,这种索引就是聚集索引。这个索引的key就是数据表的主键,因此InnoDB表数据文件本身就是主索引。因为InnoDB的数据文件本身要按主键聚集,所以InnoDB要求表必须有主键(MyISAM可以没有),如果没有显式指定,则MySQL系统会自动选择一个可以唯一标识数据记录的列作为主键,如果不存在这种列,则MySQL自动为InnoDB表生成一个隐含字段作为主键,这个字段长度为6个字节,类型为长整形。并且和MyISAM不同,InnoDB的辅助索引数据域存储的也是相应记录主键的值而不是地址,所以当以辅助索引查找时,会先根据辅助索引找到主键,再根据主键索引找到实际的数据。所以Innodb不建议使用过长的主键,否则会使辅助索引变得过大。建议使用自增的字段作为主键,这样B+Tree的每一个结点都会被顺序的填满,而不会频繁的分裂调整,会有效的提升插入数据的效率。如何查看mysql数据库的引擎/MySQL数据库引擎详解标签:


常用的数据库引擎有哪些(数据库引擎区别)

1.数据库引擎MicrosoftJET(JointEngineeringTechnologe)是Aess和VisualBasic所提供的内嵌数据库功能的核心元素。JET是一种全能关系数据库引擎,可用来处理大多数中小型数据库。所谓数据库引擎是应用程序和数据库存储之间的一种接口,它将与数据库有关的内存管理、游标管理和错误管理等具体而复杂的细节问题抽象为一个既高度一致又简化的编程接口。Jet数据库引擎包含在一组动态链接库(DLL)文件中,在运行时,这些文件被链接到VisualBasic程序。它把应用程序的请求翻译成对.mdb文件或其他数据库的物理操作。它真正读取、写入和修改数据库,并处理所有内部事务,如索引、锁定、安全性和引用完整性等。它还包含一个查询处理器,用于接收并执行结构化查询语言(SQL)的查询来实现所需的数据库操作。另外,Jet数据库引擎还包含一个结果处理器.用来管理查询所返回的结果。2.ODBCOpenDataBase(ODBC,开放数据库互连)是由Microsoft定义的一种数据库访问标准,它提供一种标准的数据库访问方法以访问不同平台的数据库。一个ODBC应用程序既可以访问在本地PC机上的数据库,也可以访问多种异构平台上的数据库,例如SQLServer、Oracle或者DB2。ODBC本质上是一组数据库访问API(应用编程接口),但编程人员通过ODBC访问数据库时无需深入理解ODBC函数就可以访问ODBC功能,这是因为象VisualBasic这样的开发工具都提供了一些对象封装了ODBC函数。3.OLEDBOLEDB是Microsoft开发的最新数据库访问接口,Microsoft将其定义为ODBC接班人。与ODBC类似,OLEDB提供了对关系数据库的访问,同时在此基础上,它对ODBC所提供的功能进行了一部分的扩展。作为一种标准的接口,OLEDB可以访问所有类型的数据,包括关系数据库、dBase等ISAM(索引序列访问方法)类型的文件、甚至E-MAIL或者Windows2000活动目录等。OLEDB应用程序可以分为两种:OLEDB提供者(OLEDBProvider)和OLEDB使用者(OLEDBConsumer),OLEDB使用者就是使用OLEDB接口的应用程序,而OLEDB提供者负责访问数据源,并通过OLEDB接口向OLEDB使用者提供数据。

MySQL存储引擎

InnoDB的数据文件本身就是主索引文件。而MyISAM的主索引和数据是分开的。辅助索引data域存储相应记录主键的值而不是地址。 innoDB是聚簇索引,数据挂在逐渐索引之下。 是 MySQL 默认的事务型存储引擎, 只有在需要它不支持的特性时,才考虑使用其它存储引擎 。 实现了四个标准的隔离级别,默认级别是可重复读(REPEATABLE READ)。在可重复读隔离级别下,通过多版本并发控制(MVCC)+ 间隙锁(Next-Key Locking)防止幻影读。 主索引是聚簇索引,在索引中保存了数据,从而避免直接读取磁盘,因此对查询性能有很大的提升。 内部做了很多优化,包括从磁盘读取数据时采用的可预测性读、能够加快读操作并且自动创建的自适应哈希索引、能够加速插入操作的插入缓冲区等。 支持真正的在线热备份。其它存储引擎不支持在线热备份,要获取一致性视图需要停止对所有表的写入,而在读写混合场景中,停止写入可能也意味着停止读取。 以B+树作为索引结构,叶节点的数据域存放数据记录的地址。主索引和辅助索引在结构上没有区别,只是主索引要求key唯一,而辅助索引的key可以重复。 MyISAM中索引检索的算法为首先按照B+Tree搜索算法搜索索引,如果指定的Key存在,则取出其data域的值,然后以data域的值为地址,读取相应数据记录。 设计简单,数据以紧密格式存储。对于只读数据,或者表比较小、可以容忍修复的操作,则依然可以使用它。 提供了大量的特性,包括压缩表、空间数据索引等。 不支持事务 。 不支持行级锁,只能对整张表加锁,读取时会对需要读到的所有表加共享锁,写入时则对表加排它锁。但在表有读取操作的同时,也可以往表中插入新的记录,这被称为并发插入(CONCURRENT INSERT)。 可以手工或者自动执行检查和修复操作,但是和事务恢复以及崩溃恢复不同,可能导致一些数据丢失,而且修复操作是非常慢的。 如果指定了 DELAY_KEY_WRITE 选项,在每次修改执行完成时,不会立即将修改的索引数据写入磁盘,而是会写到内存中的键缓冲区,只有在清理键缓冲区或者关闭表的时候才会将对应的索引块写入磁盘。这种方式可以极大地提升写入性能,但是在数据库或者主机崩溃时会造成索引损坏,需要执行修复操作。

什么是MySQL存储引擎?

MySQL 可能是最著名的 关系数据库管理系统 (RDBMS),作为一款免费开源软件开发,最初由 MYSQL AB 公司提供支持,但现在归 Oracle 所有。 在 MySQL 中,用于表的“存储引擎”决定了数据的处理方式。有几种可用的存储引擎,但最常用的是 InnoDB 和 MyISAM 。 在本文中,我们将了解它们的显着特征以及它们之间的主要区别。 在本教程中,您将学习: 在我们讨论两个主要 MySQL 存储引擎之间的特性和区别之前,先来了解一下什么是存储引擎? 存储引擎,也称为“ 表处理程序 ”,基本上是解释和管理与数据库表的 SQL 查询相关的操作的数据库部分。 在最新版本的 MySQL 中,可以使用“ 可插拔 ”架构来组织和管理存储引擎,存在多种存储引擎,但最常用的两个是 InnoDB 和 MyISAM 。 要获得我们正在使用的数据库中可用存储引擎的列表,我们所要做的就是发出一个简单的 SQL 查询,因此我们需要做的第一件事就是打开一个 MySQL 交互式提示并使用数据库用户登录及其密码: 如果登录成功,提示将变为mysql>,在这里,我们可以运行我们的 SQL 查询来可视化可用的存储引擎: 执行查询后,我们应该获得类似于以下内容的结果: 在上表中,作为查询结果生成,我们可以通过查看Support每行列中的值轻松了解支持哪些存储引擎,“YES”值表示存储引擎可用,否则“NO”。相反,同一列中的“DEFAULT”值表示相应的引擎(在本例中为 InnoDB)是服务器使用的默认引擎。 “ Transactions ”和“ Savepoints ”列中存在的值分别表示存储引擎是否支持事务和回滚。正如我们通过查看表可以看到的,只有 InnoDB 引擎可以。 关于存储引擎的信息存在于“ INFORMATION_SCHEMA ”数据库的“ ENGINES ”表中,因此我们也可以发出标准的“SELECT”查询来获取我们需要的数据: 我们将获得与上面看到的相同的结果。 让我们看看两个最常用的存储引擎 InnoDB 和 MyISAM 之间的主要特性和区别是什么。 正如我们已经说过的, InnoDB 是自 MySQL 以来的默认存储引擎5.5。 此存储引擎的一些主要功能如下: 对事务的支持提供了一种安全的方式来执行多个查询以保持数据一致。 当多个修改数据的操作被执行并且我们想要确保它们只有在所有操作都成功并且没有错误发生时才有效时,我们想要使用事务。 典型的处理方式是启动事务并执行查询:如果出现错误,则执行回滚,否则提交更改。 当使用 InnoDB 数据锁定发生在行级别时,因此在事务期间锁定的数据量是有限的。 InnoDB 有两种类型的锁: 一个共享锁允许谁拥有它读取该行的交易,而一个排它锁允许交易执行其修改行的操作,所以要更新或删除数据。 当一个事务在某行上获得共享锁,而另一个事务需要相同的锁类型时,立即授予;但是,如果第二个事务在同一行上请求排他锁,它将不得不等待。 如果第一个事务持有该行的排他锁,则第二个事务将不得不等待该锁被释放以获得共享锁或排他锁。 外键是一个非常重要的特性,因为它们可用于基于表之间的逻辑关系来强制执行数据完整性。想象一下,我们的数据库中有三个表(假设它被称为“testdb”):一个user包含现有用户的job表,一个注册所有可用作业的user_job表,以及一个用于表示用户和用户之间存在的多对多关系的表。作业(一个用户可以有多个作业,多个作业可以与同一个用户关联)。 该user_job表就是所谓的连接表或关联表,因为它的唯一目的是表示用户-工作关联。该表有两列,一个叫user_id和其他job id。表中会存在两个外键约束,强制执行以下规则:user_id列中的值只能引用表id列中的值,列中的user值job_id必须引用表id列中的现有值job. 这将强制执行完整性,因为仅允许现有用户和作业的 ID 存在于关联表中。删除涉及表中一个或多个关联的用户或作业user_job也是不允许的,除非为相应的外键设置了CASCADE DELETE规则。在这种情况下,当删除用户或作业时,它们所涉及的关系也将被删除。 MyISAM 曾经是默认的 MySQL 存储引擎,但已被 InnoDB 取代。使用此引擎时,数据锁定发生在表级别,因此执行操作时锁定的数据更多。 与 InnoDB 不同,MyISAM 不支持事务回滚和提交,因此必须手动执行回滚。MyISAM 和 InnoDB 之间的另一个很大区别是前者不支持外键。MyISAM 更简单,并且在对有限数据集进行读取密集型操作时可能具有优势(有争议)。 在表上使用 MyISAM 时,会设置一个标志,指示该表是否需要修复,例如在突然关闭之后。稍后可以使用适当的工具执行表修复。 如何知道特定表使用了什么存储引擎?我们所要做的就是发出一个简单的查询。 例如,要知道user我们在前面的例子中提到的表使用了什么存储引擎,我们将运行: 注意上面的查询我们使用了G,为了让查询结果垂直显示,优化空间。执行查询后,我们将获得以下结果: 在这种情况下,通过查看“Engine”列中存储的值,我们可以清楚地看到该表使用的是“InnoDB”引擎。获取相同信息的另一种方法是INFORMATION_SCHEMA.TABLES直接查询表: 上面的查询将只返回表使用的引擎: 如果我们稍微更改查询,我们可以获得数据库中所有表名的列表以及它们使用的引擎: 如果我们要为一个表设置一个特定的存储引擎,我们可以在创建时指定它。例如,假设我们正在创建job表,并且出于某种原因我们想要使用 MyISAM 存储引擎。我们将发出以下 SQL 查询: 相反,如果我们想要更改用于已存在表的存储引擎,我们只需要使用ALTERSQL 语句。假设我们要将上一个示例中创建的“job”表所使用的存储引擎更改为 InnoDB;我们会运行: 在本教程中,我们学习了什么是数据库存储引擎,并且我们看到了两个最常用的 MySQL 引擎的主要特性: InnoDB 和 MyISAM 。 我们看到了如何检查哪些引擎可用、哪些引擎用于表以及如何使用 SQL 查询设置和修改表引擎。

上一篇:myfreecams

下一篇:naacee