原理篇

1:什么是数据库事务

参考答案:

       数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行。事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源。

2:事务的特性及其含义

参考答案:

       事务有四个特性,分别是原子性(Atomicity)、一致性(Correspondence)、隔离性(Isolation)、持久性(Durability),简称ACID。

       原子性:事务必须是原子工作单元;对于数据修改,要么全都执行,要么全都不执行。

       一致性:事务在完成时,必须使所有的数据都保持一致状态。

       隔离性:由并发事务所作的修改必须与任何其它并发事务所作的修改隔离。

       持久性:事务完成之后,它对于系统的影响是永久性的。

3:关系型数据库和非关系型数据库的区别

参考答案:

       关系型数据库采用了关系模型来组织数据,关系模型是一个二位表格,一般采用行存储,最大的特点就是事务的一致性;
       非关系型数据库使用键值对存储数据,多用于分布式的数据存储,一般不支持ACID特性,严格上不是一种数据库,应该是一种数据结构化存储方法的集合。

4:什么是视图

参考答案:

       视图(VIEW)也被称作虚表,即虚拟的表,是一组数据的逻辑表示,其本质是对应于一条SELECT语句,结果集被赋予一个名字,即视图名字。 视图本身并不包含任何数据,它只包含映射到基表的一个查询语句,当基表数据发生变化,视图数据也随之变化。

       1、视图能够简化用户的操作;

       2、视图使用户能以多钟角度看待同一数据;

       3、视图对重构数据库提供了一定程度的逻辑独立性;

       4、视图能够对机密数据提供安全保护;

       5、适当的利用视图可以更清晰的表达查询。

5:什么是存储过程

参考答案:

       存储过程是一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。

6:简述数据库三范式

参考答案:

       第一范式:字段是最小的的单元不可再分;

       第二范式:满足第一范式,表中的字段必须完全依赖于全部主键而非部分主键;

       第三范式:满足第二范式,非主键外的所有字段必须互不依赖。

7:Mysql两种引擎MyISAM和InnoDB的特点

参考答案:

       MyISAM引擎是MySQL 5.1及之前版本的默认引擎,它的特点是:

              不支持行锁,读取时对需要读到的所有表加锁,写入时则对表加排它锁;

              不支持事务;

              不支持外键;

              不支持崩溃后的安全恢复;

              在表有读取查询的同时,支持往表中插入新纪录;

              支持BLOB和TEXT的前500个字符索引,支持全文索引;

              支持延迟更新索引,极大提升写入性能;

              对于不会进行修改的表,支持压缩表,极大减少磁盘空间占用;

       InnoDB在MySQL 5.5后成为默认索引,它的特点是:

              支持行锁,采用MVCC来支持高并发;

              支持事务;

              支持外键;

              支持崩溃后的安全恢复;

              不支持全文索引;

       总体来讲,MyISAM适合SELECT密集型的表,而InnoDB适合INSERT和UPDATE密集型的表。

8:什么是索引

参考答案:

       索引是为了加速对表中数据行的检索而创建的一种分散的存储结构。索引是针对表而建立的,它是由数据页面以外的索引页面组成的,每个索引页面中的行都会含有逻辑指针,以便加速检索物理数据。

9:什么是主键和外键,主键与唯一键的区别

参考答案:

       主键是能够唯一标识表中某一行的属性或属性组。一个表只能有一个主键。

       外键是用于建立和加强两个表数据之间的链接的一列或多列。外键约束主要用来维护两个表之间数据的一致性。

       主键不能重复,不能为空,唯一键不能重复,可以为空。

       建立主键的目的是让外键来引用。

       一个表最多只有一个主键,但可以有很多唯一键。

mysql中低于60或高于90但不包含_数据库查询求小于

语法篇

1SQL语言包括哪几部分,每部分都有哪些操作关键字

参考答案:

       SQL语言包括数据定义(DDL)、数据操纵(DML),数据控制(DCL)和数据查询(DQL)四个部分。

       数据定义:Create Table,Alter Table,Drop Table, Craete/Drop Index等

       数据操纵:Select ,insert,update,delete,

       数据控制:grant,revoke

       数据查询:select

2什么样的对象可以使用 CREATE 语句创建 ?

参考答案:

       以下对象是使用 CREATE 语句创建的:

       DATABASE、EVENT、FUNCTION、INDEX、PROCEDURE、TABLE、TRIGGER、USER、VIEW

3:Mysql中NULL是什么意思,它和空值有什么区别

