翻译自:

  1. 如何定义SQL?

    SQL代表的是结构化查询语言(Structured Query Language)。SQL是一门专门在关系型数据库管理系统中管理数据的编程语言。

  2. 什么是RDBMS?解释其特性?

    Relational Database Management System(RDBMS)是在关系数据库模型中最广泛使用的数据库管理系统。

    RDBMS的特性:

    • 在表中存储数据
    • 表中含有行和列
    • 可以通过SQL创建和检索表
  3. 什么是数据挖掘?

    数据挖掘是计算机科学的子分类,其目的是从数据集中提取信息,并且将其转换成人类友好的结构在以后使用。

  4. 什么是ERD?

    ERD代表实体关系模型(Entity Relationship Diagram),其中图形代表了表,它们之间是它们的关系。

  5. Primary Key主键和Unique Key有什么区别?

    Primary和Unique都是实现了列值的唯一性。主键为列创建了聚集索引,而Unique key创建了非聚集索引。并且主键不允许NULL值,而Unique key允许NULL值。

  6. 如何在数据库中存储图片文件。使用了哪种对象类型?

    在数据库存储图片不是个好主意。为了在数据库中存储图片,Blob对象类型是被推荐的。BLOB是一个二进制大对象,可以容纳可变数量的数据。而TEXT列被视为非二进制字符串(字符字符串)。

  7. 什么是数据仓库?

    数据仓库一般是指企业数据仓库,是一个集中数据仓库,使用不同数据源来创建的。

  8. 数据库中的索引是什么,索引有哪几种类型?

    索引是在数据库进行数据快速索引的快速引用。有两种不同的索引类型:

    • 聚集索引
      • 在一个表中只有一个
      • 查询的时候比非聚集索引要快,因为数据是按照索引顺序存储
    • 非聚集索引

      • 可以在一个表中使用多次
      • 比聚集索引可以更快的插入和更新

      聚集索引,该索引中键值的逻辑顺序决定了表中相应行的物理顺序,因此一个表只能包含一个聚集索引。但该索引可以包含多个列(组合索引)。聚集索引对于那些经常要搜索范围值的列特别有效。使用聚集索引找到包含第一个值的行后,便可以确保包含后续索引值的行在物理相邻。如果对从表中检索的数据进行排序时经常要用到某一列,则可以将该表在该列上聚集(物理排序),避免每次查询该列时都进行排序,从而节省成本。当索引值唯一时,使用聚集索引查找特定的行也很有效率。例如,使用唯一雇员 ID 列emp_id查找特定雇员的最快速的方法,是在emp_id列上创建聚集索引或PRIMARY KEY约束。

      非聚集索引,该索引中索引的逻辑顺序与磁盘上行的物理存储顺序不同。索引是通过二叉树的数据结构来描述的,我们可以这么理解聚集索引:索引的叶节点就是数据节点。而非聚簇索引的叶节点仍然是索引节点,只不过有一个指针指向对应的数据块。因为聚集索引的数据的逻辑顺序和物理顺序是一致的,而非聚集索引的逻辑顺序和数据的物理顺序不同,所以最后的叶节点是一个指向对应数据块的。

      一个例子就是字典中按拼音查询和按部首查询。也就是说部首的目录纯粹是目录,正文纯粹是正文的排序方式是非聚集索引,两个不相关联,因此一个表中可以有多个非聚合索引。每个表只有一个聚集索引,因为一个数据集只有一种物理存放顺序。

      那么何时使用聚集索引,何时使用非聚集索引呢

    • 返回某范围内的数据:应该使用聚集索引,而不应该使用非聚集索引,因为非聚集索引即使逻辑顺序对了,但是物理顺序仍然不对,所以没用。

    • 频繁更新的列:不应该使用聚集索引,而应该使用非聚集索引,因为如果使用聚集索引,就会导致物理结构的变化,不好。

      所以聚集索引一般可以加快查询的速度,但是更新就不行了

  9. 在MySQL中有多少可能的Triggers?

    • Before Insert
    • After Insert
    • Before Update
    • After Update
    • Before Delete
    • After Delete

      一个示例,CREATE TRIGGER ins_sum BEFORE INSERT ON account FOR EACH ROW SET @SUM=@SUM+NEW.amount;

  10. 什么是堆表(Heap table)?

    存在内存中的表叫做Heap tables。这些表是内存表,这些内存表没有像BLOB或者TEXT的数据类型。没有AUTO_INCREMENT。他们可以使用索引使得它们更快,索引是针对少量特定字段的值拿出来进行排序存储,并记录在表中的位置, 而因为索引是有序的, 所以就会很容易通过索引查询到具体的记录位置, 然后再根据记录位置直接从表中读取该记录。数据存储没有任何的顺序,插入数据也没顺序。由于数据没有任何顺序,查询数据会非常慢,但是写入操作会比较快。还有就是上面介绍的表Index-Organized table,直接就是索引表,表中数据本身就是有序的, 这样查询表的时候就可以快速的找到符合条件的记录位置。

  11. 如何控制HEAP表的最大大小?

    可以使用MySQL配置max_heap_table_size来控制HEAP表的大小

  12. FLOAT和DOUBLE的区别?

    FLOAT存储了8位精度的浮点数,并且有4字节。DOUBLE存储了18位精度的浮点数,有8字节。MySQL 浮点型和定点型可以用类型名称后加(M,D)来表示,M表示该值的总共长度,D表示小数点后面的长度。

  13. 什么是BLOB?

    表示binary large object,二进制大对象,可以存储可变数量的数据。有4种不同类型的BLOB,基于可以存储的最大数量

    • TINYBLOB
    • BLOB
    • MEDIUMBLOB
    • LONGBLOB
  14. 什么是TEXT?

    TEXT是大小写不敏感的BLOB,有4种类型

    • TINYTEXT
    • TEXT
    • MEDIUMTEXT
    • LONGTEXT
  15. BLOB和TEXT的区别是什么?

    在BLOB中,排序和比较是大小写敏感的,在TEXT中排序和比较是大小写不敏感的。

  16. MyISAM表是怎么存储的?

    MyISAM表在磁盘上以三种方式存储

    • .frm文件,存储了表的定义
    • .MYD(MYData) 数据文件
    • .MYI(MYIndex) 索引文件
  17. 解释MyISAM相对于InnoDB的优点?

    MyISAM在磁盘管理中遵循了更保守的方法,将每个MyISAM表存储在了单独的文件中,如果需要可以进行更进一步的压缩。而InnoDB将表存储在tablespace,进一步的优化比较困难,但是InnoDB支持事务和外键。MyISAM读能快点,Innodb写快点。

  18. 如果在MySQL中连接字符串?

    select concat('a', 'b', 'c');

  19. 如果在MySQL中获取当前日期?

    select current_date();