【基于SSH框架的企业级应用开发】Oracle数据库基础

Oracle数据库基础

Oracle基础知识

Oracle简介

Oracle是一个数据库管理系统,是oracle公司的核心产品.

Oracle 数据主要特点

  • 支持多用户,大事务量的事务处理
  • 在保持数据安全性和完整性方面性能优越
  • 支持分布式数据处理,将分布在不同物理位置的数据库用通信网络链接起来,在分布式数据库管理系统的控制下,组成一个逻辑上统一的数据库,完成数据处理任务
  • 具有可植性.oracle可以在windows.linux等多个操作系统平台上使用,而sql servlet只能在windows平台上运行

Oracle基本概念

  1. 数据库

数据库不同我们所说的数据库,而是Oracle的一个专业名词,它是磁盘上存储数据的集合,在物理上表现为数据文件,日志文件和控制文件等,在逻辑上以表空间形式存在,使用时,必须首先创建数据库,然后才能使用oracle

全局数据库名

用于区分一个数据库的标识,利用RMAN备份时需要使用,类似域名,整个网络环境中唯一

数据库实例

每个启动数据库都对应一个数据库实例,由这个实例来访问数据库中的数据.

表空间

每个oracle数据库都是由若干个表空间构成的,用户在数据库中建立的所有内容都被存储到表空间中,一个表空间可以由多个数据文件组成,但一个数据文件只能属于一个表空间

每个数据库中,都有一个名为system的表空间,即系统表空间,还会有sysaux、Temp、undo、users等表空间,这些都是在创建数据库时自动创建的,管理员可以创建自定义的表空间并分配给指定用户,也可以为表空间增加或删除数据文件

数据文件

通常,数据文件的扩展名是.dbf,用于存储数据库数据的文件,如存储数据库表中的记录,索引、存储过程、视图、数据字典定义。对于数据库操作中产生的一些临时数据,以及为保证事务重做所必需的数据也有专门的数据文件负责存储

一个数据文件中可能存在很多个表的数据,而一个表的数据也可能存放在多个数据文件中,即数据库表和数据文件不存在一对一的关系

控制文件

通常,控制文件的扩展名是.ctl,是一个二进制文件。控制文件中存储的信息很多,其中包括数据问和日志文件的名称和位置。控制文件是数据库启动及运行所必须的文件。Oracle读写数据时,要根据控制文件的信息查找数据文件

由于控制文件的重要性,因此一个数据库至少要有一个以上的控制文件,oracle 11g默认包含桑控制文件,g各个控制文件内容相同,可以避免因为一个控制文件的损坏而无法启动数据库

日志文件

日志文件扩展名是.log,它记录了数据的所有更改信息,并提供了一种数据恢复机制,确保在系统崩溃或其他意外出现后重新回复数据库

在oracle数据库中,日志文件是成组使用的,每个日志文件组可以有一个或多个日志文件。在工作过程中,多个日志文件组之间循环使用,当一个日志文件组写满后,会转向下一个日志文件组

模式和模式对象

模式是数据库对象(如表、索引等,也称模式对象)的集合。Oracle会为每一个数据库用户创建一个模式,此模式为当前用户所拥有,和用户具有相同的名称。

Oracle数据类型

  1. Char数据类型

当需要固定长度的字符串时,使用char数据类型,这种数据类型长度1-2000字节,未指明大小,默认占用1字节。如果用户输入的值小于指定的长度,则数据库用空格填充至固定的长度。如果用户输入的值大于指定的长度,则数据库返回错误报告

  1. Varchar2数据类型

数据类型支持可变长度的字符串。该数据类型的大小为1-4000字节。在定义该数据类型时,应指定其大小,与char数据类型相比,使用carchar2数据类型可以节省磁盘空间

  1. Nchar数据类型

Nchar,即国家字符集,使用方法和char相同,如果开发的项目需要国际化,那么数据类型选择nchar数据类型,nchar和char的区别在于nchar用于存储unicode字符集类型,即双字节字符数据。

