基础

  1. MYSQL三范式

    1. 列不可分,即每一列都是最小的数据单元,确保列的原子性

    2. 必须有主键,非主键属性必须完全依赖主键,假如有复合主键也不得只依赖一部分

    3. 非主键属性不得相互依赖,任何非主属性不得依赖其他非主属性

      如:「用户表」里有部门表的id字段就可以了,不需要再添加部门表的name什么的

  2. MYSQL反范式

    通过增加冗余数据来提高查找效率

    如:在 用户表 与 角色表 中间 增加 用户-角色表

  3. MYSQL是什么?

    MSQL是一个传统的RDBM数据库,也就是关系型数据库,广泛运用于OLTP场景

  4. ACID是什么?

    它是原子性、一致性、隔离性和持久性

    • 原子性:一个事务只有成功和失败两种状态
    • 一致性:事务只会同时成功或同时失败,状态一定是一致的
    • 隔离性:事务之间相互不影响
    • 持久性:事务执行完成后,对数据所做的操作会一直保存在数据库中
  5. SQL命令你知道有哪几类吗?

    SQL命令分为5类,分别有DDL,DML,DQL,DCL和TCL

    • DDL(数据定义语言)用于定义数据库结构,如常见的创建表、删除表等操作

    • DQL(数据查询语言)用于从数据库检索数据,如常见的SELECT

    • DML(数据操作语言)用于从数据库操作数据,如常见的INSERT、UPDATE和DELETE

    • DCL(数据控制语言)用于处理数据库权限,如创建用户,授权用户,删除用户等

    • TCL(事务控制语言)用于控制事务的下执行

  6. varchar和char的区别是什么?

    • char是一种固定长度的字符串类型,无论字符串长短,都会占用固定长度的空间。
    • vachar是一种可变长度的字符串类型。虽然varchar在磁盘占用的是真实长度的空间大小,但是varchar的设置的长度会影响内存占用,加载时内存会按照最大长度来分配空间,显然会产生一些不利影响。
  7. 既然varchar是可变长度,那是不是平时用varchar比char更好?

    不是的。char在磁盘分配的空间是固定的,varchar当更改前后数据长度不一致的时候,就会出现碎片的问题,需要进行碎片消除作业,也是额外的成本。因此,长度固定的字段一般用char比较好。

  8. varchar(11)和int(11)中的11,有什么区别?

    varchar中的11代表最大的可变长度,int中的11对大多数应用没有实质上的意义,不会影响存储的空间。

  9. 能说说deletetruncate的区别吗?

    • delete是单行删除,truncate是整表删除
    • delete删除后不会释放空间,只是标记删除了;truncate删除后会释放空间
    • truncate效率更高
    • delete后该行的id会一直被占用;truncate后id是从0开始
    • delete是DML语句,会产生redo log;truncate是DDL语句
  10. 主键和外键分别是什么?

    • 主键(PRIMARY KEY)是表中的一个或多个字段,作为唯一标识区分表中的所有数据

    • 外键(FOREIGN KEY)是其他表里的主键,用于约束当前表的字段值的范围,维护两个表中数据的一致性

      创建外键用references tableName(id)

      1
      2
      3
      4
      5
      6
      7
      8
      9
      CREATE TABLE `order`(
      oid INT NOT NULL AUTO_INCREMENT,
      uid INT references user(id),
      order_no CHAR (11) NOT NULL,
      price DECIMAL (6, 1) DEFAULT 0.0,
      creat_time datetime NOT NULL,
      pay_time datetime NOT NULL,
      PRIMARY KEY (oid)
      );
  11. MYSQL有哪些存储引擎?

    MySQL 存储引擎有 MyISAM 、InnoDB、Memory,其中 InnoDB 是在 MySQL 5.5 之后成为默认的存储引擎。

索引