MySQL
基础
- MYSQL三范式 - 列不可分,即每一列都是最小的数据单元,确保列的原子性 
- 必须有主键,非主键属性必须完全依赖主键,假如有复合主键也不得只依赖一部分 
- 非主键属性不得相互依赖,任何非主属性不得依赖其他非主属性 - 如:「用户表」里有部门表的id字段就可以了,不需要再添加部门表的name什么的 
 
- MYSQL反范式 - 通过增加冗余数据来提高查找效率 - 如:在 用户表 与 角色表 中间 增加 用户-角色表 
- MYSQL是什么? - MSQL是一个传统的RDBM数据库,也就是关系型数据库,广泛运用于OLTP场景 
- ACID是什么? - 它是原子性、一致性、隔离性和持久性 - 原子性:一个事务只有成功和失败两种状态
- 一致性:事务只会同时成功或同时失败,状态一定是一致的
- 隔离性:事务之间相互不影响
- 持久性:事务执行完成后,对数据所做的操作会一直保存在数据库中
 
- SQL命令你知道有哪几类吗? - SQL命令分为5类,分别有DDL,DML,DQL,DCL和TCL - DDL(数据定义语言)用于定义数据库结构,如常见的创建表、删除表等操作 
- DQL(数据查询语言)用于从数据库检索数据,如常见的SELECT 
- DML(数据操作语言)用于从数据库操作数据,如常见的INSERT、UPDATE和DELETE 
- DCL(数据控制语言)用于处理数据库权限,如创建用户,授权用户,删除用户等 
- TCL(事务控制语言)用于控制事务的下执行 
 
- varchar和char的区别是什么? - char是一种固定长度的字符串类型,无论字符串长短,都会占用固定长度的空间。
- vachar是一种可变长度的字符串类型。虽然varchar在磁盘占用的是真实长度的空间大小,但是varchar的设置的长度会影响内存占用,加载时内存会按照最大长度来分配空间,显然会产生一些不利影响。
 
- 既然varchar是可变长度,那是不是平时用varchar比char更好? - 不是的。char在磁盘分配的空间是固定的,varchar当更改前后数据长度不一致的时候,就会出现碎片的问题,需要进行碎片消除作业,也是额外的成本。因此,长度固定的字段一般用char比较好。 
- varchar(11)和int(11)中的11,有什么区别? - varchar中的11代表最大的可变长度,int中的11对大多数应用没有实质上的意义,不会影响存储的空间。 
- 能说说 - delete和- truncate的区别吗?- delete是单行删除,- truncate是整表删除
- delete删除后不会释放空间,只是标记删除了;- truncate删除后会释放空间
- truncate效率更高
- delete后该行的id会一直被占用;- truncate后id是从0开始
- delete是DML语句,会产生redo log;- truncate是DDL语句
 
- 主键和外键分别是什么? - 主键(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)
 );
 
- MYSQL有哪些存储引擎? - MySQL 存储引擎有 MyISAM 、InnoDB、Memory,其中 InnoDB 是在 MySQL 5.5 之后成为默认的存储引擎。 
索引