日期时间数据类型

日期时间数据类型用于存储日期值和时间

  1. date数据类型用于存储表中的日期和时间数据。Oracle数据库使用自己的格式存储日期,使用7字节固定长度,每字节分别存储世纪、年、月、日、小时、分和秒。Oracle中sysdate函数的功能是返回当前日期和时间
  2. Timestamp数据类型

Timestamp数据类型用于存储日期的年、月、日以及时间的小时、分和秒、其中秒值精确到小数点后6位,该数据类型同时包含时区信息。

LOB数据类型

  1. CLOB 能够存储大量字符数据。该数据类型可以存储单字节字符数据和多字节字符数据,主要用于存储非结构化的XML文档含大量文字内容的文档
  2. BLOB可以存储大的二进制对象,如图形视频剪辑声音剪辑
  3. BFILE能够将二进制文件存储在数据库外部的操作系统文件中。BFILE列存储一BFILE定位器,指向位于服务器文件系统上的二进制文件,支持的文件最大为4gb
  4. NCLOB数据类型用于存储大的nchar字符数据,NCLOB数据类型同时支持固定宽度字符可变宽度字符,大字符对象的大小不大于4GB,BCLOB类型的使用方法与CLOB类似

Oracle中的伪列

伪列就像oracle中的一个表列,但实际上它并未存储在表中

  1. ROWID数据库中的每行都有一个行地址,ROWID伪列返回该行地址

ROWID重要用途

  • 最快方式访问表中一行
  • 显示表的行是如何存储的
  • 可以作为表中行的唯一标识
  1. ROWNUM

对于一个查询返回每行,ROWNUM伪列返回一个数值代表的次序,返回的第一行的ROWNUM值为1,返回第二行的ROWNUM值为2.通过ROWNUM伪列,用户可以限制查询返回的行数

SQL语言简介

  • 数据定义语言(DDL)

创建表语法:

CREATE table [schema.]table

(column datatype [, colum datatype [, ...]]);

  1. [schema]表示对象的所有者,即模式的名称。如果用户在自己模式中创建表,则可以不指定所有者名称
  2. Table表示表的名称
  3. Colum表示列的名称
  4. Datatype表示该列的数据类型及其宽度

创建表时,需要指定唯一的表名称、表内唯一的列名称/列的数据类型及其宽度

命名规则

  1. 表名首字符应该为字母
  2. 不能使用oracle保留字来为表命名
  3. 表名的最大长度为30字符
  4. 同一模式下的不同表不能具有相同的名称
  5. 可以使用下划线、数字、字母,但是不能使用空格和单引号
  6. Oracle中的表名/用户名列名不区分大小写,系统会自动转换成大写
  7. Oracle中也有varchar数据类型,但不建议使用,建议使用varchar2,该数据类型时oracle标准数据类型

TRUNCATE table命令

删除语法:TRUNCATE table <表名>

  • 数据操纵语言(DML)
  1. 选择无重复的行:

语法:sql>select distinct 列名 from 表名

  1. 带条件和排序的select命令

Select 列名 from 表名

Where 条件

Order by 列名 ASC,列名 DESC;(可以升降序)

  1. 使用列别名

列别名是为列表达式提供的另一个名称,位于列表表达式后面,并显示在列标题中。列别名不会影响列的实际名称

语法:列名后面加 as

  1. 利用现有的表创建新表

语法:create table <newtable>

As select { * | colum (s)}

From <oldtable> [where <condition> ];

复制到新表

Create table 新表名

As select 列名 from 表名

查看表中行数

Select count(1) from 表名

取出不存在重复数据的记录

Select 列名 from 表名

Group by 列名

Having(count(列名||列名)<2);

