您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 数据库 > 数据库面试专题及答案
请简洁描述MySQL中InnoDB支持的四种事务隔离级别名称,以及逐级之间的区别?SQL标准定义的四个隔离级别为:readuncommited:读到未提交数据readcommitted:脏读,不可重复读repeatableread:可重读serializable:串行事物在MySQL中ENUM的用法是什么?ENUM是一个字符串对象,用于指定一组预定义的值,并可在创建表时使用。SQL语法如下:Createtablesize(nameENUM('Smail,'Medium','Large');CHAR和VARCHAR的区别?CHAR和VARCHAR类型在存储和检索方面有所不同。CHAR列长度固定为创建表时声明的长度,长度值范围是1到255。当CHAR值被存储时,它们被用空格填充到特定长度,检索CHAR值时需删除尾随空格。列的字符串类型可以是什么?字符串类型是:SETBLOBENUMCHARTEXTVARCHARMySQL中使用什么存储引擎?存储引擎称为表类型,数据使用各种技术存储在文件中。技术涉及:StoragemechanismLockinglevelsIndexingCapabilitiesandfunctions.TIMESTAMP在UPDATECURRENT_TIMESTAMP数据类型上做什么?创建表时TIMESTAMP列用Zero更新。只要表中的其他字段发生更改,UPDATECURRENT_TIMESTAMP修饰符就将时间戳字段更新为当前时间。主键和候选键有什么区别?表格的每一行都由主键唯一标识,一个表只有一个主键。主键也是候选键。按照惯例,候选键可以被指定为主键,并且可以用于任何外键引用。MySQL数据库服务器性能分析的方法命令有哪些?Showstatus一些值得监控的变量值:Bytesreceived和Bytessent和服务器之间来往的流量。Com服务器正在执行的命令。Created在查询执行期限间创建的临时表和文件。Handler存储引擎操作。Select不同类型的联接执行计划。Sort_*几种排序信息。Showsessionstatuslike‘Select’;ShowprofilesSETprofiling=1;Showprofiles\GShowprofile;LIKE和REGEXP操作有什么区别?LIKE和REGEXP运算符用于表示^和%。SELECT*FROMtablenameWHERE*REGEXP^b;SELECT*FROMtablenameWHERE*LIKE%b;BLOB和TEXT有什么区别?BLOBBLOB是一个二进制对象,可以容纳可变数量的数据。有四种类型的BLOBTINYBLOBBLOBMEDIUMBLOB和LONGBLOB它们只能在所能容纳价值的最大长度上有所不同。TEXTTEXT是一个不区分大小写的BLOB。四种TEXT类型TINYTEXTTEXTMEDIUMTEXT和LONGTEXT它们对应于四种BLOB类型,并具有相同的最大长度和存储要求。BLOB和TEXT类型之间的唯一区别在于对BLOB值进行排序和比较时区分大小写,对TEXT值不区分大小写。数据库的三范式?第一范式:数据库表的每一个字段都是不可分割的。第二范式:数据库表中的非主属性只依赖于主键。第三范式:不存在非主属性对关键字的传递函数依赖关系。MySQL表中允许有多少个TRIGGERS?在MySQL表中允许有六个触发器,如下:BEFOREINSERTAFTERINSERTBEFOREUPDATEAFTERUPDATEBEFOREDELETEandAFTERDELETE什么是通用SQL函数?数学函数Abs(num)求绝对值floor(num)向下取整ceil(num)向上取整字符串函数insert(s1,index,length,s2)替换函数oS1表示被替换的字符串os2表示将要替换的字符串oIndex表示被替换的位置,从1开始oLebgth表示被替换的长度upper(str),ucase(str)将字母改为大写lower(str),lcase(str)将字母改为小写left(str,length)返回str字符串的前length个字符right(str,length)返回str字符串的后length个字符substring(str,index,length)返回str字符串从index位开始长度为length个字符(index从1开始)reverse(str)将str字符串倒序输出日期函数curdate()、current_date()获取当前日期curtime()、current_time()获取当前日期now()获取当前日期和时间datediff(d1、d2)d1和d2之间的天数差adddate(date,num)返回date日期开始,之后num天的日期subdate(date,num)返回date日期开始,之前num天的日期聚合函数Count(字段)根据某个字段统计总记录数(当前数据库保存到多少条数据)sum(字段)计算某个字段的数值总和avg(字段)计算某个字段的数值的平均值Max(字段)、min(字段)求某个字段最大或最小值MySQL中有哪几种锁?MyISAM支持表锁,InnoDB支持表锁和行锁,默认为行锁。表级锁:开销小,加锁快,不会出现死锁。锁定粒度大,发生锁冲突的概率最高,并发量最低。行级锁:开销大,加锁慢,会出现死锁。锁力度小,发生锁冲突的概率小,并发度最高。MySQL数据优化。优化数据类型o避免使用NULL,NULL需要特殊处理,大多数时候应该使用NOTNULL,或者使用一个特殊的值,如0,-1作为默认值。o仅可能使用更小的字段,MySQL从磁盘读取数据后是存储到内存中的,然后使用cpu周期和磁盘I/O读取它,这意味着越小的数据类型占用的空间越小.小心字符集转换o客户端或应用程序使用的字符集可能和表本身的字符集不一样,这需要MySQL在运行过程中隐含地进行转换,此外,要确定字符集如UTF-8是否支持多字节字符,因此它们需要更多的存储空间。_优化count(mycol)和count()*优化子查询o遇到子查询时,MySQL查询优化引擎并不是总是最有效的,这就是为什么经常将子查询转换为连接查询的原因了,优化器已经能够正确处理连接查询了,当然要注意的一点是,确保连接表(第二个表)的连接列是有索引的,在第一个表上MySQL通常会相对于第二个表的查询子集进行一次全表扫描,这是嵌套循环算法的一部分。优化UNIONo在跨多个不同的数据库时使用UNION是一个有趣的优化方法,UNION从两个互不关联的表中返回数据,这就意味着不会出现重复的行,同时也必须对数据进行排序,我们知道排序是非常耗费资源的,特别是对大表的排序。oUNIONALL可以大大加快速度,如果你已经知道你的数据不会包括重复行,或者你不在乎是否会出现重复的行,在这两种情况下使用UNIONALL更适合。此外,还可以在应用程序逻辑中采用某些方法避免出现重复的行,这样UNIONALL和UNION返回的结果都是一样的,但UNIONALL不会进行排序。MySQL的关键字。添加索引:altertabletableNameadd索引(索引字段)主键:primarykey唯一:unique全局:fulltext普通:index多列:indexindex_name页级:引擎BDB。次锁定相邻的一组记录。表级:引擎MyISAM,理解为锁住整个表,可以同时读,写不行。行级:引擎INNODB,单独的一行记录加锁,对指定的记录进行加锁,这样其它进程还是可以对同一个表中的其它记录进行操作。表级锁速度快,但冲突多,行级冲突少,但速度慢。存储引擎。存储引擎说白了就是如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。MyISAM:这种引擎是mysql最早提供的。这种引擎又可以分为静态MyISAM、动态MyISAM和压缩MyISAM三种:o静态MyISAM:如果数据表中的各数据列的长度都是预先固定好的,服务器将自动选择这种表类型。因为数据表中每一条记录所占用的空间都是一样的,所以这种表存取和更新的效率非常高。当数据受损时,恢复工作也比较容易做。o动态MyISAM:如果数据表中出现varchar、text或BLOB字段时,服务器将自动选择这种表类型。相对于静态MyISAM,这种表存储空间比较小,但由于每条记录的长度不一,所以多次修改数据后,数据表中的数据就可能离散的存储在内存中,进而导致执行效率下降。同时,内存中也可能会出现很多碎片。因此,这种类型的表要经常用optimizetable命令或优化工具来进行碎片整理。o压缩MyISAM:以上说到的两种类型的表都可以用myisamchk工具压缩。这种类型的表进一步减小了占用的存储,但是这种表压缩之后不能再被修改。另外,因为是压缩数据,所以这种表在读取的时候要先时行解压缩。但是,不管是何种MyISAM表,目前它都不支持事务,行级锁和外键约束的功能。MyISAMMerge引擎:这种类型是MyISAM类型的一种变种。合并表是将几个相同的MyISAM表合并为一个虚表。常应用于日志和数据仓库。InnoDB:InnoDB表类型可以看作是对MyISAM的进一步更新产品,它提供了事务、行级锁机制和外键约束的功能。memory(heap):这种类型的数据表只存在于内存中。它使用散列索引,所以数据的存取速度非常快。因为是存在于内存中,所以这种类型常应用于临时表中。archive:这种类型只支持select和insert语句,而且不支持索引。Desc[ribe]tablename:查看数据表的结构。showengines:命令可以显示当前数据库支持的存储引擎情况。数据库备份。必须要在未登录状态下导出整个数据库mysqldump-u用户名-p数据库名导出的文件名导出一个表mysqldump-u用户名-p数据库名表名导出的文件名导出一个数据库结构mysqldump-udbuser-p-d--add-drop-tabledbnamed:/dbname_db.sql-d没有数据--add-drop-table在每个create语句之前增加一个droptabletruncatedeletedrop的区别。drop(DDL语句):是不可逆操作,会将表所占用空间全部释放掉;truncate(DDL语句):只针对于删除表的操作,在删除过程中不会激活与表有关的删除触发器并且不会把删除记录放在日志中;当表被truncate后,这个表和索引会恢复到初始大小;delete(DML语句):可以删除表也可以删除行,但是删除记录会被计入日志保存,而且表空间大小不会恢复到原来;执行速度:droptruncatedelete。Redis是什么?两句话做一下概括。是一个完全开源免费的key-value内存数据库2.通常被认为是一个数据结构服务器,主要是因为其有着丰富的数据结构strings、map、list、sets、sortedsets。Redis使用最佳方式是全部数据in-memory。Redis更多场景是作为Memcached的替代者来使用。当需要除key/value之外的更多数据类型支持时,使用Redis更合适。当存储的数据不能被剔除时,使用Redis更合适。Redis(管道,哈希)。Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,zset,hash等数据结构的存储。Redis支持数据的备份,即master-slave模式的数据备份。Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。Redis实现原理或机制。Redis是一个key-value存储系统。和Memcached类似,但是解决了断电后数据完全丢失的情况,而且她支持更多无化的value类型,除了和string外,还支持l
本文标题:数据库面试专题及答案
链接地址:https://www.777doc.com/doc-5340812 .html