数据储存的问题:
数据冗余和不一致 数据访问困哪 数据孤立 完整性 原子性问题 例如AB2个账户,从A中向B转钱,不管如何转,A和B的总量是保持不变的。只要A减少,B就增加。 并发访问异常 安全性问题 文件的分层: 表示层:看到的文件 逻辑层:文件系统,存储引擎 物理层:元数据+数据 关系型数据库的结构: 表示层:库、表、索引等等 逻辑层:存储引擎(解构) 物理层:数据文件关系型数据库的工作流程结构: 发起查询(应用程序、sql用户、程序员、dba等) --> 查询管理器(各种解释器 --> 查询执行引擎) --> 存储管理器(各种管理器) --> 写入磁盘( 数据文件、索引文件、日志文件等)关系运算: 选择(选择元组): 只输出符合条件的行。 指定以某字段作为搜索码,做逻辑运算,筛选符合条件的行。 投影(选择属性): 只输出指定字段的属性。 显示部分指定字段,筛选符合条件的列。 自然连接: 只输出2张表中字段名相同,属性值相同的行的连接。2张表建立了一个等值连接。 例如有2张表,表A中字段名称USERNAME,对应的属性值为X,同一行中另一个字段为SHELL,属性值为Y,和表B中的字段名称为SHELL,属性为Y相同。B中同一行中另一个字段为SHELLTYPE,属性值为Z 。则自然连接显示为 X Y Y Z。其余输出以此类推。 笛卡尔集(交叉连接): 参照(a+b)*(c+d)=ac+ad+bc+bd此公式。此时不考虑表之间的关系。 假设表A中,字段有USERNAME(tom 、jerry、mike)、SHELLNUM(1、2、3)。表B中有字段QQ(qq1、qq2、qq3)、TYPE(use、lock、use)。则输出为3*3 共计9行: tom 1 qq1 use tom 1 qq2 lock tom 1 qq3 use jerry 2 qq1 use jerry 2 qq2 lock jerry 2 qq3 use mike 3 qq1 use mike 3 qq2 lock mike 3 qq3 user 注意:多表查询本质上就是先在内存中生成笛卡尔集,然后再查询,生成过程极大占用资源。 并(集合运算): 2张表中都有的部分称为并。SQL查询语句: DDL 完整性定义语言 DML 视图定义 事物控制 嵌入式SQL和动态SQL DCL使用程序设计语言如何跟RDBMS交互: 嵌入式SQL: 类似与动态SQL,但其语句必须在程序编译时完全确定。比动态SQL更底层。例如ODBC(c)。注意ODBC是介于嵌入式和动态中间,不完全是嵌入式。 动态SQL: 程序设计语言使用函数或方法,与RDBMS服务器简历建立连接,向SQL服务器发送查询语句,将结果保存到变量中,而后进行处理。例如JDBC(java)。