目录
11. 进程通信的方式,匿名管道,命名管道如何生成,信号怎么生成,头文件
【一面】
1. 关系型数据库和非关系型数据库
1)关系型数据库
关系型数据库是一个结构化的数据库,创建在关系模型(二维表格模型)基础上,一般面向记录。
SQL语句(标准数据查询语言)就是一种基于关系型数据库的语言,用于执行对关系型数据库中数据的检索和操作。
2)非关系型数据库
NoSQL(NoSQL = Not Only SQL),意思是“不仅仅是SQL”,是非关系型数据库的总称。
出来主流的关系型数据库外的数据库,都认为是非关系型,比较主流的NoSQL数据库有Redis、Hbase等。
3)两者差别
- 数据存储方式不同
- 关系型数据天然就是表格式的,因此存储在数据表的行和列中。数据表可以彼此关联协作存储,也很容易提取数据;
- 非关系型数据通常存储在数据集中·,就像文档、键值对或者图结构;
- 你的数据及其特性是选择数据存储和提取方式的首要影响因素;
- 扩展方式不同
- 为了支持更多并发量,SQL数据库是纵向扩展,也就是说提高处理能力,使用速度更快速的计算机,这样处理相同的数据集就更快了,因为数据存储在关系表中,操作的性能瓶颈可能设计很多个表,这都需要通过提高计算机性能来克服。虽然SQL数据库有很大扩展空间,但最终肯定会达到纵向扩展的上限;
- NoSQL数据库是横向扩展的。因为非关系型数据存储天然就是分布式的,NoSQL数据库的扩展可以通过给资源池添加更多普通的数据库服务器(节点)来分担负载。
- 对事务性的支持不同
- SQL数据库支持对事务原子性细粒度控制,并且易于回滚事务。如果数据操作需要高事务性或者复杂数据查询需要控制执行计划,那么传统的SQL数据库从性能和稳定性方面考虑是你的最佳选择;
- 虽然NoSQL数据库也可以使用事务操作,但稳定性方面没法和关系型数据库比较,所以它们真正闪亮的价值是在操作的扩展性和大数据量处理方面;
2. 关系型数据库的引擎
目前接触到的较多的关系型数据库当属Java开发中最常用的MySQL,而MySQL主要有两种存储引擎,分别是MyISAM和InnoDB;
1)MyISAM和InnoDB的区别
- 事务处理方面:
- MyISAM强调性能,查询速度比InnoDB快,但不提供事务支持;
- InnoDB提供事务支持;
- 外键:
- MyISAM不支持外键;
- InnoDB支持外键;
- 锁:
- MyISAM只支持表级锁;
- InnoDB支持标记锁与行级锁,默认是行级锁;
- 因此InnoDB适合插入和更新比较多的情况,MyISAM适合频繁查询的情况;
- 全文索引:
- MyISAM支持全文索引;
- InnoDB不支持全文索引(从MySQL5.6版本开始提供对全文索引的支持);
- 表主键:
- MyISAM:允许没有主键的表存在;
- InnoDB:如果没有设定主键,就会自动生成一个6字节的主键(用户不可见);
- 表的具体行数:
- MyISAM:select count(*) from table,MyISAM只需要独处保存好的函数,因为MyISAM内置了一个计数器;
- InnoDB:不保存具体的行数,执行select count(*) from table时,是扫描一遍整个表来计算有多少行;
3. SQL语句
- 选择:select * from table1 where 范围
- 插入:insert into table1(field1,field2) values(value1,value2)
- 删除:delete from table1 where 范围
- 更新:update table1 set field1=value1 where 范围
- 查找:select * from table1 where field1 like ’%value1%’ --(like的语法很精妙)
- 排序:select * from table1 order by field1,field2 [desc]
- 总数:select count as totalcount from table1
- 求和:select sum(field1) as sumvalue from table1
- 平均:select avg(field1) as avgvalue from table1
- 最大:select max(field1) as maxvalue from table1
- 最小:select min(field1) as minvalue from table1