ORACLE 第 1 章

ORACLE 数据库

第 1 章

ORACLE 基础

一、ORACLE 简介

(一)什么是 ORACLE

ORACLE 数据库系统是美国 ORACLE 公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(CLIENT/SERVER)或B/S 体系结构的数据库之一。

ORACLE 通常应用于大型系统的数据库产品。

ORACLE 数据库是目前世界上使用最为广泛的数据库管理系统,作为一个通用的数据库系统,它具有完整的数据管理功能;作为一个关系数据库,它是一个完备关系的产品;作为分布式数据库它实现了分布式处理功能。

ORACLE 数据库具有以下特点:

(1)支持多用户、大事务量的事务处理

(2)数据安全性和完整性控制

(3)支持分布式数据处理

(4)可移植性

(5)PL/SQL 可编程

(二)ORACLE 体系结构

1、数据库

Oracle 数据库是数据的物理存储。这就包括(数据文件 ORA 或者 DBF、控制文件、联机日志、参数文件)。其实 Oracle 数据库的概念和其它数据库不一样,这里的数据库是一个操作系统只有一个库。可以看作是 Oracle 就只有一个大数据库。

2、实例

一个Oracle实例(Oracle Instance)有一系列的后台进程(Backguound Processes) 和内存结构(Memory Structures)组成。一个数据库可以有 n 个实例。

3、数据文件(dbf)

数据文件是数据库的物理存储单位。数据库的数据是存储在表空间中的,真正是在某一个或者多个数据文件中。而一个表空间可以由一个或多个数据文件组成,一个数据文件只能属于一个表空间。一旦数据文件被加入到某个表空间后,就不能删除这个文件,如果要删除某个数据文件,只能删除其所属于的表空间才行。

4、表空间

表空间是 Oracle 对物理数据库上相关数据文件(ORA 或者 DBF 文件)的逻辑映射。一个数据库在逻辑上被划分成一到若干个表空间,每个表空间包含了在逻辑上相关联的一组结构。每个数据库至少有一个表空间(称之为 system 表空间)。

每个表空间由同一磁盘上的一个或多个文件组成,这些文件叫数据文件(datafile)。一个数据文件只能属于一个表空间。

注:表的数据,是有用户放入某一个表空间的,而这个表空间会随机把这些表数据放到一个或者多个数据文件中。

由于 oracle 的数据库不是普通的概念,oracle 是有用户和表空间对数据进行管理和存放的。但是表不是有表空间去查询的,而是由用户去查的。因为不同用户可以在同一个表空间建立同一个名字的表!这里区分就是用户了!

5、用户

用户是在表空间下建立的。用户登陆后只能看到和操作自己的表, ORACLE的用户与 MYSQL 的数据库类似,每建立一个应用需要创建一个用户。

二、ORACLE 安装与配置

oracle安装

oracle下载地址:https://www.oracle.com/cn/database/technologies/microsoft-windows.html

sqlDeveloper:

下载地址:https://www.oracle.com/tools/downloads/sqldev-downloads.html

安装oracle

取消勾选,选择下一步

全局数据库名:orcl

密码:123456

等待安装

这里配置账号密码

取消选中状态,密码:123456

打开:scott账号,密码:123456

下面一路点击:是

连接scott账号

账号密码:scott:123456

连接sys账号

账号密码:sys:123456

连接system账号

账号密码:system:123456

远程连接配置

找到目录

C:\app\Administrator\product\11.2.0\dbhome_1\NETWORK\ADMIN

修改:listener.ora、tnsnames.ora

将localhost改成电脑主机名

获取电脑主机名:

我的电脑>右击属性

默认:listener.ora、tnsnames.ora两个文件是没有操作权限的,给这两个文件配置操作权限

选中右击>属性>安全

重启oracle

关闭虚拟机中的防火墙

配置完成后重启虚拟机

远程连接

在宿主机中通过SqlDeveloper连接oracle

三、创建表空间、用户、授权

3.1、格式

表空间
建立表空间(一般建N个存数据的表空间和一个索引空间):
create tablespace 表空间名
datafile ' 路径(要先建好路径)\***.dbf  ' size *M
autoextend on next *M maxsize *M --自动增长
;
用户
create user 用户名 identified by "密码"
[default tablespace ts_name];
用户权限
授予用户使用表空间的权限:
alter user 用户名 quota unlimited on 表空间;
或 alter user 用户名 quota *M on 表空间;-- 连接、资源权限
grant connect,resource to 用户名;
-- 创建序列权限
grant create any sequence to 用户名;
-- 创建表权限
grant create any table to 用户名;
-- 删除表权限
grant delete any table to 用户名;
-- 插入数据权限
grant insert any table to 用户名;
-- 查询数据权限
grant select any table to 用户名;
-- 更新表权限
grant update any table to 用户名;
-- 表空间权限
grant unlimited tablespace to 用户名;
-- 存储过程权限
grant execute any procedure to 用户名;-- 创建视图权限
grant create any view to 用户名;

3.2、创建表空间例子

