目录
MySQL主流的分支版本
目前业界的MySQL主流分支版本有Oracle官方版本的MySQL、Percona Server、MariaDB。接下来看一下各个分支的特点。
1.官方版本的MySQL
目前生产环境中主流的版本是MySQL 5.7,无论是在InnoDB存储引擎性能和功能上的提升还是安全性上的加固、复制功能、sys schema库的增强等都改进得相当出色。Oracle是8i、9i、10g、11g、12c这样的一个版本迭代速度;而MySQL从5.0、5.1、5.5、5.6直到目前最成熟的5.7都基于5这个大版本,升级其小版本。
针对不同的用户,MySQL分为两个版本:
1.MySQL Community Server(社区版):该版本完全免费,但是官方不提供技术支持。
2.MySQL Enterprise Server(企业版):该版本需要付费使用,多了企业级管理工具(备份、监视、审计等),官方提供电话技术支持。
让我们来看一下MySQL 5.5、5.6、5.7的性能对比图,这样可以更加直观地观察到这些年的发展变化。
在OLTP只读模式下,MySQL 5.7比MySQL 5.6快近3倍的速度,MySQL 5.6比MySQL 5.5快近1.5倍的速度,而且5.7有将近100万的QPS(每秒的查询量),如图1-1所示。
在OLTP读写模式下,MySQL 5.7比MySQL 5.6快近2.5倍的速度,比MySQL 5.5快近3倍的速度,而且5.7有近60万的QPS,如图1-2所示。
2.PerconaServer
Percona Server是MySQL重要的分支之一,由领先的MySQL咨询公司Percona发布。它基于InnoDB存储引擎的基础上提升了性能和易管理性,最后形成了增强版的XtraDB引擎,可以用来更好地发挥服务器硬件上的性能。所以,Percona Server也可以称为增强的MySQL与开源的插件(plugin)的结合。Percona团队的最终声明是“Percona Server是由Oracle发布的最接近官方MySQL Enterprise发行版的版本”。
Percona不仅提供了高性能XtraDB引擎,还提供了在生产环境中的DBA必备武器,诸如xtrabackup、percona-toolkit等。更重要的是还提供Percona XtraDB-Cluster这种支持多点写入的强同步高可用集群架构,真正实现数据一致性。Percona Server自己管理代码,不接受外部开发人员的贡献,以这种方式确保他们对产品中所包含功能的控制。
3.MariaDB
MariaDB是由MySQL创始人Monty创建的,主要由开源社区维护,采用GPL授权许可。甲骨文公司收购了MySQL后有将MySQL闭源的潜在风险,因此社区采用分支的方式来避开这个风险。MariaDB直接利用来自Percona的XtraDB引擎,由于它们使用的是完全相同的引擎,因此每次使用存储引擎时没有显著的差别。
MySQL存储引擎
MySQL数据库及其分支版本主要的存储引擎有InnoDB、MyISAM、Memory等。简单地理解,存储引擎就是指表的类型以及表在计算机上的存储方式。存储引擎的概念是MySQL的特色,使用的是一个可插拔存储引擎架构,能够在运行的时候动态加载或者卸载这些存储引擎。不同的存储引擎决定了MySQL数据库中的表可以用不同的方式来存储。我们可以根据数据的特点来选择不同的存储引擎。
在MySQL中的存储引擎有很多种,可以通过SHOW ENGINES语句来查看,如图1-3所示。
在Support列中,YES表示当前版本支持这个存储引擎;DEFAULT表示该引擎是默认的引擎,即InnoDB。
下面重点关注InnoDB、MyISAM、MEMORY这3种。
(1)InnoDB存储引擎
①InnoDB是事务型数据库的首选引擎,支持事务ACID,简单地说就是支持事务完整性、一致性。
②InnoDB支持行级锁。行级锁可以在最大程度上支持并发,以及类似Oracle的一致性读、多用户并发。
③InnoDB是为处理巨大数据量的最大性能设计,InnoDB存储引擎完全与MySQL服务器整合,InnoDB存储引擎为在主内存中缓存数据和索引而维持它自己的缓冲池。
④InnoDB支持外键完整性约束,存储表中的数据时,每张表的存储都按照主键顺序存放,如果没有显式在表定义时指定主键,InnoDB会为每一行生成一个6字节的ROWID,并以此作为主键。
⑤InnoDB支持崩溃数据自修复。InnoDB存储引擎中就是依靠redolog来保证的。当数据库异常崩溃后,数据库重新启动时会根据redolog进行数据恢复,保证数据库恢复到崩溃前的状态。
(2)MyISAM存储引擎
①MyISAM存储引擎不支持事务,所以对事务有要求的业务场景不能使用。
②其锁定机制是表级索引,虽然可以让锁定的实现成本很小,但是也同时大大降低了其并发性能。
③不仅会在写入的时候阻塞读取,MyISAM还会在读取的时候阻塞写入,但读本身并不会阻塞另外的读。
④只会缓存索引:MyISAM可以通过key_buffer缓存,以大大提高访问性能减少磁盘I/O,但是这个缓冲区只会缓存索引,而不会缓存数据。
⑤适用于不需要事务支持(不支持)、并发相对较低(锁定机制问题)、数据修改相对较少(阻塞问题)、以读为主这类场景。
(3)MEMORY存储引擎
MEMORY存储引擎是MySQL中的一类特殊存储引擎,使用存储在内存中的内容来创建表,而且所有数据也放在内存中。
①每个基于MEMORY存储引擎的表实际对应一个磁盘文件。该文件的文件名与表名相同,类型为frm类型。该文件中只存储表的结构,数据文件则存储在内存中。
②MEMORY默认使用哈希索引,速度比使用B型树索引快。如果想用B型树索引,可以在创建索引时指定。
③MEMORY存储引擎是把数据存到内存中,如果内存出现异常就会影响数据。如果重启或者关机,那么所有数据都会消失。
在实际工作中,选择一个合适的存储引擎是比较复杂的问题。每种存储引擎都有自己的优缺点,不能笼统地说谁比谁好。如果需要对事务的完整性要求比较高(比如银行),要求实现并发控制(比如售票),那么选择InnoDB有很大的优势。如果表主要是用于插入记录和读出记录,那么选择MyISAM能实现处理高效率。如果需要很快的读写速度,对数据的安全性要求较低,可以选择MEMORY,它对表的大小有要求,不能建立太大的表。
MySQL逻辑架构
MySQL数据库的逻辑架构简单的图示如图1-4所示。
MySQL逻辑架构整体分为3层:
第一层是客户端层,所包含的并不是MySQL独有的技术,它们都是服务于C/S程序或者是这些程序所需要的,诸如连接处理、身份验证、安全性等功能均在这一层处理。
第二层是SQL层(SQL Layer),因为这是MySQL的核心部分,通常也叫作核心服务层。在MySQL数据库系统处理底层数据之前的所有工作都是在这一层完成的,包括权限判断、SQL解析、执行计划优化、Query cache的处理以及所有内置的函数(如日前时间、加密等函数)、存储过程、视图、触发器等。
第三层是存储引擎层(Storage Engine Layer),是底层数据存取操作实现的部分,由多种存储引擎共同组成。它们负责存储和获取所有存储在MySQL中的数据,类似Linux的众多文件系统。每个存储引擎都有自己的优势和劣势,通过存储引擎API来与它们交互,这些API接口隐藏了各个存储引擎不同的地方。对于查询层尽可能透明。
虽然看起来MySQL架构好像比较简单,但是实际上每一层中都含有各自的很多小模块,尤其是第二层SQL Layer,结构蛮复杂的,如图1-5所示。
我们简单地做如下剖析:
(1)Connectors:指的是不同语言中与SQL的交互。
(2)Management Services & Utilities:管理服务和工具组件,从备份和恢复的安全性、复制、集群、管理、配置、迁移和元数据等方面管理数据库。
(3)Connection Pool:连接池,是为解决资源的频繁分配﹑释放所造成的问题而为数据库连接建立的一个“缓冲池”。原理是预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去。它的作用是进行身份验证、线程重用、连接限制、管理用户的连接、线程处理等需要缓存的需求。
(4)SQL Interface(SQL接口):接受用户的SQL命令,并且返回用户需要查询的结果。比如select from就是调用SQL Interface。
(5)Parser:解析器,验证和解析SQL命令。SQL命令传递到解析器的时候会被解析器验证和解析,并生成一棵对应的解析树。在这个过程中,解析器主要通过语法规则来验证和解析。比如SQL中是否使用了错误的关键字或者关键字的顺序是否正确等。
(6)Optimizer:查询优化器。SQL语句在查询执行之前,会使用查询优化器对查询进行优化,得出一个最优的策略。多数情况下,一条查询可以有很多种执行方式,最后都返回相应的结果。优化器的作用就是找到其中最好的执行计划。
用一个例子就可以理解,比如“select uid,name from userwhere gender=1”。这个select查询先根据where语句进行选取,而不是先将表全部查询出来以后再进行gender过滤;这个select查询先根据uid和name进行属性投影,而不是将属性全部取出来以后再进行过滤;将这两个查询条件联接起来生成最终查询结果。
(7)Cache和Buffer:主要功能是将客户端提交给MySQL的select类query请求的返回结果集缓存到内存中,与该query的一个hash值做一个对应。该query所取数据的基表发生任何数据的变化之后,MySQL会自动使该query的Cache失效。如果查询缓存有命中的查询结果,查询语句就可以直接去查询缓存中取数据。这个缓存机制是由一系列小缓存组成的,比如表缓存、记录缓存、key缓存、权限缓存等。
MySQL物理文件体系结构
- MySQL在Linux系统中的数据文件目录如图1-6所示,可以归结为如下几类。
(1)binlog二进制日志文件:不管使用的是哪一种存储引擎,都会产生binlog。如果开启了binlog二进制日志,就会有若干个二进制日志文件,如mysql-bin.000001、mysql-bin.000002、mysqlbin.00003等。binlog记录了MySQL对数据库执行更改的所有操作。查看当前binlog文件列表,如图1-7所示。
(7)slow.log:如果配置了MySQL的慢查询日志,MySQL就会将运行过程中的慢查询日志记录到slow_log文件中。MySQL的慢查询日志是MySQL提供的一种日志记录,用来记录在MySQL中响应时间超过阀值的语句,具体指运行时间超过long_query_time值的SQL。如图1-12所示,参数slow_query_log_file指定慢查询日志文件的存放路径;参数long_query_time的默认值为10,意思是运行10s以上的语句。默认情况下,MySQL数据库并不启动慢查询日志,需要我们手动来设置这个参数。慢查询日志支持将日志记录写入文件,也支持将日志记录写入数据库表。
(9)数据库路径:可以看到系统数据库mysql、sys、performance_schema和用户自定义的数据库test、mldn(展开具体的路径之后是具体的每个数据库自己的对象)。
InnoDB存储引擎体系结构
MySQL面试题及答案
1.数据库三范式是什么?
1.第一范式(1NF):字段具有原子性,不可再分。(所有关系型数据库系统都满足第一范式数据库表中的字段都是单一属性的,不可再分)
2.第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。要求数据库表中的每个实例或行必须可以被惟一地区分。通常需要为表加上一个列,以存储各个实例的惟一标识。这个惟一属性列被称为主关键字或主键。
3.满足第三范式(3NF)必须先满足第二范式(2NF)。简而言之,第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。>所以第三范式具有如下特征:>>1.每一列只有一个值>>2.每一行都能区分。>>3.每一个表都不包含其他表已经包含的非主关键字信息。
2.有哪些数据库优化方面的经验?
1.用PreparedStatement,一般来说比Statement性能高:一个sql发给服务器去执行,涉及步骤:语法检查、语义分析,编译,缓存。
2.有外键约束会影响插入和删除性能,如果程序能够保证数据的完整性,那在设计数据库时就去掉外键。
3.表中允许适当冗余,譬如,主题帖的回复数量和最后回复时间等4.UNIONALL要比UNION快很多,所以,如果可以确认合并的两个结果集中不包含重复数据且不需要排序时的话,那么就使用UNIONALL。>>UNION和UNIONALL关键字都是将两个结果集合并为一个,但这两者从使用和效率上来说都有所不同。>1.对重复结果的处理:UNION在进行表链接后会筛选掉重复的记录,UnionAll不会去除重复记录。>2.对排序的处理:Union将会按照字段的顺序进行排序;UNIONALL只是简单的将两个结果合并后就返回。
3.请简述常用的索引有哪些种类?
1.普通索引:即针对数据库表创建索引
2.唯一索引:与普通索引类似,不同的就是:MySQL数据库索引列的值必须唯一,但允许有空值
3.主键索引:它是一种特殊的唯一索引,不允许有空值。一般是在建表的时候同时创建主键索引
4.组合索引:为了进一步榨取MySQL的效率,就要考虑建立组合索引。即将数据库表中的多个字段联合起来作为一个组合索引。
4.以及在mysql数据库中索引的工作机制是什么?
数据库索引,是数据库管理系统中一个排序的数据结构,以协助快速查询、更新数据库表中数据。索引的实现通常使用B树及其变种B+树
5.MySQL的基础操作命令:
1.MySQL是否处于运行状态:Debian上运行命令servicemysqlstatus,在RedHat上运行命令servicemysqldstatus
2.开启或停止MySQL服务:运行命令servicemysqldstart开启服务;运行命令servicemysqldstop停止服务
3.Shell登入MySQL:运行命令mysql-uroot-p
4.列出所有数据库:运行命令showdatabases;
5.切换到某个数据库并在上面工作:运行命令usedatabasename;进入名为databasename的数据库6.列出某个数据库内所有表:showtables;7.获取表内所有Field对象的名称和类型:describetable_name;
6.mysql的复制原理以及流程。
Mysql内建的复制功能是构建大型,高性能应用程序的基础。将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其它主机(slaves)上,并重新执行一遍来实现的。*复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环。这些日志可以记录发送到从服务器的更新。当一个从服务器连接主服务器时,它通知主服务器在日志中读取的最后一次成功更新的位置。从服务器接收从那时起发生的任何更新,然后封锁并等待主服务器通知新的更新。过程如下1.主服务器把更新记录到二进制日志文件中。2.从服务器把主服务器的二进制日志拷贝到自己的中继日志(replaylog)中。3.从服务器重做中继日志中的时间,把更新应用到自己的数据库上。
7.mysql支持的复制类型?
1.基于语句的复制:在主服务器上执行的SQL语句,在从服务器上执行同样的语句。MySQL默认采用基于语句的复制,效率比较高。一旦发现没法精确复制时,会自动选着基于行的复制。
2.基于行的复制:把改变的内容复制过去,而不是把命令在从服务器上执行一遍.从mysql5.0开始支持
3.混合类型的复制:默认采用基于语句的复制,一旦发现基于语句的无法精确的复制时,就会采用基于行的复制。
8.mysql中myisam与innodb的区别?
1.事务支持>MyISAM:强调的是性能,每次查询具有原子性,其执行数度比InnoDB类型更快,但是不提供事务支持。>InnoDB:提供事务支持事务,外部键等高级数据库功能。具有事务(commit)、回滚(rollback)和崩溃修复能力(crashrecoverycapabilities)的事务安全(transaction-safe(ACIDcompliant))型表。
2.InnoDB支持行级锁,而MyISAM支持表级锁.>>用户在操作myisam表时,select,update,delete,insert语句都会给表自动加锁,如果加锁以后的表满足insert并发的情况下,可以在表的尾部插入新的数据。
3.InnoDB支持MVCC,而MyISAM不支持
4.InnoDB支持外键,而MyISAM不支持
5.表主键>MyISAM:允许没有任何索引和主键的表存在,索引都是保存行的地址。>InnoDB:如果没有设定主键或者非空唯一索引,就会自动生成一个6字节的主键(用户不可见),数据是主索引的一部分,附加索引保存的是主索引的值。
6.InnoDB不支持全文索引,而MyISAM支持。
7.可移植性、备份及恢复>MyISAM:数据是以文件的形式存储,所以在跨平台的数据转移中会很方便。在备份和恢复时可单独针对某个表进行操作。>InnoDB:免费的方案可以是拷贝数据文件、备份binlog,或者用mysqldump,在数据量达到几十G的时候就相对痛苦了
8.存储结构>MyISAM:每个MyISAM在磁盘上存储成三个文件。第一个文件的名字以表的名字开始,扩展名指出文件类型。.frm文件存储表定义。数据文件的扩展名为.MYD(MYData)。索引文件的扩展名是.MYI(MYIndex)。>InnoDB:所有的表都保存在同一个数据文件中(也可能是多个文件,或者是独立的表空间文件),InnoDB表的大小只受限于操作系统文件的大小,一般为2GB。
9.mysql中varchar与char的区别以及varchar(50)中的50代表的涵义?
1.varchar与char的区别:char是一种固定长度的类型,varchar则是一种可变长度的类型.
2.varchar(50)中50的涵义:最多存放50个字节
3.int(20)中20的涵义:int(M)中的
Mindicatesthemaximumdisplaywidth(最大显示宽度)forintegertypes.Themaximumlegaldisplaywidthis255.
10.MySQL中InnoDB支持的四种事务隔离级别名称,以及逐级之间的区别?
1.ReadUncommitted(读取未提交内容)>>在该隔离级别,所有事务都可以看到其他未提交事务的执行结果。本隔离级别很少用于实际应用,因为它的性能也不比其他级别好多少。读取未提交的数据,也被称之为脏读(DirtyRead)。
2.ReadCommitted(读取提交内容)>>这是大多数数据库系统的默认隔离级别(但不是MySQL默认的)。它满足了隔离的简单定义:一个事务只能看见已经提交事务所做的改变。这种隔离级别也支持所谓的不可重复读(NonrepeatableRead),因为同一事务的其他实例在该实例处理其间可能会有新的commit,所以同一select可能返回不同结果。
3.RepeatableRead(可重读)>>这是MySQL的默认事务隔离级别,它确保同一事务的多个实例在并发读取数据时,会看到同样的数据行。不过理论上,这会导致另一个棘手的问题:幻读(PhantomRead)。简单的说,幻读指当用户读取某一范围的数据行时,另一个事务又在该范围内插入了新行,当用户再读取该范围的数据行时,会发现有新的“幻影”行。InnoDB和Falcon存储引擎通过多版本并发控制(MVCC,
MultiversionConcurrencyControl间隙锁)机制解决了该问题。注:其实多版本只是解决不可重复读问题,而加上间隙锁(也就是它这里所谓的并发控制)才解决了幻读问题。
4.Serializable(可串行化)>>这是最高的隔离级别,它通过强制事务排序,使之不可能相互冲突,从而解决幻读问题。简言之,它是在每个读的数据行上加上共享锁。在这个级别,可能导致大量的超时现象和锁竞争。
<table><thead><tr><thalign="left">隔离级别</th><thalign="left">脏读(DirtyRead)</th><thalign="left">不可重复读(NonRepeatableRead)</th><thalign="left">幻读(PhantomRead)</th></tr></thead><tbody><tr><tdalign="left">未提交读(Readuncommitted)</td><tdalign="left">可能</td><tdalign="left">可能</td><tdalign="left">可能</td></tr><tr><tdalign="left">已提交读(Readcommitted)</td><tdalign="left">不可能</td><tdalign="left">可能</td><tdalign="left">可能</td></tr><tr><tdalign="left">可重复读(Repeatableread)</td><tdalign="left">不可能</td><tdalign="left">不可能</td><tdalign="left">可能</td></tr><tr><tdalign="left">可串行化(SERIALIZABLE)</td><tdalign="left">不可能</td><tdalign="left">不可能</td><tdalign="left">不可能</td></tr></tbody></table>
11.表中有大字段X(例如:text类型),且字段X不会经常更新,以读为为主,将该字段拆成子表好处是什么?
12.MySQL中InnoDB引擎的行锁是通过加在什么上完成(或称实现)的?
13.MySQL中控制内存分配的全局参数,有哪些?
14.若一张表中只有一个字段VARCHAR(N)类型,utf8编码,则N最大值为多少(精确到数量级即可)?
15.[SELECT*]和[SELECT全部字段]的2种写法有何优缺点?
16.HAVNG子句和WHERE的异同点?
17.MySQL当记录不存在时insert,当记录存在时update,语句怎么写?
18.MySQL的insert和update的select语句语法
MySQL性能优化面试题及答案
1、一张表,里面有ID自增主键,当insert了17条记录之后,删除了第15,16,17条记录,再把Mysql重启,再insert一条记录,这条记录的ID是18还是15?
(1)如果表的类型是MyISAM,那么是18因为MyISAM表会把自增主键的最大ID记录到数据文件里,重启MySQL自增主键的最大ID也不会丢失
(2)如果表的类型是InnoDB,那么是15InnoDB表只是把自增主键的最大ID记录到内存中,所以重启数据库或者是对表进行OPTIMIZE操作,都会导致最大ID丢失
2、Mysql的技术特点是什么?
Mysql数据库软件是一个客户端或服务器系统,其中包括:支持各种客户端程序和库的多线程SQL服务器、不同的后端、广泛的应用程序编程接口和管理工具。
3、Heap表是什么?
HEAP表存在于内存中,用于临时高速存储。
BLOB或TEXT字段是不允许的
只能使用比较运算符=,<,>,=>,=<
HEAP表不支持AUTO_INCREMENT
索引不可为NULL
4、Mysql服务器默认端口是什么?
Mysql服务器的默认端口是3306。
5、与Oracle相比,Mysql有什么优势?
Mysql是开源软件,随时可用,无需付费。
Mysql是便携式的带有命令提示符的GUI。
使用Mysql查询浏览器支持管理
6、如何区分FLOAT和DOUBLE?
以下是FLOAT和DOUBLE的区别:
浮点数以8位精度存储在FLOAT中,并且有四个字节。
浮点数存储在DOUBLE中,精度为18位,有八个字节。
7、区分CHAR_LENGTH和LENGTH?
CHAR_LENGTH是字符数,而LENGTH是字节数。Latin字符的这两个数据是相同的,但是对于Unicode和其他编码,它们是不同的。
8、请简洁描述Mysql中InnoDB支持的四种事务隔离级别名称,以及逐级之间的区别?
SQL标准定义的四个隔离级别为:
readuncommited:读到未提交数据
readcommitted:脏读,不可重复读
repeatableread:可重读
serializable:串行事物
9、在Mysql中ENUM的用法是什么?
ENUM是一个字符串对象,用于指定一组预定义的值,并可在创建表时使用。Createtablesize(nameENUM('Smail,'Medium','Large');
10、如何定义REGEXP?
REGEXP是模式匹配,其中匹配模式在搜索值的任何位置。
11、CHAR和VARCHAR的区别?
12、列的字符串类型可以是什么?
13、如何获取当前的Mysql版本?
14、Mysql中使用什么存储引擎?
15、Mysql驱动程序是什么?
16、TIMESTAMP在UPDATECURRENT_TIMESTAMP数据类型上做什么?
17、主键和候选键有什么区别?
18、如何使用Unixshell登录Mysql?
19、myisamchk是用来做什么的?
20、MYSQL数据库服务器性能分析的方法命令有哪些?
21、如何控制HEAP表的最大尺寸?
22、MyISAMStatic和MyISAMDynamic有什么区别?
23、federated表是什么?
24、如果一个表有一列定义为TIMESTAMP,将发生什么?
25、列设置为AUTOINCREMENT时,如果在表中达到最大值,会发生什么情况?
26、怎样才能找出最后一次插入时分配了哪个自动增量?
27、你怎么看到为表格定义的所有索引?
28.、LIKE声明中的%和_是什么意思?
29、如何在Unix和Mysql时间戳之间进行转换?
30、列对比运算符是什么?
31、我们如何得到受查询影响的行数?
32、Mysql查询是否区分大小写?
33.、LIKE和REGEXP操作有什么区别?
34.、BLOB和TEXT有什么区别?
35、mysql_fetch_array和mysql_fetch_object的区别是什么?
36、我们如何在mysql中运行批处理模式?
37、MyISAM表格将在哪里存储,并且还提供其存储格式?
38.、Mysql中有哪些不同的表格?
39、ISAM是什么?
40、InnoDB是什么?
41、Mysql如何优化DISTINCT?
42、如何输入字符为十六进制数字?
43、如何显示前50行?
44、可以使用多少列创建索引?
45、NOW()和CURRENT_DATE()有什么区别?
46、什么样的对象可以使用CREATE语句创建?
47、Mysql表中允许有多少个TRIGGERS?
48、什么是非标准字符串类型?
49、什么是通用SQL函数?
50、解释访问控制列表
51、MYSQL支持事务吗?
52、mysql里记录货币用什么字段类型好
53、MYSQL数据表在什么情况下容易损坏?
54、mysql有关权限的表都有哪几个?
55、Mysql中有哪几种锁?
总结
这篇MySQL性能优化和高可用架构的文章我就写到这里了,由于这篇文章笔记资料太多太多了,我就不全部罗列出来了 (包含MySQL面试题及答案) 需要完整笔记资料的朋友可以:点赞+转发+关注!然后后台小信封回复【444】我会私发给您!