PHP 三年模拟五年面试之一网打尽系列(1)----- MySQL 基础

MySQL 数据类型

一、整数类型

  1. 包括:TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT
  2. 属性:UNISINGED
  3. 取值范围:
    - TINYINT:有符号的范围是-128 到 - 127,无符号的范围是 从 0 到 255 的整型数据。一位大小为 1 字节。
    - SMALLINT:有符号的范围是-2^15 (-32,768) 到 2^15 - 1 (32,767) 的整型数据,无符号的范围是0到65535。一位大小为 2 个字节。
    - MEDIUMINT:有符号的范围是-8388608到8388607,无符号的范围是0到16777215。 一位大小为3个字节。
    - INT:有符号的范围是-2^31 (-2,147,483,648) 到 2^31 - 1 (2,147,483,647) 的整型数据(所有数字),无符号的范围是0到4294967295。一位大小为 4 个字节。
    - BIGINT:有符号的范围是-2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型数据(所有数字),无符号的范围是0到18446744073709551615。一位为 8 个字节。
  4. 注意:可以为整数类型指定宽度,例如:INT(11)、对大多数应用是没有意义的,他不会限制值的合法范围,只会影响显示字符的个数。

二、实数类型

  1. 包括:FLOAT、DOUBLE、DECIMAL
  2. 介绍:DECIMAL可存储比BIGINT还大的整数;可以用于存储精确的小数。FLOAT和DOUBLE类型支持使用标准的浮点进行近似计算

三、字符串类型

  1. 包括:VARCHAR、CHAR、TEXT、BLOB
  2. 注意:
    - varchar 类型用户存储可变长字符串,他比定长类型更节省空间。varchar使用1或者2个额外字节记录字符串的长度,列长度小于255字节,使用一个字节表示,否则使用2个。如果存储内容超出指定长度,会被截断。
    - char 是定长的,根据定义的字符串长度,分配足够的空间。 char会根据需要采用空格进行填充以方便比较。 char适合存储很短的字符串,或者所有值都接近同一长度(比如MD5加密的密码:char(32))。char长度超出设定的长度,会被截断。
    - 对于经常变更的数据,char比varchar更好,char不容易产生碎片。对于非常短的列,char比varchar在存储空间上更有效率。更长的列会消耗更多的内存。
    - 尽量避免使用 blob/text 类型,查询会使用临时表,导致严重的性能开销

四、枚举类型(EUNM)

  1. 注意细节:
    - 有时可以使用枚举代替常用的字符串类型,把不重复的集合存储成一个预定义的集合。
    - 枚举类型非常紧凑,把列表值压缩到一个或者两个字节内部存储的是整数。
    - 尽量避免使用数字作为枚举的常量,避免混乱。
    - 排序是按照内部存储的整数进行排序的。
    - 枚举表会使表大小大大减小

五、日期和时间

- 尽量使用TIMESTAMP,比DATETIME空间效率高
- 用整数保存时间戳的格式通常不方便处理
- 如果需要存储微秒,可以使用bigint存储

数据表引擎

InnoDB表引擎

- 默认事务型引擎,最主要最广泛的存储引擎,性能非常优秀
- 数据存储在共享表空间,可以通过配置分开
- 对主键查询的性能高于其他类型的存储引擎
- 内部做了很多优化,从磁盘读取数据时自动在内存构建hash索引,插入数据时自动构建插入缓冲区
- 通过一些机制工具支持真正的热备份
- 支持崩溃后的安全恢复
- 支持行级锁
- 支持外键

MyISAM表引擎

- 5.1版本前,MyISAM是默认的存储引擎
- 拥有全文索引、压缩、空间函数
- 不支持事务和行级锁,不支持奔溃后的安全恢复
- 表存储在两个文件,MYD和MYI
- 设计简单,某些场景下性能很好

锁机制

表锁是日常开发中常见的问题,因此也是面试当中最常见的考察点,当多个查询同一时刻进行数据修改时,就会产生并发控制的问题。共享锁和排他锁,其实就是读锁和写锁。

- 写锁:排他的,一个写锁会阻塞其他的写锁和读锁,这样可以只允许一个人进行写入,防止其他用户读取正在写入的资源。
- 读锁:共享的,不堵塞。多个用户可以同时读一个资源,互不干扰
- 表锁:系统性能开销最小,会锁定整张表,MyISAM使用表锁
- 行锁:最大程度地支持并发处理,但是也带来了最大的锁开销,InnoDB 实现行级锁
本作品采用《CC 协议》,转载必须注明作者和本文链接
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!