例子:创建表空间 c:/oracle 文件夹必须先要有!

create tablespace dushibao 
datafile 'c:/oracle/dushibao.dbf' 
size 1500M 
autoextend on next 5M maxsize 3000M;
-- 删除表空间
-- drop tablespace dushibao including contents and datafiles

需要在sys账号下面操作

3.3、创建用户例子

-- 2.建用户 user账号:dushibao identified by 密码:dushibao default tablespace:默认表空间
create user dushibao identified by dushibao 
default tablespace dushibao;

3.4、授权:执行的时候需要全部执行!!!

grant connect,resource to dushibao;
grant create any sequence to dushibao;
grant create any table to dushibao;
grant delete any table to dushibao;
grant insert any table to dushibao;
grant select any table to dushibao;
grant unlimited tablespace to dushibao;
grant execute any procedure to dushibao;
grant update any table to dushibao;
grant create any view to dushibao;

连接dushibao

四、表的创建、修改与删除

(一)创建表

语法:

CREATE TABLE 表名称(字段名 类型(长度) primary key,字段名 类型(长度),.......
);

数据类型:

1. 字符型

(1)CHAR : 固定长度的字符类型,最多存储 2000 个字节

(2)VARCHAR2 :可变长度的字符类型,最多存储 4000 个字节

(3)LONG : 大文本类型。最大可以存储 2 个 G

2.数值型

NUMBER : 数值类型

例如:NUMBER(5) 最大可以存的数为 99999

NUMBER(5,2) 最大可以存的数为 999.99

3.日期型

(1)DATE:日期时间型,精确到秒

(2)TIMESTAMP:精确到秒的小数点后 9 位

4.二进制型(大数据类型)

(1)CLOB : 存储字符,最大可以存 4 个 G

(2)BLOB:存储图像、声音、视频等二进制数据,最多可以存 4 个 G

实例:

创建用户表:

create table t_user
(
id number primary key,
addTime date,
userName varchar2(30),
password varchar2(30)
);

oracle中char、varchar和varchar2区别

1. CHAR的长度是固定的,而VARCHAR2的长度是可以变化的

2.CHAR的效率比VARCHAR2的效率稍高。

3.目前VARCHAR是VARCHAR2的同义词。工业标准的VARCHAR类型可以存储空字符串,但是oracle不这样做,尽管它保留以后这样做的 权利。Oracle自己开发了一个数据类型VARCHAR2,这个类型不是一个标准的VARCHAR,它将在数据库中varchar列可以存储空字符串的 特性改为存储NULL值。如果你想有向后兼容的能力,Oracle建议使用VARCHAR2而不是VARCHAR。

varchar和varchar2区别:

1.varchar2把所有字符都占两字节处理(一般情况下),varchar只对汉字和全角等字符占两字节,数字,英文字符等都是一个字节;可以存4000个长度数据

2.VARCHAR2把空串等同于null处理,而varchar仍按照空串处理;

3.VARCHAR2字符要用几个字节存储,要看数据库使用的字符集,

oracle中都是使用varchar2

(二)修改表

1. 增加字段语法:

ALTER TABLE 表名称 ADD(列名 1 类型 [DEFAULT 默认值],列名 1 类型[DEFAULT 默认值]...)

为用户表增加两个字段,语句:

--追加字段
ALTER TABLE t_user ADD
(remark VARCHAR2(20),logTime DATE
);

2. 修改字段语法:

ALTER TABLE 表名称 MODIFY(列名 1 类型 [DEFAULT 默认值],列名 1 类型[DEFAULT 默认值]...)

修改两个字段的类型,语句:

--修改字段
ALTER TABLE t_user MODIFY
(
REMARK CHAR(20),
logTime TIMESTAMP
);

3. 修改字段名语法:

ALTER TABLE 表名称 RENAME COLUMN 原列名 TO 新列名

语句:

ALTER TABLE t_user RENAME COLUMN logTime TO loginTime

4. 删除字段名

--删除一个字段
ALTER TABLE 表名称 DROP COLUMN 列名

语句:

--删除字段
ALTER TABLE t_user DROP COLUMN REMARK;

(三)删除表

语法:

DROP TABLE 表名称DROP TABLE t_user;

五、数据增删改

(一)插入数据

语法:

INSERT INTO 表名[(列名 1,列名 2,...)]VALUES(值 1,值 2,...)

向表插入数据:语句中的 sysdate 是系统变量用于获取当前日期


insert into t_user(id,addTime,userName,password) VALUES (2,sysdate,'zhangsan','123456');

(二)修改数据

语法:

UPDATE 表名 SET 列名 1=值 1,列名 2=值 2,....WHERE 修改条件;

需求:将 ID 为 1 的用户的登录日期更改为三天前的日期

--追加字段
ALTER TABLE t_user ADD
(logTime DATE
)
update t_user set logTime=logTime-3 where id=1;
commit;

(三)删除数据

语法 1:

DELETE FROM 表名 WHERE 删除条件;

需求:删除D 为 2 的用户信息