参考答案:
       NULL这个值表示UNKNOWN(未知),它不表示“”(空字符串)。对NULL这个值的任何比较都会生产一个NULL值。不能把任何值与一个 NULL值进行比较,并在逻辑上希望获得一个答案。需要使用IS NULL或者IS NOT NULL来进行NULL判断,SQL语句函数中可以使用ifnull ()函数来进行处理。

       空值(”)是不占用空间的,判断空字符用 = ” 或者 <> ” 来进行处理。

       无法比较 NULL 和 0;它们是不等价的。

       无法使用比较运算符来测试 NULL 值,比如 =, 。

       NULL值可以使用 <=> 符号进行比较,该符号与等号作用相似,但对NULL有意义。

       进行 count ()统计某列的记录数的时候,如果采用的 NULL 值,会别系统自动忽略掉,但是空值是统计到其中。

4:IFNULL函数如何使用

参考答案:

       IFNULL(expr1,expr2)

       如果expr1不是NULL,IFNULL()返回expr1,否则它返回expr2。IFNULL()返回一个数字或字符串值。

5什么情况下设置了索引但无法使用

参考答案:

       1、以“%”开头的LIKE语句,模糊匹配

       2、OR语句前后没有同时使用索引

       3、数据类型出现隐式转化(如varchar不加单引号的话可能会自动转换为int型)

6:如何列出某个数据库,以及一个数据库中的所有表

参考答案:

     show databases;

     show tables;

7:如何获取表内所有 Field 对象的名称和类型

参考答案:

     在mysql中如果想要查看表的定义的话,有以下两种方式:

       1、show create table table_name;

       2、desc table_name;

8UNION 和 UNION ALL 有什么区别

参考答案:

       UNION用于合并两个或多个SELECT语句的结果集,并消去表中任何重复行。UNION 内部的 SELECT 语句必须拥有相同数量的列,列也必须拥有相似的数据类型。同时,每条SELECT语句中的列的顺序必须相同。

       UNIONALL基本使用和UNION是一致的,但是UNION ALL不会消除表中的重复行。

9:连接的种类与区别

参考答案:

       SQL 连接(JOIN)子句用于将数据库中两个或者两个以上表中的记录组合起来。连接通过共有值将不同表中的字段组合在一起。

       SQL 中有多种不同的连接:

        内连接(INNERJOIN):当两个表中都存在匹配时,才返回行。

        左连接(LEFTJOIN):返回左表中的所有行,即使右表中没有匹配的行。

        右连接(RIGHTJOIN):返回右表中的所有行,即使左表中没有匹配的行。

        全连接(FULLJOIN):只要某一个表存在匹配,就返回行。

        笛卡尔连接(CARTESIANJOIN):返回两个或者更多的表中记录集的笛卡尔积。

10:如何做模糊查询

参考答案:

       语法:SELECT 字段 FROM 表 WHERE 某字段 LIKE 条件

       其中条件的匹配模式有:

       1、%:表示任意0个或多个字符。可匹配任意类型和长度的字符。

       2、_:表示任意单个字符。匹配单个任意字符,它常用来限制表达式的字符长度语句。

       3、[ ]:表示括号内所列字符中的一个(类似正则表达式)。指定一个字符、字符串或范围,要求所匹配对象为它们中的任一个。

       4、[^ ]:表示不在括号所列之内的单个字符。其取值和[] 相同,但它要求所匹配对象为指定字符以外的任一个字符。

11:如何定义 REGEXP,LIKE 和 REGEXP 操作有什么区别

       REGEXP 是模式匹配,其中匹配模式在搜索值的任何位置。

       语法SELECT字段 FROM WHERE 某字段 REGEXP 条件。

       LIKE进行简单的模糊查询, REGEXP可以进行各种复杂匹配。

12:in与exists的区别

参考答案:

       exists用于检查子查询是否至少会返回一行数据,该子查询实际上并不返回任何数据,而是返回值True或False。IN语句对于子查询的返回字段只能由一个。

       外层查询表小于子查询表,则用exists,外层查询表大于子查询表,则用in,如果外层和子查询表差不多,则爱用哪个用哪个。

13:varchar与char的区别以及varchar(50)中的50代表的含义

参考答案:

       char是一种固定长度的类型,varchar则是一种可变长度的类型,它们的区别是:

       char(M)类型的数据列里,每个值都占用M个字节,如果某个长度小于M,MySQL就会在它的右边用空格字符补足。在varchar(M)类型的数据列里,每个值只占用刚好够用的字节再加上一个用来记录其长度的字节。

       varchar(50)表示最多占用50个字符。

14:int(5)中5的含义

参考答案:

       int(M) M表示的不是数据的最大长度,只是数据宽度,并不影响存储多少位长度的数据。

       int类型数据的字节大小是固定的4个字节。int(5)和int(11)区别在于,显示的数据位数一个是5位一个是11位,在开启zerofill(填充零)情况下,若int(5)存储的数字长度是小于5的则会在不足位数的前面补充0,但是如果int(5)中存储的数字长度大于5位的话,则按照实际存储的显示(数据大小在int类型的4个字节范围内即可)。

