- 第一范式:强调列的原子性——数据库的每一列都是不可分割的原子数据项。
- 第二范式:要求实体属性完全依赖于主关键字——指不能存在仅依赖主关键字一部分的属性。
- 第三范式:任何非主属性不依赖于其它非主属性。
原子性、一致性、隔离性、持久性
Atomicity: 一个事务从开始到结束,要么全完成要么全失败。若在执行过程中发生错误,会被恢复(RollBack)到事务开始前的状态,之前就像没发生过。
Consistency: 在事务开始的前后,数据库的完整性没有被破坏。指写入的资料必须完全符合所有的预设约束、触发器、级联回滚等。
Isolation: 在多个并发事务同时对其数据进行读写和修改时,能防止多个事务并发执行时由于交叉执行而导致的数据不一致。隔离级别分为:读未提交、读提交、可重复读、序列化。
Durability: 事务处理结束后,对数据的修改是永久的,即使系统故障也不会丢失。
内连接:inner join —— 将匹配的关联数据显示出来。
左连接:left join —— 左边的表全显示,右边的表只显示符合条件的数据。
右连接:right join —— 和左连接相反。
索引是满足某种特定查找算法的数据结构,这些数据结构会以某种方式指向数据,以达到高效查找数据。
不同的数据引擎实现会有所不同,如今主流的数据库引擎的索引都是B+树实现的,其效率能达到二分法的性能,找到数据区域后就找到了完整的数据结构了。
mysql的事务隔离是在MySQL.ini配置文件里的最后添加的:transcation-isolation=REPEATABLE-READ。
可用配置值:(读未提交、读提交、可重复读、序列化)
- READ-UNCOMMITTED:最低隔离级别,事务未提交前可被其它事务读取。(会出现幻读、脏读、不可重复读)
- READ-COMMITTED:一个事务提交后才能被其它事务读取。(会出现幻读、不可重复读)
- REPEATABLE-READ:默认,保证多次读取同一数据时,其值与事务开始时的内容是一致的,禁止读取到别的事物未提交的数据(会出现幻读)
- SERIALIZABLE:代价最高最可靠隔离级别,能防止幻读、脏读、不可重复读。
char和varchar的区别?幻读:在同一事物内多次查询返回的结果集不一样。其他原因也可出现:当另一事物新增、删除或修改了第一个事物结果集里的数据,同一记录里的数据内容被修改了,所有的数据行的记录就会变多或变少。
脏读:一个事物能读取另一事物中未提交的数据。
不可重复读:在同一事物内多次读取同一数据。
char:固定长度类型
varchar:可变长度类型
从空间出发varchar合适,从效率出发char合适。
float:可存储8位的十进制数,内存中占4字节。
double:可存储16位的十进制数,内存中占8字节。



