第一篇:数据库总结
数据库总结:共三天的课程
数据库的概念:数据库是一组有序的数据的集合; 数据库的作用:为了有效的管理数据; 数据类型:
一 字符串相关的类型:一般用于人名、大于2147483647(10位数)的数字、地址等字符信息
使用格式:字段名 char(存放字符的长度)
或者
字段名
varchar(存放字符的长度)Char:代表的是定长的字符串类型,定义了多长,就分配多长的存储空间,只要不超过定义的长度,分配给char的空间长度就不会改变,余下的部分用空格代替;
Varchar:代表的是可变长度的字符串类型,定义的长度可以理解为是虚拟的空间,只要字符串的长度不超过定义的长度,那么varchar的分配空间长度就是字符串实际的长度,余下的部分自动消失; 二 数字相关的类型:一般用于工资、人数统计等方面; 使用格式:字段名
int/float/double 【此处不用定义字段的长度】 int :取值的范围-2147483648~2147483647,后面可以设置主键及自增长;
float/double:用于带有小数的数据定义 decimal:多用于金钱的数据 三 时间相关的数据类型:一般用于时间的统计,例如登录时间、修改时间、退出时间等;
使用格式:字段名
date/time/datetime/timestamp 【此处不用定义字段的长度】,插入表的时候格式与字符串的插入格式一样,都是用单引号插入
date:日期类型
格式:yyyy-MM-dd time:时间类型
格式:hh:mm:ss Datetime:日期时间
格式:yyyy-MM-dd hh:mm:ss Timestamp:时间戳
格式:yyyy-MM-dd hh:mm:ss 数据库的操作:
一 查看所有数据库:select databases;二 查看所有表:select tables;三 创建数据库:create database 数据库名称;
use 数据库名称;
四 创建表:create table 表名(字段1
类型(长度)[约束], 字段2
类型(长度)[约束], 字段n
类型(长度)[约束])注:字段n的结尾处不需要用逗号分隔
五 删除当前表/数据库:drop table 表名/ 数据库名;
六 向表中插入数据:insert into 表名(字段1,字段2,字段n)values(值1,值2,值n),(值1,值2,值n),(值1,值2,值n),(值1,值2,值n)...注:此处的插入数据可以用逗号隔开,想要插入几条数据就插入几个值。
七 查看当前表的值:select * from 表名
注:*是通配符,代表全部的意思,此处*还可以用表中的字段名代替,那么查看就是相应的字段名下的数据。
约束:
一 主键约束:primary key 代表的是唯
一、不重复,非空的约束 使用格式: 字段名
类型(长度)primary key 自增长:auto_increment 必须与主键约束一同使用,字段的类型是整型,插入数据的时候可以不用向设置自增长的字段添加数据,起始的默认数字是:1 二 唯一约束:unique 不可以重复,唯一 使用格式: 字段名
类型(长度)unique 注:空格是不可以作为字符串使用的,空格相当于null,如果向设置unique的字段内插入数据是存在【‘空格’、null、(‘’)】当中两个或两个以上的时候就会报错【’null’是字符串,不是空】 三 非空约束:not null 插入数据时必须要为设置not null的字段插入数据,这个字段不能为空
使用格式: 字段名
类型(长度)not null 注:空格是不可以作为字符串使用的,空格相当于null,如果向设置not null的字段内插入数据是存在【‘空格’、null、(‘’)】当中一个或一个以上的时候就会报错
四 默认约束:default 为字段设置默认值,当不为设置默认约束的字段插入数据是,系统自动将默认值赋予这个字段 使用格式: 字段名
类型(长度)default 值 五 检查约束:check(检查的内容)使用格式: 字段名
类型(长度)check(检查的内容)注:在SQL语句中没有实际的含义,但是需要会用
六 外键约束:foreign key 必须是另一个表的主键(唯一的),设置了外键的字段,受到关联表中相应主键的字段的约束,当要为外键约束插入数据的时候,必须先为被关联的表插入相应主键的数据;
使用格式: 创建表时候就设置外键约束
字段名
类型(长度),Foreign key(字段名)references 表名(对应主键的字段名)表已经创建完,插入外键约束
Alter table 表名 add constraint fk_f foreign key(要设置外键的字段名)references 被关联的表名(被关联的字段名);表的结构:
查看表结构:desc/describe 表名;修改表名:alter table 表名 rename 新表名 添加新字段:alter table 表名 add 字段名 类型(长度)修改字段:alter table 表名 change 旧字段 新字段 新字段类型(长度)删除字段:alter table 表名 drop 字段名
记录的操作:
一 插入记录:insert into 表名(字段名1,字段名n)values(值1,值n)二 修改记录:update 表名 set 字段名=值 where 条件
注:这里如果不加where条件,那么这个表的这个字段名下的数据全部赋值成为“值”
三 删除记录:delete from表名 where 条件
注:此处删除的是表中的符合where条件的整条记录 注意:使用delete和update的时候要千万注意,必须要写where条件语句,要不然就会将当前表中的所有数据改变,在想改回来的话会非常非常费劲!!!
四 查询记录:select 字段名1,字段名n from 表名 where 查询条件 查询去掉重复的值:关键字 distinct 格式:select distinct 字段名1,字段名n from 表名命别名/赋值表: 关键字 as 命别名:select 字段名 as ‘自定义名’
from 表名 赋值表:create table 新表名 as select * from 旧表名 3 查询条件语句的范围:in(等值判断)/not in select 字段名1,字段名n from 表名 where 字段名
in/not in(值1,值n)4 模糊查询:like
匹配标识符:’_’代表一个字符、%代表多个字符
Select 字段名 from 表名 where 字段名 like ‘_sth%’ 注:like后面的判断值如果是数字的话要加单引号,例如想要查询的条件是12345,可以这样写:’%3%’,单引号必须加 5 区间查询:limit m,n
查询从第m个记录开始,一共n条记录,这里的m指的是类似Java数组里的下标,计数从0开始
Limit m
查询从头开始的一共m条记录
Select */字段名 from 表名 limit m,n 6 查询值是否存在某段区间内:between 最大值 and 最小值(int 型的最大值、最小值)Select 字段名1,字段名n from 表名
where 字段名 between 最大值
and 最小值:
注意这里面的条件含有等于最大值和等于最小值
字段名 between 最大值 and 最小值= 字段名>=最小值 and 字段名<=最大值
逻辑运算符在此处可通用:<
<=
>
>=
=
!=
集合函数: 使用方法与Java中的方法的使用类似,注意的是函数名后面紧跟着(),中间不能有空格 一 符合条件的记录的个数:countil
Select count(字段名)from 表名
where 查询条件 二 求某个字段的值的总和:sum Select sum(字段名)from 表名
where 查询条件 三 求某个字段的值的平均值:avg Select avg(字段名)from 表名
where 查询条件 四 求某个字段的值的最大值:max Select max(字段名)from 表名
where 查询条件 五 求某个字段的值的最大值:min Select min(字段名)from 表名
where 查询条件
多表查询:
笛卡尔积:select(字段1,字段n)from 表1,表n 自己想要的查询(找到所有被查询的表的相同的字段): Select(a.字段1,a.字段n,b.字段1,b.字段n)from 表名 as a,表名 as b where a.字段名=b.字段名;
联合查询:
左连接:select 字段名/* from 左表名
left join 右表名
on 左表名.字段名=右表名.字段名
查询结果:左表全部显示,右表与左表相同的字段名的部分显示 右连接:select 字段名/* from 左表名
right join 右表名
on 左表名.字段名=右表名.字段名
查询结果:右表全部显示,左表与右表相同的字段名的部分显示 内连接:select 字段名/* from 左表名
inner join 右表名
on 左表名.字段名=右表名.字段名
查询结果:只有左表与右表相同的部分才显示
全连接:select 字段名/* from 左表名
full join 右表名 查询结果:’*’的结果是笛卡尔积
‘字段名’的结果是这个字段名下的笛卡尔积
函数:函数名与小括号之间不能有空格,字符串必须用单引号圈起来
一 求字符串长度:length Select
length(字符串)二 字符串的截取:substring(字符串,m)/(字符串,m,n)Select
substring(字符串,m)/(字符串,m,n)三 小写转大写:upper Select
upper(字符串)四 大写转小写:lower Select
lower(字符串)五 加密:MD5 Select
MD5(字符串)六 显示现在的时间:now Select
now()
迷糊中: group by
order by 子查询
第二篇:数据库总结
数据库老师画的重点
数据库:数据库是长期存储在计算机内、有组织、可共享的大数据集合。数据库操纵功能:查询select、插入insert、删除delete、修改update 数据库系统的特点:1数据结构化2数据的共享高,冗余度低,易扩充3数据独
立性高4数据由DBMS统一管理和控制
数据模型的组成要素:数据结构、数据操作、完整性约束 概念模型:要出大体,画图 信息世界中的基本概念————
1、实体:客观存在并可以相互区别的事物称为实体
2、属性:实体所具有的某一特性
3、码(key):唯一标识实体的属性集称为码
4、域(domain):域是一组具有相同数据类型的集合
5、实体型(entity type):具有相同属性的实体必然具有共同的特征和性质。用实体名
及属性名集合来抽象和刻画同类实体,称为实体型。
6、实体集(entity set):同一类型的实体的集合
7、联系:在现实世界中,事物内部以及事物之间是有联系的,这些联系在信息世界中
反应为实体(型)内部的联系和实体(型)之间的联系。实体内部的联系通常是指
组成实体的各属性之间的联系;实体之间的联系通常是指不同实体集之间的联系
最常用的数据模型:
1、层次模型(Hierarchical Model)
2、网状模型(Network Model)
3、关系模型(Relational Model)
4、面向对象模型(Object Oriented Model)
5、对象关系模型(Object Relational Model)其中层次模型和网状模型统称为格式化模型
数据库系统的三级模式结构:
1、模式(scheme):模式也称逻辑模式,是数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图。他是数据库系统模式结构的中间层,既不设计涉及数据的物理存储细节和硬件环境,也与具体的应用程
序、所使用的应用开发工具及高级程序设计语言无关。
2、外模式(external schema):外模式也称为子模式(subschema)或用户模式,他是数
据库用户(包括应用程序员和最终用户)能看见和使用
的局部数据的逻辑结构和特征的描述,是数据库用户的数据视图,是与某一应用有关的数据的逻辑表示。
3、内模式(internal scheme):内模式也称存储模式(storage schema),一个数据库只有
一个内模式。他是数据库物理结构和存储方式的描述,是
数据在数据库内部的表达方式。数据库的二级映像功能与数据库独立性————
为了能够在系统内部实现这3个抽象层次的联系和转换,数据库管理系统在这三个模式之间提供了两层映像:
·外模式/模式 映像 ·模式/内模式 映像
正是这两层映像保证了数据库系统中的数据能够具有较高的逻辑独立性和物理独立性 关系(relation):D1*D2*D3··*Dn的子集叫做在域D1、D2、D3···Dn上的关系,表示
为R(D1、D2、D3···Dn)
这里的的R表示关系的名字,n是关系的目或度(degree)关系中每个元素是关系中的元组,通常用t表示 当n=1时,称关系为单元关系(unary relation),或一元关系 当n=2时,称该关系为二元关系(binary relation)
关系是笛卡尔积的有限子集,所以关系也是一个二维表,表的每行对应一个元组,表的每列对应一个域。由于域可以相同,为了加以区分,必须对每列起一个名字,称为属性(attribute)。n目关系必有n个属性。
若关系中的某一属性组的值能够唯一的标识一个元组,则称该属性组为候选码(candidate key)
若一个关系有多个候选码,则选定其中一个为主码(primary key)候选码的诸属性称为主属性(prime attribute)。不包含在任何候选码中的属性称为非主属性(non-prime attribute)或非码属性(non-key attribute)P46 没有搞明白干嘛使得!!!!!!!!!!!
关系的三类完整性约束:实体完整性、参照完整性、用户定义的完整性 实体完整性和参照完整性被称作关系的两个不变性
1、实体完整性(entity integrity):主码中的属性即主属性不能取空值
2、参照完整性(referential integrity):
若属性(或属性组)F是基本关系R的外码,它与基本关系S的的主码K相对应(基
本关系R和S不一定是不同的关系),则对于R中每个元组在F上的值必须为:
·或者取空值(F的每个属性值均为空值)·或者等于S中某个元组的主码值
SQL(Structured Query Language),即结构化查询语言,是关系数据库的标准语言。SQL 的特点:
1、综合统一
2、高度非过程化
3、面向集合的操作方式
4、以同一种语法结构提供多种使用方式
5、语言简洁、易学易用 SQL的动词:
数据查询:select 数据定义:create、drop、alter(房间)修改表
数据操纵:insert、update(家具)修改数据、delete 数据控制:grant、revoke
绘制ER图————
在ER图中有如下四个成分:
矩形框:表示实体,在框中记入实体名。菱形框:表示联系,在框中记入联系名。
椭圆形框:表示实体或联系的属性,将属性名记入框中。对于主属性名,则在其名称下
划一下划线。
连线:实体与属性之间;实体与联系之间;联系与属性之间用直线相连,并在直线上
标注联系的类型。(对于一对一联系,要在两个实体连线方向各写1; 对于一对
多联系,要在一的一方写1,多的一方写N;对于多对多关系,则要在两个实体
连线方向各写N,M。
基本表是本身独立存在的表,在SQL中一个关系就对应一个基本表。一个(或多个)基本表对应一个存储文件,一个表可以带若干索引,索引也可以放在存储文件中。存储文件的逻辑结构组成了关系数据库的内模式。存储文件的物理结构是任意的,对用户是透明的。
视图是从一个或几个基本表导出的表。它本身不独立存储在数据库中,即数据库中只存放视图的定义而不存放视图对应的数据。这些数据仍存放在导出视图的基本表中,因此视图是一个虚表。视图在概念上与基本表等同,用户可以在视图上再定义视图。
基本表的定义、删除与修改:
1、定义基本表:create table ***()
2、定义主键:Primary key == not null(中间不用连接符号)unique
3、定义外码的语句:foreign key(某个字段)references 某表(某字段)
4、定义主码语句:primary key(***,***)
5、修改基本表:alter table 某表名 add 列名<数据类型>[完整性约束]
drop <完整性约束名>(字段名)
alter column<列名><数据类型>
6、删除表:drop table 表名[restrict | cascade级联删除]
7、建立索引:create [unique] [clustered] index 索引名
on 表名(列名[asc | desc],······)·clustered 表示是聚簇索引
·unique表明此索引的每一个索引值只对应唯一的数据记录 ·用户可以在最经常查询的列上建立聚簇索引以提高查询效率 ·在一个基本表上只能建立一个聚簇索引
·建立局促索引后,更新该索引列上的数据时,往往导致表中记
录的物理顺序的额变更,代价较大,因此对于经常更新的列不
宜建立聚簇索引
8、删除索引:drop index <索引名>
上机的时候不太一样:drop index 表名。索引名字
9、数据的查询:
select [all | distinct] <目标列表达式>,······ from 表名或者视图名,··· where 条件表达式
group by 列名1 [having 条件表达式] order by 列名2 [asc | desc] ·如果有group by 子句,则结果按“列名1”的值进行分组,该属性列值相
等的元组为一个组。通常会在每组中作用聚集函数。如果group by 子句带
having短语,则只有满足指定条件的组才予以输出。
·如果有order by 子句,则结果表按“列名2”的值的升序或降序排序 ·select Sname Name,‘Year of Birth:’Birth,2013-Sage Birthday,lower
(Sdept)Department
from Student
lower表示小写
常用的查询条件————
比
较:大于、等于、小于、不等于(< >/!=)、大于/小于等于、不小于、不大于、not+上述比较运算符
确定范围:between and,not between and 确定集合:in,not in 字符匹配:like,not like 空
值:is null,is not null 多重条件(逻辑运算):and,or,not
例子————
·select Sname,Sage
from Student
where Sdept(not)in(‘cs’,‘ma’,‘is’)
字符匹配:[not] like ‘字符串’[escape‘换吗字符’] 百分号表示任意长度、下划线表
示任意单个字符 聚集函数————
count([distinct | all] *)
统计元组个数 count([distinct| all] 列名)
统计一列中值的个数 sum([distinct| all] 列名)
计算一列值的总和(此列必须是数值型)avg([distinct| all] 列名)
计算一列的平局值(此列必须是数值型)max([distinct| all] 列名)
求一列中的最大值 min ·如果指定distinct短语,则表示在计算时要取消指定列中的重复值。如果不指定distinct
短语或者指定all短语(all为缺省值),则表示不取消重复。
·注意在聚集函数遇到空值时,除count(*)外,都跳过空值而只处理非空值。·注意where子句中不能用聚集函数作为条件表达式
group by子句————
where 子句与having 短语的区别在于作用对象不同。Where 子句作用对象作用于基本表或试图,从中选择条件的元组。Having短语作用于组,从中选择满足条件的组。
例子:select Sno from SC
group by Sno having count(*)>3 查询了选修3门以上课程的学生学号 链接查询—————— 例子:
非自然链接
·select Student.*,SC.*
from Student,SC
Where Student.Sno=SC.Sno
自然链接
·select Student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade
from Student,SC
where Student.Sno=SC.Sno
自身链接
·select FIRST.Cno,SECOND.Cpno
from Course FIRST,Course SECOND
where FIRST.Cpno=SECOND.Cpno
外连接
·select Student.Sno,Sname,Sage,Sdept,Cno,Grade
from Student left outer join SC
on Student.Sno=SC.Sno ·左外链接列出左边关系中所有的元组,右外连接列出右边关系中的所有元组
嵌套查询
·select Sname from Student
where Sno in(select Sno from SC where Cno=‘2’)
·找出每个学生超过他选修课程平均成绩的课程号
Select Sno,Cno From SC x Where Grade >=(select avg(Grade)
From SC y Where y.Sno=x.Sno)
授权————
Grant 权限,····· On 对象类型 对象名,····· To 用户,·····
[with grant option]只一句表示权限的传递
例子: ·Grant all privileges
On Student,Course
To U1,U2
·grant update(Sno),select
on Student
to u4
·revoke update(Sno)
on table Student
from u4
一个满足BCNF的关系模式有:
·所有非主属性对每一个码都是完全函数依赖
3NF 编辑
3NF,即第三范式是要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。例如,存在一个部门信息表,其中每个部门有部门编号(dept_id)、部门名称、部门简介等信息。那么在员工信息表中列出部门编号后就不能再将部门名称、部门简介等与部门有关的信息再加入员工信息表中。如果不存在部门信息表,则根据第三范式(3NF)也应该构建它,否则就会有大量的数据冗余。简而言之,第三范式就是属性不依赖于其它非主属性。满足第三范式(3NF)必须先满足第二范式(2NF)
2NF(第二范式)
第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。第二范式(2NF)要求数据库表中的每个实例或行必须可以被唯一地区分。为实现区分通常需要为表加上一个列,以存储各个实例的唯一标识。如图3-2 员工信息表中加上了员工编号(emp_id)列,因为每个员工的员工编号是唯一的,因此每个员工可以被唯一区分。这个惟一属性列被称为主关键字或主键、主码。
第三篇:数据库知识点总结
文件处理系统存在问题:数据的冗余和不一致,数据访问困难,数据孤立,完整性问题,原子性问题,并发访问异常,安全性问题
数据库三级抽象物理层:最低层次的抽象,描述数据实际上是怎样存储的。逻辑层:比物理层层次稍高的抽象,描述数据库中存储什么数据及这些数据间存在什么关系。视图层:最高层次的抽象,只描述整个数据库的某个部分
数据操纵语言DML:使用户可以访问或操作那些按其某种适当的数据模型组织起来的数据。过程化DML:要求用户指定需要什么数据以及如何获得这些数据。非过程化DML:只要求用户指定需要什么数据,而不指明如何获得这些数据 事务状态图 活动状态:初始状态;事务执行时处于这个状态。部分提交状态:最后一条语句执行后。失败状态:发现正常的执行不能继续之后。中止状态:事务回滚并且数据库已恢复到事务开始执行前的状态之后。提交状态:成功完成后 事务进入中止状态,系统有两种选择:重启事务:事务中止是硬件错误或不是由事务的内部逻辑产生的软件错误时。杀死事务:事务的内部逻辑错误,或者由于输入错误,或所需数据在数据库中没有找到
可恢复调度:对于每对事务
第四篇:数据库课程设计总结
课 程 设 计 报 告
课程名称数据库课程设计—总结题目个人CD盘管理系统_________________________________
指导教师设计起止日期
学院计算机学院
系别专业计算机科学与技术
学生姓名班级/学号 成绩___________________
课程设计总结:
经过近2个月的设计,CD盘管理系统基本开发完成,该系统是一个简单的关于数据库与现实相结合的管理系统,它集各种功能用于一身,在系统的各个模块中体现了它的功能,针对音乐爱好者的需求方面进行设计的,方便了用户的一些信息操作,为音乐爱好者节省了管理成本,提高管理效率。该系统的界面简单大方,非常方便用户的操作,同时,也为以后系统的扩展留出了足够的空间。
在此次设计中后台主要采用了servlet和JavaBean技术,数据库则加入了存储过程和触发器的控制。我进一步理解了servlet和JavaBean的工作机制和所提供的便利,也感受到了存储过程和触发器所带来的方便。
servlet具有以下的优势:方便Servlet提供了大量的实用工具例程,例如自动地解析和解码HTML表单数据、读取和设置HTTP头、处理Cookie、跟踪会话状态等。* 功能强大在Servlet中,许多使用传统CGI程序很难完成的任务都可以轻松地完成。例如,Servlet能够直接和Web服务器交互,而普通的CGI程序不能。Servlet还能够在各个程序之间共享数据,使得数据库连接池之类的功能很容易实现。
2可移植性好Servlet用Java编写,Servlet API具有完善的标准。因此,为IPlanet
Enterprise Server写的Servlet无需任何实质上的改动即可移植到Apache、Microsoft IIS或者WebStar。几乎所有的主流服务器都直接或通过插件支持Servlet。3 节省投资不仅有许多廉价甚至免费的Web服务器可供个人或小规模网站使用,而且对于现有的服务器,如果它不支持Servlet的话,要加上这部分功能也往往是免费的(或只需要极少的投资)。
JavaBean具有以下特点:
用户可以使用JavaBean将功能、处理、值、数据库访问和其他任何可以用java代码创造的对象进行打包,并且其他的开发者可以通过内部的JSP页面、Servlet、其他JavaBean、applet程序或者应用来使用这些对象。用户可以认为JavaBean提供了一种随时随地的复制和粘贴的功能,而不用关心任何改变。JavaBean可分为两种:一种是有用户界面(UI,User Interface)的JavaBean;还有一种是没有用户界面,主要负责处理事务(如数据运算,操纵数据库)的JavaBean。JSP通常访问的是后一种JavaBean。
存储过程的能力大大增强了SQL语言的功能和灵活性。存储过程可以用流控制语
句编写,有很强的灵活性,可以完成复杂的判断和较复杂的运算。可保证数据的安全性和完整性。通过存储过程可以使没有权限的用户在控制之下间接地存取数据库,从而保证数据的安全。通过存储过程可以使相关的动作在一起发生,从而可以维护数据库的完整性。在运行存储过程前,数据库已对其进行了语法和句法分析,并给出了优化执行方案。这种已经编译好的过程可极大地改善SQL语句的性能。由于执行SQL语句的大部分工作已经完成,所以存储过程能以极快的速度执行。可以降低网络的通信量。使体现企业规则的运算程序放入数据库服务器中,以便集中控制。当企业规则发生变化时在服务器中改变存储过程即可,无须修改任何应用程序。企业规则的特点是要经常变化,如果把体现企业规则的运算程序放入应用程序中,则当企业规则发生变化时,就需要修改应用程序工作量非常之大(修改、发行和安装应用程序)。如果把体现企业规则的运算放入存储过程中,则当企业规则发生变化时,只要修改存储过程就可以了,应用程序无须任何变化。
触发器可通过数据库中的相关表实现级联更改;不过,通过级联引用完整性约束可以更有效地执行这些更改。触发器可以强制比用 CHECK 约束定义的约束更为复杂的约束。与 CHECK 约束不同,触发器可以引用其它表中的列。例如,触发器可以使用另一个表中的 SELECT 比较插入或更新的数据,以及执行其它操作,如修改数据或显示用户定义错误信息。触发器也可以评估数据修改前后的表状态,并根据其差异采取对策。一个表中的多个同类触发器(INSERT、UPDATE 或 DELETE)允许采取多个不同的对策以响应同一个修改语句。
在本系统的设计过程中,首先通过对CD盘管理系统功能进行详细的分析,得到系统功能模块图,然后根据系统功能分析,围绕它进行系统的设计,介绍开发环境和开发技术,再可行性分析、功能和性能需求,然后得出系统业务流图、数据流图、E-R图,并进行数据库的设计和模块化的实现。由于之前有稍微接触过Java Web方面的知识,再加上利用自己的课余时间的学习,做起来感觉没太多的困难。经过这次系统设计过程,加深了我对数据库操作的认识,更加熟悉了Java Web的构架,如servlet,struts,SOA等等。完成本设计后,才知道平日里书本上所学的东西太少,仅是些概念知识,没运用到实践中来,知识是无法得到升华的。只有不断地学习才能够跟上科技和知识的发展步伐。
第五篇:Oracle数据库总结范文
创建表及命名规则?
表名和列名:
必须以字母开头 必须在1–30个字符之间
必须只能包含A–Z, a–z, 0–9, _, $, 和# 必须不能和用户定义的其他对象重名 必须不能是Oracle 的保留字 Oracle默认存储是都存为大写
增删改查语法?
增加: 例如:使用INSERT语句往customers表中插入数据,指定相关列和值 INSERT INTO customers(customer_id, first_name, last_name, dob, phone)VALUES(6, 'Fred', 'Brown', '01-1月-1970', '800-555-1215');
如果为表所有列都指定值,那么可以忽略列清单
INSERT INTO customersVALUES(6, 'Fred', 'Brown', '01-1月-1970', '800-555-1215');
可以使用NULL为某些列指定空值
INSERT INTO customersVALUES(8, 'Sophie', 'White', NULL, NULL);
查询:select * fromcustomers;或者select字段 fromcustomerswhere条件 删除:deletefromcustomerswhere条件
更改:update customersset name = 'xiaoming',age = ‘16’(更改多个字段时候用逗号隔开)where 条件
对查询结果进行排序?
语句:select * fromcustomersorderby字段 desc;
(asc(升序),desc(降序)如果不写,默认升序)
NULL值了解么?
NULL值表示未知的值。它是一个特殊的值,但并不是空字符串,NULL值表示该列是未知的。当某些查询语句在输出结果列上看不到值的时候,可能就是NULL值
NVL()和NVL2():
NULL值被查询出来的时候没有显示信息,如何告知用户这是空字符串还是NULL,这可以通过NVL()函数来进行处理
NVL(x,value)是有value显示本身,null显示为替换的value NVL2(x,value1,value2)是如果x不为NULL值,返回value1,否则返回value2 例程:
select name,nvl2(email,'已知','未知')from student;【代码含义:代表如果email字段中有值,则显示已知,null则显示未知,如果想显示本来的查询结果select name,nvl(email,'未知')from student;】 update student set name = replace(name,'小','大');【代码含义:代表将STUDENT表中NAME 字段中如果含有小字,那么就将小字替换为大字(操作的不是显示结果,而是将表中数据进行更改)】
Oracle中的简单函数?
字符串函数
concat:将x和y拼接起来,并返回新字符串
例程:
select concat(first_name,'-'||last_name)姓名 from customers; Instr字符查找,从1开始。
select instr('asdbcrdbewqrbmde','b')from dual;select instr('asdbcrdbewqrbmde','b',5,2)from dual;【代表从第5个字符开始,第二个b所在的位置】
Ltrim : LTRIM(x,[trim_string])从x字符串左侧去除所有的trim_string字符串,如果没有指定trim_string字符串,则默认为去除左侧空白字符
Rtrim RTRIM(x,[trim_string])从x字符串右侧去除所有的trim_string字符串,如果没有指定trim_string字符串,则默认为去除右侧空白字符 Trim TRIM(trim_string FROM x)从x字符串两侧去除trim_string字符串
Replace REPLACE(x, search_string, replace_string)从字符串x中搜索search_string字符串,并使用replace_string字符串替换。用select执行并不会修改数据库中原始值,但是用update执行可以修改。
Substr SUBSTR(x, start,[length])返回字符串中的指定的字符,这些字符从字符串的第start个位置开始,长度为length个字符;如果start是负数,则从x字符串的末尾开始算起;如果length省略,则将返回一直到字符串末尾的所有字符
例程:
select substr('abcd月fg',4,2)from dual;(结果:d月)select substr('abcdefg',-2)from dual;(结果:fq)
日期函数
Sysdate 例程:
Selectsysdatefromdual;
Select to_char(sysdate, 'yyyy-mm-dd-hh-mm-ss')from dual;
Add_months(d1,n1) last_day():
转换函数
To_char TO_CHAR(x,[ format])将x转化为字符串。format为转换的格式,可以为数字格式或日期格式
select to_char(sysdate,'yyyy-mm-dd')from dual;【一般在查询时候使用,使返回的值成为指定格式】
to_date TO_DATE(x,[format])将x字符串转换为日期
insert into student values(seq_stu.nextval,'小明',to_date('1992-2-18','yyyy-mm-dd'),default,'北京',null);【一般在添加使用】 返回所查询的值中最后一个日期数据。
聚合函数
Avg:平均数 Sum:求和 Max:最大值 Min:最小值 Count:返回统计的行数 Round:四舍五入
例程:
select round(avg(bid),1)from bug;分组了解么?
有时需要对表中的行进行分组,然后统计每组的信息,可以使用GROUP BY进行分组,然后再对每组进行统计。
(1)可以使用GROUP BY对多个列进行分组
例:
SELECT product_id, avg(customer_id)FROM purchases GROUP BY product_id;
(2)可以对分组后的行使用聚集函数,聚集函数会统计每组中的值,对于每组分别统计后返回一个值 例:
SELECT
product_type_id,BY
COUNT(ROWID)FROM
BY
productsGROUP product_type_id;注意:
product_type_idORDER a)如果查询中使用了聚集函数,被查询的列未使用聚集函数处理,那么这些列必须出现在GROUP BY子句后,否则,会提示ORA-00937错误
b)不能使用聚集函数作为WHERE子句的筛选条件,否则,会提示ORA-00934错误
c)可以使用HAVING子句过滤分组后的行
SELECT...FROM...WHERE GROUP BY...HAVING...ORDER BY...;(GROUP BY使用时可以不使用HAVING,但是使用HAVING时必须有GROUP BY才有意义)
(3)同时使用WHERE, GROUP BY和HAVING
a)首先,执行WHERE筛选掉不符合条件的行 b)然后,将符合条件的行使用GROUP BY进行分组 c)最后,使用HAVING对分组统计的结果进行再次筛选 例:
SELECT product_type_id, AVG(price)FROM products
WHERE price < 15
GROUP BY product_type_id HAVING AVG(price)> 13 ORDER BY product_type_id;
表的约束条件?
目的:
确保表中数据的完整性。
常用的约束类型: 主键约束(PRIMARY KEY):要求主键列数据唯一,并且不允许为空 非空约束(NOT NULL):指定的列的值不允许为空
唯一键约束(UNIQUE):要求该列唯一,允许为空,但只能出现一个空
值
检查约束(CHECK):指定表中一列或多列可以接受的数据值格式 默认约束(DEFAULT):指定某列的默认值
外键约束(FOREIGN KEY):用于建立和加强两个表数据之间连接的一
列或多列。通过将表中的主键列添加到另一个表中。可以创建两个表之间的连接。这个主键的列就称为第二个表的外键。外键约束就可以确保添加到外键表中的任何行都在主表中都存在相应的行
多表查询?
不同的数据存储在不同的表中,通常要查询多张表才能找到需要的数据
例程: SELECT products.name, product_types.name FROM products, product_types WHERE
products.product_type_id
= product_types.product_type_id AND products.product_id = 3;
products表和product_types表相关字段会用在SELECT语句及WHERE子句上,可以给表起别名,提高代码可读性、降低书写难度 例程:
SELECT p.name, pt.name FROM products p, product_types pt WHERE p.product_type_id = pt.product_type_id AND p.product_id = 3 注意:
如果查询两张表,并且没有定义连接条件,那么查询的结果集是两表相乘的结果,这样的情况称之为笛卡尔乘积。总结:多表查询WHERE时,连接次数=查询时连接表的数量-1
常见的三种连接类型:
内连接:
内连接返回的行只有满足连接条件才会返回。如果连接条件的列中有NULL值,那么该行则不会返回 外连接:
外连接返回的行满足连接条件,也包括在连接条件的列包含空值的行
自连接:
连接的表为同一张表
子查询?
子查询是嵌入到另一个SELECT语句中的一个SELECT语句。通过使用子查询,可以使用简单的语句组成强大的语句。当需要从表中选择行,而选择条件却取决于该表自身中的数据时,子查询非常有用。
单行子查询:(1)可以将另外一个查询作为WHERE子句的子查询
例:查询尾名是‘Brown’的首名和尾名
SELECT first_name, last_name FROM customers
WHERE customer_id =
(SELECT customer_id FROM customers WHERE last_name = 'Brown');(2)在单行子查询还可以使用其他比较运算符,如<>、<、>、<=和>= 例:查询价格大于平均价格的商品编号、名称及价格
WHERE子句中使用>,以及子查询中使用AVG()聚集函数
SELECT product_id, name, price FROM products WHERE price >(SELECT AVG(price)FROM products);(3)在HAVING子句中使用子查询
HAVING是在分组统计后用于过滤行,同样在HAVING子句后面可以跟子查询。单行子查询将返回结果用于HAVING子句过滤分组统计的行
例如:查询平均价格小于最大平均值的商品编号及平均值
SELECT product_type_id, AVG(price)FROM products GROUP BY product_type_id HAVING AVG(price)<(SELECT MAX(AVG(price))FROM products GROUP BY product_type_id)ORDER BY product_type_id;
分页查询?
可以通过ROWNUM来实现。
序列?
序列是一个数据库对象,用于生成一系列的整数。
索引?
索引是与表关联的可选结构。可以创建索引以加快对表执行SQL语句的速度。就像书的索引可以帮助我们更快速的查找信息一样,Oracle中的索引也提供了一种更快地访问表数据的途径。
视图?
视图是基于一张表或多张表或另外一个视图的逻辑表。视图不同于表,视图本身不包含任何数据。表是实际独立存在的实体,是用于存储数据的基本结构。而视图只是一种定义,对应一个查询语句。视图的数据都来自于某些表,这些表被称为基表。数据库中只在数据字典中存储对视图的定义。