||操作符为链接操作符,将在本章sql操作符部分介绍。连接操作符类似sql server中的+,意思为将两部分内容连接在一起。

  • 事务控制语言(TCL)
  1. Commit:提交事务,即把事务中对数据库的修改进行永久保存
  2. Rollback:回滚事务,取消对数据库所做的任何修改
  3. Savepoint:在事务中创建储存点
  4. Rollback to <SavePoint_Name>:事务回滚到存储点
  5. 何时结束事务:
  1. 数据被提交
  • 发出commit命令
  • 执行ddl或dcl语句后,当前事务自动被提交
  • 与oracle分离,如退出pl
  1. 数据被撤销
  • 发出rollback命令
  • 服务器进程异常结束
  • DBA停止会话
  • 数据控制语言(DCL)

控制语言为用户提供权限控制命令。数据库对象的所有者对这些对象拥有控制权限所有者可以根据自己的意愿决定其他用户如何访问对象,授予其他用户权限,使他们可以在其权限范围内执行操作。

SQL操作符

算术操作符

算术表达式由NUMBER数据类型的列名、数值常量和连接他们的算术操作符组成组成。算术操作符包括+、-、*、/、

比较操作符

比较操作符用于比较两个表达式的值。比较操作符包括=、!=、<、>、<=、>=、between...and(检查是否在两个值之间)

逻辑操作符

逻辑操作符用于组合多个比较运算的结果以生成一个或真/假的结果,逻辑操作符包括AND(与)、OR(或)、和NOT(非)

 

集合操作符

集合操作符将两个查询的结果组合成一个结果集.可以在SQL中使用下面的集合操作符来组合多个查询中的行

  • UNION(联合)

操作符返回两个查询选定的所有不重复的行.

  • UNION ALL(联合所有)

操作符合并两个查询选定的所有行,包括重复的行

  • INTERSECT(交集)

操作符只返回两个查询都有的行.

  • MINUS(减集)

操作符只返回由第一个查询选定而未被第二个选定的行,即在第一个查询结果中出现的行.

使用集合操作符连接起来的select语句中的列遵循一下规则

  • 通过集合操作符连接的各个查询具有相同的列数,而且对应列的数据类型必须兼容
  • 这种查询不应含有LONG类型的列,列标题来自第一个select语句

连接操作符

连接操作符(||)用于将两个或多个字符串合并成一个字符串,或者将一个字符串与一个数值合并在一起

SQL函数

提供了用于执行特定操作的专用函数.oracle将函数大致划分为单行函数、聚合函数和分析函数。单行函数可以大致划分为字符函数、日期函数、数字函数、转换函数及其他函数

转换函数

将值从一种数据类型转换为另一种数据类型。

  1. TO_CHAR()

此函数语法为TO_CHAR(d |n [,fmt]),其中,d是日期,n是数字,fmt是指定日期或数字的格式。

  1. TO_DATE()

TO_DATE函数将char或varchar数据类型转换为日期数据类型。格式模型fmt指定字符的形式。

  1. TO_NUMBER()

TO_NUMBER函数将包含数字的字符串转换为NUMBER数据类型,从而可以对该数据类型执行算术运算

其他函数

NVL(exp1,exp2)如果exp1的值为null,则返回exp2的值,否则返回exp1的值

分析函数

分析函数的语法:函数名([参数]) over ([子区子句][排序子句])

在语法中:

  • 函数名表示分析函数的名称
  • 参数表示函数需要传入的参数
  • 分区子句(PARTITION BY)表示将查询结果分为不同的组,功能类似于GROUP BY 语句是分析函数工作的基础,默认将所有结果作为一个分组
  • 排序子句(order by)表示将每个分区进行排序
  1. ROW_NUMBER

函数返回唯一的值,当遇到相同数据时,排名安装记录中记录的顺序依次递增

  1. DENSE_RANK

函数返回唯一的值,当遇到相同数据时,所有相同数据的排名都是一样的

  1. RANK

函数返回一个唯一的值,当遇到相同的数据时,所有相同的数据的排名都是一样的,同时会在最后一条相同记录和下一条不同记录的排名之间空出排名

