一、数据库三大范式
- 第一范式:每个列都不可以再拆分。
- 第二范式:在第一范式的基础上,非主键列完全依赖于主键,而不能是依赖于主键的一部分。
- 第三范式:在第二范式的基础上,非主键列只依赖于主键,不依赖于其他非主键。
二、MySQL有关权限的表都有哪些?
MySQL服务器通过权限表来控制用户对数据库的访问,权限表存放在MySQL数据库里,由mysql_install_db脚本初始化,包括下列五大权限表:
- user权限表:记录允许连接到服务器的用户帐号信息,里面的权限是全局级的。
- db权限表:记录各个帐号在各个数据库上的操作权限。
- table_priv权限表:记录数据表级的操作权限。
- columns_priv权限表:记录数据列级的操作权限。
- host权限表:配合db权限表对给定主机上数据库级操作权限作更细致的控制。这个权限表不受GRANT和REVOKE语句的影响。
三、数据类型使用策略
- 对于经常变更的数据来说,CHAR比VARCHAR更好,因为CHAR不容易产生碎片。
- 对于非常短的列,CHAR比VARCHAR在存储空间上更有效率。
- 使用时要注意只分配需要的空间,更长的列排序时会消耗更多内存。尽量避免使用TEXT/BLOB类型,查询时会使用临时表,导致严重的性能开销。
- 日期和时间类型,尽量使用timestamp,空间效率高于datetime,用整数保存时间戳通常不方便处理。
- 如果需要存储微妙,可以使用bigint存储。
- 尽量避免使用数字作为ENUM枚举的常量,因为容易混乱。排序是按照内部存储的整数
- 计算时FLOAT和DOUBLE相比DECIMAL效率更高一些,DECIMAL可以理解成是用字符串进行处理。
四、MyISAM与InnoDB存储引擎选择
1.场景选择
- 如果没有特别的需求,使用默认的Innodb即可。
- MyISAM:以读写插入为主的应用程序,比如博客系统、新闻门户网站。
- Innodb:更新(删除)操作频率也高,或者要保证数据的完整性;并发量高,支持事务和外键。比如OA自动化办公系统。
2.