1.数据库三大范式
-
第一范式:确保每列保持原子性,数据表中的所有字段值都是不可分解的原子值。
-
第二范式:确保表中的每列都和主键相关。
-
第三范式:确保每列都和主键列直接相关而不是间接相关。
2. MySql几种引擎,有什么区别
特性 | InnoDB | MyISAM | MEMORY |
---|---|---|---|
事物安全 | 支持 | 不支持 | 不支持 |
对外建的支持 | 支持 | 不支持 | 不支持 |
存储限制 | 64TB | 有 | 有 |
空间使用 | 高 | 低 | 低 |
内存使用 | 高 | 低 | 高 |
插入数据的速度 | 低 | 高 | 高 |
2.1、 InnoDB、MyISAM 对比
-
InnoDB支持事务,MyISAM不支持。
-
InnoDB 支持外键,而 MyISAM 不支持。
-
InnoDB是聚集索引,数据文件是和索引绑在一起的,必须要有主键。MyISAM是非聚集索引,索引和数据文件是分离的,索引保存的是数据文件的指针。主键索引和辅助索引是独立的。
-
InnoDB 不保存表的具体行数。MyISAM 用一个变量保存了整个表的行数。
-
Innodb 有 redolog 日志文件,MyISAM 没有。
-
Innodb存储文件有frm、ibd,而Myisam是frm、MYD、MYI。
-
Innodb:frm是表定义文件,ibd是数据文件。
-
Myisam:frm是表定义文件,myd是数据文件,myi是索引文件。
-
InnoDB 支持表、行锁,而 MyISAM 支持表级锁。
-
InnoDB 必须有唯一索引(主键),如果没有指定的话 InnoDB 会自己生成一个隐藏列 Row_id 来充当默认主键,MyISAM 可以没有。
3. 为什么要使用自增主键?
1.普通索引的 B+ 树上存放的是主键索引的值,如果该值较大,会「导致普通索引的存储空间较大」
2.使用自增 id 做主键索引新插入数据只要放在该页的最尾端就可以,直接「按照顺序插入」,不用刻意维护
3.页分裂容易维护,当插入数据的当前页快满时,会发生页分裂的现象ÿ