15:BLOB 和 TEXT 有什么区别    

参考答案:

       TEXT与BLOB的主要差别就是BLOB保存二进制数据,TEXT保存字符数据。

       BLOB有4种类型:TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB。它们只是可容纳值的最大长度不同。TEXT也有4种类型:TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT。这些类型同BLOB类型一样,有相同的最大长度和存储需求。

       BLOB列没有字符集,并且排序和比较基于列值字节的数值值。TEXT列有一个字符集,并且根据字符集的校对规则对值进行排序和比较。

       BLOB和TEXT列不能有默认值。

16:drop,delete与truncate的区别

参考答案:

       delete

         1、delete是DML,执行delete操作时,每次从表中删除一行,并且同时将该行的的删除操作记录在redo和undo表空间中以便进行回滚(rollback)和重做操作,但要注意表空间要足够大,需要手动提交(commit)操作才能生效,可以通过rollback撤消操作。

         2、delete可根据条件删除表中满足条件的数据,如果不指定where子句,那么删除表中所有记录。

         3、delete语句不影响表所占用的extent,高水线(high watermark)保持原位置不变。

         truncate

      1、truncate是DDL,会隐式提交,所以,不能回滚,不会触发触发器。

      2、truncate会删除表中所有记录,并且将重新设置高水线和所有的索引,缺省情况下将空间释放到minextents个extent,除非使用reusestorage,。不会记录日志,所以执行速度很快,但不能通过rollback撤消操作(如果一不小心把一个表truncate掉,也是可以恢复的,只是不能通过rollback来恢复)。

      3、对于外键(foreignkey)约束引用的表,不能使用truncate table,而应使用不带where 子句的delete语句。

      4、truncate table不能用于参与了索引视图的表。

      drop

      1、drop是DDL,会隐式提交,所以,不能回滚,不会触发触发器。

      2、drop语句删除表结构及所有数据,并将表所占用的空间全部释放。

      3、drop语句将删除表的结构所依赖的约束,触发器,索引,依赖于该表的存储过程/函数将保留,但是变为invalid状态。

mysql中低于60或高于90但不包含_数据库查询求小于

安全与优化篇

1:MySQL 服务器默认端口是什么

参考答案:

       MySQL 服务器的默认端口是 3306。

2:mysql怎样进行用户权限管理

参考答案:

       可以通过如下方面进行用户权限管理:

       1、限制用户访问哪些库、哪些表

       2、限制用户对哪些表执行SELECT、CREATE、DELETE、DELETE、ALTER等操作

       3、限制用户登录的IP或域名

       4、限制用户自己的权限是否可以授权给别的用户

3:MySQL有哪些日志,分别是什么用处

参考答案:

       mysql日志一般分为5种

       1、错误日志:-log-err (记录启动,运行,停止mysql时出现的信息)

       2二进制日志:-log-bin (记录所有更改数据的语句,还用于复制,恢复数据库用)

       3查询日志:-log (记录建立的客户端连接和执行的语句)

       4慢查询日志:-log-slow-queries (记录所有执行超过long_query_time秒的所有查询)

       5、更新日志: -log-update (二进制日志已经代替了老的更新日志,更新日志在MySQL5.1中不再使用)

4:sql注入的主要特点与危害

参考答案:

       Sql注入变种极多,攻击简单,危害极大,主要有:

       1、未经授权操作数据库的数据

       2、恶意纂改网页

       3、私自添加系统账号或者是数据库使用者账号

       4、网页挂木马

5:如何提高insert性能

参考答案:

       1合并多条 insert 为一条,即: insert into t values(a,b,c),  (d,e,f) ,,,

       2、修改参数 bulk_insert_buffer_size, 调大批量插入的缓存;

       3、设置 innodb_flush_log_at_trx_commit = 0 ,相对于innodb_flush_log_at_trx_commit = 1 可以十分明显的提升导入速度;

       4、手动使用事务

       因为mysql默认是autocommit的,这样每插入一条数据,都会进行一次commit;所以,为了减少创建事务的消耗,我们可用手工使用事务,即STARTTRANSACTION;insert 。。,insert。。commit;即执行多个insert后再一起提交;一般1000条insert 提交一次。

6、数据库优化的思路

参考答案:

       可以从以下方面进行展开

       1、SQL语句优化

       2、索引优化

       3、数据库结构优化

              范式优化: 比如消除冗余

              反范式优化:比如适当加冗余等(减少join)

              拆分表:垂直拆分和水平拆分

       4、服务器硬件优化

7、列举一些sql语句优化方法

8:如何优化 DISTINCT

9:explain出来的各种item的意义

10:profile的意义以及使用场景

11:mysql如何实现高效分页

12:如何进行分库分表

13新创建的数据库,需要调整哪些参数