1.为什么要使用数据库

  • 数据保存在内存
    • 优点: 存取速度快
    • 缺点: 数据不能永久保存
  • 数据保存在文件
    • 优点: 数据永久保存
    • 缺点:
      • 速度比内存操作慢,频繁的IO操作。
      • 查询数据不方便
  • 数据保存在数据库

    • 数据永久保存
    • 使用SQL语句,查询方便效率高。
    • 管理数据方便

      2.mysql有关权限的表都有哪几个

  • user权限表:记录允许连接到服务器的用户帐号信息,里面的权限是全局级的。

  • db权限表:记录各个帐号在各个数据库上的操作权限。
  • table_priv权限表:记录数据表级的操作权限。
  • columns_priv权限表:记录数据列级的操作权限。
  • host权限表:配合db权限表对给定主机上数据库级操作权限作更细致的控制。

这个权限表不受GRANT和REVOKE语句的影响。

3.MySQL的binlog有有几种录入格式?分别有什么区别?

有三种格式,statement,row和mixed。

  • statement模式下

每一条会修改数据的sql都会记录在binlog中。不需要记录每一行的变化,减少了binlog日志量,节约了IO,提高性能。由于sql的执行是有上下文的,因此在保存的时候需要保存相关的信息,同时还有一些使用了函数之类的语句无法被记录复制。

  • row级别下

不记录sql语句上下文相关信息,仅保存哪条记录被修改。记录单元为每一行的改动,基本是可以全部记下来但是由于很多操作,会导致大量行的改动 (比如alter table),因此这种模式的文件保存的信息太多,日志量太大。

  • mixed

一种折中的方案,普通操作使用statement记录,当无法使用 statement的时候使用row。

4.mysql有哪些数据类型

  • 1、整数类型

    包括TINYINT、SMALLINT、MEDIUMINT、INT、 BIGINT,分别表示1字节、2字节、3字节、4字节、8字节整数。任何整数类型都可以加上UNSIGNED属性,表示数据是无符号的,即非负整数。

  • 2、实数类型

    包括FLOAT、DOUBLE、DECIMAL。 DECIMAL可以用于存储比BIGINT还大的整型,能存储精确的小数。 而FLOAT和DOUBLE是有取值范围的,并支持使用标准的浮点进行近似计算。 计算时FLOAT和DOUBLE相比DECIMAL效率更高一些。

  • 3、字符串类型

    包括VARCHAR、CHAR、TEXT、BLOB VARCHAR用于存储可变长字符串,它比定长类型更节省空间。 VARCHAR使用额外1或2个字节存储字符串长度。列长度小于255字节时,使用 1字节表示,否则使用2字节表示。

    • VARCHAR存储的内容超出设置的长度时,内容会被截断。
    • CHAR是定长的,根据定义的字符串长度分配足够的空间。
    • CHAR会根据需要使用空格进行填充方便比较。
    • CHAR适合存储很短的字符串,或者所有值都接近同一个长度。
    • CHAR存储的内容超出设置的长度时,内容同样会被截断。
  • 4、枚举类型

    把不重复的数据存储为一个预定义的集合。有时可以使用ENUM代替常用的字符串类型。 ENUM存储非常紧凑,会把列表值压缩到一个或两个字节。 ENUM在内部存储时,其实存的是整数。 尽量避免使用数字作为ENUM枚举的常量,因为容易混乱。 排序是按照内部存储的整数

  • 5、时间和日期类型

    尽量使用timestamp,空间效率高于datetime, 用整数保存时间戳通常不方便处理。

5.CHAR比VARCHAR的使用策略

  • 对于经常变更的数据来说,CHAR比VARCHAR更好,因为CHAR不容易产生碎片。
  • 对于非常短的列,CHAR比VARCHAR在存储空间上更有效率。 使用时要注意只分配需要的空间,更长的列排序时会消耗更多内存。0~M个字节的定长字节字符 串
  • 尽量避免使用TEXT/BLOB类型,查询时会使用临时表,导致严重的性能开销

    6.JOIN查询

    1.1.基础篇 - 图1

  • left join(左联接) 返回包括左表中的所有记录和右表中关联字段相等的记录

  • right join(右联接) 返回包括右表中的所有记录和左表中关联字段相等的记录
  • inner join(等值连接) 只返回两个表中关联字段相等的行