delete from t_user where id=2;
commit;

语法 2:截断清空表

TRUNCATE TABLE 表名称

比较 truncat 与 delete 实现数据删除?

  1. 1. delete 删除的数据可以 rollback

  1. 2. delete 删除可能产生碎片,并且不释放空间

  1. 3. truncate 是先摧毁表结构,再重构表结构

  1. 4.truncate删除效率更高

六、JDBC 连接 ORACLE

https://gitee.com/DAMO-Admin/oraclejdbcdemo

(一)创建工程,引入驱动包

在下图目录中可以找到驱动包 ORACLE 的 JDBC 驱动包,拷贝到工程即可使用

找到对应的oracle安装位置,找到驱动包,由于我是11g,所以使用ojdbc6.jar。

注:oracle的jar包不是开源的,所以只能去他提供的安装目录去找,或者官网下载。

(二)JDBC连接数据库

JDBC 驱动为:

oracle.jdbc.OracleDriver

连接字符串:

jdbc:oracle:thin:@虚拟机的 IP:1521:orcl

    //加载驱动static {try {Class.forName("oracle.jdbc.driver.OracleDriver");} catch (ClassNotFoundException e) {e.printStackTrace();}}
/*** 获取数据库连接** @return* @throws SQLException*/public static java.sql.Connection getConnection() throws SQLException {return DriverManager.getConnection("jdbc:oracle:thin:@192.168.10.128:1521:orcl", "dushibao", "dushibao");}
/*** 关闭资源** @param rs* @param stmt* @param conn*/public static void closeAll(java.sql.ResultSet rs,java.sql.Statement stmt, java.sql.Connection conn) {//关闭结果集if (rs != null) {try {rs.close();} catch (SQLException e) {e.printStackTrace();}}//关闭执行对象if (stmt != null) {try {stmt.close();} catch (SQLException e) {e.printStackTrace();}}//关闭执行对象if (conn != null) {try {conn.close();} catch (SQLException e) {e.printStackTrace();}}}

(三)增删改查代码编写

  1. 创建实体类

@Data
public class User {private Integer id;private Date addTime;private String userName;private String password;private Date logTime;
}
  1. 创建 Dao 类实现增删改

    /*** 新增用户* @param user*/public void add(User user) {java.sql.Connection conn = null;java.sql.PreparedStatement stmt = null;try {conn = DBUtils.getConnection();stmt = conn.prepareStatement("insert into t_user values(?,sysdate,?,?,sysdate)");stmt.setLong(1,user.getId());stmt.setString(2,user.getUserName());stmt.setString(3,user.getPassword());stmt.execute();} catch (Exception e) {e.printStackTrace();} finally {DBUtils.closeAll(null, stmt, conn);}}@Testpublic void add(){UserDao userDao = new UserDao();User user = new User();user.setId(3L);user.setUserName("张三");user.setPassword("123456");userDao.add(user);}
        /*** 更新用户信息* @param user*/public void update(User user) {java.sql.Connection conn = null;java.sql.PreparedStatement stmt = null;try {conn = DBUtils.getConnection();stmt = conn.prepareStatement("update t_user set userName=?,password=?,logTime=sysdate where id=?");stmt.setString(1, user.getUserName());stmt.setString(2, user.getPassword());stmt.setLong(3,user.getId());stmt.execute();} catch (SQLException e) {e.printStackTrace();} finally {DBUtils.closeAll(null, stmt, conn);}}@Testpublic void update(){UserDao userDao = new UserDao();User user = new User();user.setId(3L);user.setUserName("李四");user.setPassword("789456123");userDao.update(user);}
    /*** 删除用户* @param id*/public void delete(Long id) {java.sql.Connection conn = null;java.sql.PreparedStatement stmt = null;try {conn = DBUtils.getConnection();stmt = conn.prepareStatement("delete from t_user where id=?");stmt.setLong(1, id);stmt.execute();} catch (SQLException e) {e.printStackTrace();} finally {DBUtils.closeAll(null, stmt, conn);}}@Testpublic void delete(){UserDao userDao = new UserDao();userDao.delete(3l);}
 /*** 根据ID查询** @param id*/public User getById(Long id){java.sql.Connection conn = null;java.sql.PreparedStatement stmt = null;ResultSet rs = null;try {conn = DBUtils.getConnection();String sql = "SELECT id,addTime,userName,password,logTime FROM t_user WHERE id=?";stmt = conn.prepareStatement(sql);stmt.setLong(1,id);rs = stmt.executeQuery();User user = new User();while(rs.next()){user.setId(rs.getLong(1));user.setAddTime(rs.getDate(2));user.setUserName(rs.getString(3));user.setPassword(rs.getString(4));user.setLogTime(rs.getDate(5));}return user;} catch (SQLException e) {throw new RuntimeException(e.getMessage());} finally {DBUtils.closeAll(null, stmt, conn);}}@Testpublic void getById(){UserDao userDao = new UserDao();User user = userDao.getById(1L);System.out.println(user);}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部