本章总结

  • 掌握安装和配置数据库的基本步骤
  • 会使用SQL*Plus和PL/SQL Developer连接数据库
  • Oracle中的常用数据类型有varchar2字符数据类型,NUMBER等数值数据类型。Date等日期数据类型和Lob数据类型
  • SQL语言分为DDL、DCL、TCL和DML。数据库操纵语言(DML)用于检索、插入和修改数据库信息,包括insert、update、delete、select语言
  • 分页查询使用ROWNUM
  • SQL函数分为单行函数,聚合函数和分析函数。
下面是整合的的步骤 spring整合hibernate 加入jar包 加入spring和aop所需必须包 加入hibernate的必须包 spring整合hibernate的必须包 org.springframework.jdbc-3.1.3.RELEASE.jar org.springframework.orm-3.1.3.RELEASE.jar org.springframework.transaction-3.1.3.RELEASE.jar 加入配置文件 加入spring的配置文件 加入hibernate的配置文件 加入配置代码 加入对SessionFactory的配置 加入数据源(DataSource)的配置 <bean id="dataSource" class="org.springframework.jdbc.datasource.SimpleDriverDataSource"> <property name="driverClass" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/test"/> <property name="username" value="root"/> <property name="password" value=""/> </bean> 加入SessionFactory的配置 <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> <!-- 配置session factory使用的数据源 --> <property name="dataSource" ref="dataSource" /> <!-- 配置使用hibernate的配置文件 --> <!--<property name="configLocation" value="classpath*:hibernate.cfg.xml" /> --> <!-- 无需写hibernate的配置文件,而是将hibernate的配置直接加入到spring配置文件中 配置hibernate的映射文件地址 --> <property name="mappingResources"> <list> <value>com/direct/domain/Employee.hbm.xml</value> <value>com/direct/domain/Log.hbm.xml</value> </list> </property> <!-- 配置hibernate的其他属性 --> <property name="hibernateProperties"> <map> <entry key="dialect" value="org.hibernate.dialect.MySQL5Dialect" /> <entry key="show_sql" value="true" /> <entry key="format_sql" value="true" /> <entry key="current_session_context_class" value="thread" /> </map> </property> </bean> 加入事务管理切面类的配置 <!-- 创建事务管理器(spring针对hibernate实现的事务管理的切面类) --> <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory" /> </bean> <!-- 事务的通知类型 --> <tx:advice id="transactionAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="add*" propagation="REQUIRED"/> <tx:method name="update*" propagation="REQUIRED"/> <tx:method name="delete*" propagation="REQUIRED"/> <tx:method name="*" read-only="true" /> <!-- 或者 <tx:method name="*list*" read-only="true"/> <tx:method name="*get*" read-only="true"/> <tx:method name="*" propagation="REQUIRED"/> --> </tx:attributes> </tx:advice> 将切面类应用到切入点上 <!-- 将事务管理规则的切面应用到对应的切入点 --> <aop:config> <aop:pointcut expression="execution(* com.direct.service.*.*(..))" id="transactionPointCut"/> <aop:advisor advice-ref="transactionAdvice" pointcut-ref="transactionPointCut"/> </aop:config> spring和struts2的整合 加入整合包 加入struts的必须包 struts整合spring的包 struts2-spring-plugin-2.3.15.3.jar spring整合struts的包 org.springframework.web-3.1.3.RELEASE.jar org.springframework.web.servlet-3.1.3.RELEASE.jar org.springframework.web.struts-3.1.3.RELEASE.jar 加入struts的配置文件struts.xml 在web.xml中配置struts <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> 在web.xml配置spring <!-- 配置spring的配置文件的位置 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath*:applicationContext-*.xml</param-value> </context-param> <!-- 配置spring随web容器启动时就创建 --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> 在struts.xml中配置对象创建工具为spring <constant name="struts.objectFactory" value="spring" />
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值