数据储存的问题:
数据冗余和不一致
数据访问困哪
数据孤立
完整性
原子性问题
例如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)。
本文出自 “小私的blog” 博客,请务必保留此出处http://ggvylf.blog.51cto.com/784661/1679318
原文地址:http://ggvylf.blog.51cto.com/784661/1679318