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
9CREATE 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 之后成为默认的存储引擎。