mysql
SQL和NOSQL关系型数据库和非关系型数据库的区别是,关系型数据库支持ACID,扩展比较难数据结构固定,对于复杂的关联查询性能好,非关系型数据库扩展比较方便数据结构比较松散,对于查询和写入性能好。
关系型数据库有mysql,Oracle。
非关系型数据库有redis,mongoDB。
外键约束主要是用来关联表和表之间的联系。
数据库的三大范式1. 每列的不可分割原子性 2. 关键字的直接依赖关系 3. 我自己理解的话第二跟第三是一样的。
连表查询有内连接,左外连接,右外连接,全外连接。
mysql如何避免重复插入数据,设置列unique唯一约束,或者可以选择更新操作,或者选择忽略该数据。
char和varchar的区别是char是固定字符串长度,存储效率比较好,可以存储电话号码这些固定长度数据。varchar是可变长字符串,可以根据实际长度去存储,节省存储空间。
mysql的关键字in和exist,in是全表查询,判断里面是否拥有,exist是查询到之后就不再查询了。
mysql的存储引擎,默认是innoDB,还有myisam,memory。
innoDB具有ACID事物支持,行级锁,外键约束,适用于高并发的读写操作和数据的完整性。
myisam仅支持表级锁,在并发和数据完整性比较差,但读取性能好。
数据库挂掉之后使用redolog恢复数据(innoDB,myisam不支持)。
索引是给数据添加一个地址,就像字典的目录,可以提高数据的查询效率。
聚簇索引是一级索引根据关键字直接查询到所有数据。
非聚簇索引是二级索引,需要先查询到关键字,再根据关键字查询到数据,属于回表查询。
mysql中的索引是使用了b+树作为索引的数据结构。
b+树的叶子节点才存放数据,非叶子节点存放键值和索引地址,叶子节点还形成一个双向链表,所以叶子节点都在同一层,还能进行范围查询和顺序查询。
b树在叶子节点和非叶子节点都会存放数据和索引,性能不稳定,没有双向链表不能范围查询。
联合索引需要注意是否会失效,当联合(a,b,c)索引,查(b,c)会失效等。
覆盖索引就是能在索引查询中获取到你要的数据就不用回表查询了。
索引也是要分配内存的,并不是越多越好,当数据太大的时候,也会影响增删改的性能,因为增删改的时候也要动态的维护索引。
关系型数据库有mysql,Oracle。
非关系型数据库有redis,mongoDB。
外键约束主要是用来关联表和表之间的联系。
数据库的三大范式1. 每列的不可分割原子性 2. 关键字的直接依赖关系 3. 我自己理解的话第二跟第三是一样的。
连表查询有内连接,左外连接,右外连接,全外连接。
mysql如何避免重复插入数据,设置列unique唯一约束,或者可以选择更新操作,或者选择忽略该数据。
char和varchar的区别是char是固定字符串长度,存储效率比较好,可以存储电话号码这些固定长度数据。varchar是可变长字符串,可以根据实际长度去存储,节省存储空间。
mysql的关键字in和exist,in是全表查询,判断里面是否拥有,exist是查询到之后就不再查询了。
mysql的存储引擎,默认是innoDB,还有myisam,memory。
innoDB具有ACID事物支持,行级锁,外键约束,适用于高并发的读写操作和数据的完整性。
myisam仅支持表级锁,在并发和数据完整性比较差,但读取性能好。
数据库挂掉之后使用redolog恢复数据(innoDB,myisam不支持)。
索引是给数据添加一个地址,就像字典的目录,可以提高数据的查询效率。
聚簇索引是一级索引根据关键字直接查询到所有数据。
非聚簇索引是二级索引,需要先查询到关键字,再根据关键字查询到数据,属于回表查询。
mysql中的索引是使用了b+树作为索引的数据结构。
b+树的叶子节点才存放数据,非叶子节点存放键值和索引地址,叶子节点还形成一个双向链表,所以叶子节点都在同一层,还能进行范围查询和顺序查询。
b树在叶子节点和非叶子节点都会存放数据和索引,性能不稳定,没有双向链表不能范围查询。
联合索引需要注意是否会失效,当联合(a,b,c)索引,查(b,c)会失效等。
覆盖索引就是能在索引查询中获取到你要的数据就不用回表查询了。
索引也是要分配内存的,并不是越多越好,当数据太大的时候,也会影响增删改的性能,因为增删改的时候也要动态的维护索引。