Oracle入门教程与实战

前言Oracle 数据库系统是美国 Oracle 公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器 (Client/Server) 或 B/S 体系结构的数据库之一,比如 SilverStream 就是基于数据库的一种中间件。 Oracle 数据库是目前世界上使用最为广泛的数据库管理系统,作为一个通用的数据库系统,它具有完整的数据管理功能;作为一个关系型数据库,...
摘要由CSDN通过智能技术生成

前言

Oracle 数据库系统是美国 Oracle 公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器 (Client/Server) 或 B/S 体系结构的数据库之一,比如 SilverStream 就是基于数据库的一种中间件。 Oracle 数据库是目前世界上使用最为广泛的数据库管理系统,作为一个通用的数据库系统,它具有完整的数据管理功能;作为一个关系型数据库,它是一个完备关系的产品;作为分布式数据库它实现了分布式处理功能,但它的所有知识,只要在一种机型上学习了 Oracle 知识,便能在各种类型的机器上使用它。

Oracle 的基本使用

连接命令

sqlplus /nolog

进入 sqlplus 环境。其中 /nolog 是不登陆到数据库服务器的意思,如果没有 /nolog 参数, sqlplus 会提示你输入用户名和密码。

C:\Users\Administrator>sqlplus

SQL*Plus: Release 11.1.0.7.0 - Production on 星期三 1016 10:30:42 2019

Copyright (c) 1982, 2008, Oracle.  All rights reserved.

请输入用户名:
conn[etc]

用法: conn 用户名 / 密码 @网络服务名 [as sysdba/sysoper] 当用特权用户身份连接时,必须带上 as sysdba 或是 as sysoper

以系统管理员 (sysdba) 身份连接数据库

SQL> conn / as sysdba
已连接。

创建用户

SQL> create user huang identified by 123456;

用户已创建。

用户授权

SQL> grant create session,connect,resource to huang;

授权成功。

连接到数据库

SQL> conn huang/123456
已连接。
show user

显示当前用户名

SQL> show user
USER"HUANG"
passw[ord]

用于修改用户的密码,如果要想修改其它用户的密码,需要用 sys/system 登录。

SQL> passw
更改 HUANG 的口令
旧口令:
新口令:
重新键入新口令:
口令已更改
disc[onnect]

用于断开与当前数据库的连接 (不退出 sqlplus )

SQL> disc
从 Oracle Database 11g Enterprise Edition Release 11.1.0.7.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options 断开
SQL>
exit

用于断开与当前数据库的连接 (同时退出 sqlplus )

SQL> exit
从 Oracle Database 11g Enterprise Edition Release 11.1.0.7.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options 断开

C:\Users\Administrator>

文件操作命令

start 和 @

运行 SQL 脚本

SQL> @ d:\c.sql

表已创建。

或是

SQL> start d:\c.sql

表已创建。

edit

该命令可以编辑指定的 SQL 脚本

SQL> edit d:\c.sql

这样会把 d:\c.sql 这个文件打开

spool

该命令可以将 sqlplus 屏幕上的(查询)内容输出到指定文件中去

SQL> spool d:\d.sql
SQL> select ASSETNUM 序号,DESCRIPTION 描述 from ASSET;
SQL> spool off

交互式命令

&

可以替代变量,而该变量在执行时,需要用户输入, Oracle 会提示用户输入值

SQL> select * from ACCOUNTDEFAULTS where ORGID='&ORGID';
输入 orgid 的值:

显示和设置环境变量

可以用来控制输出的各种格式,如果希望永久的保存相关设置,可以修改 glogin.sql 脚本

linesize

设置显示行的宽度,默认是 80 个字符

SQL> show linesize
linesize 80
SQL> set linesize 90
SQL> show linesize
linesize 90
pagelize

设置每页显示的行数目,默认是 14 ,用法和 linesize 一样

SQL> show pagesize
pagesize 14
SQL> set pagesize 20
SQL> show pagesize
pagesize 20

Oracle 用户管理

创建用户

在 Oracle 中要创建一个新的用户使用 create user 语句, 一般是具有 dba (数据库管理员)的权限才能使用。

create user 用户名 identified by 密码 ;
SQL> create user zhangsan identified by 123456;
create user zhangsan identified by 123456
                                   *1 行出现错误:
ORA-01031: 权限不足

我们连接到 sysdba 创建用户

SQL> conn / as sysdba
已连接。
SQL> create user zhangsan identified by 123456;

用户已创建。

给用户修改密码

如果给自己修改密码可以直接使用

password 用户名
SQL> password huang
更改 huang 的口令
旧口令:
新口令:
重新键入新口令:
口令已更改

如果给别人修改密码则需要具有 dba 的权限,或是拥有 alter user 的系统权限

 alter user 用户名 identified by 新密码
SQL> alter user zhangsan identified by 12345678;

用户已更改。

删除用户

一般以 dba 的身份去删除某个用户, 如果用其它用户去删除用户则需要具有 drop user 的权限。

drop user 用户名 [cascade]
SQL> drop user zhangsan;

用户已删除。

如果要删除的用户,已经创建了表,那么就需要在删除的时候带一个参数 cascade ;

权限和角色

权限

创建的新用户是没有任何权限的, 甚至连登陆的数据库的权限都没有, 需要为其指定相应的权限;要使用有能力授权的用户,如 sys 、 system 。

权限包含系统权限和对象权限

  • 系统权限:用户对数据库的相关权限
  • 对象权限:用户对其他用户的数据对象操作的权限
角色

角色是指由系统权限集合。通常给某个用户授予权限时如果没有角色存在的话,那么需要一条一条的操作,角色的存在就是使得授权变得很方便。通常一个角色由多个系统权限组成。常用的角色有三个 connect (7种权限)、 dba 、 resource (在任何表空间建表)。

connect 角色:是授予最终用户的典型权利,最基本的

  • alter session 修改会话
  • create cluster 建立聚簇
  • create database link 建立数据库链接
  • create sequence 建立序列
  • create session 建立会话
  • create synonym 建立同义词
  • create view 建立视图

resource 角色: 是授予开发人员的

  • create cluster 建立聚簇
  • create procedure 建立过程
  • create sequence 建立序列
  • create table 建表
  • cteate trigger 建立触发器
  • create type 建立类型

dba 角色:拥有系统所有系统级权限

使用 grant 命令给用户分配权限:

grant 【权限名】 to 【用户名】

  • 分配角色
grant 【角色名】 to 【用户名】
  • 收回权限
revoke 【权限名】 from 【用户名】

用户管理的综合案例

SQL> create user zhangsan identified by 123456; /*创建用户*/

用户已创建。

SQL> conn zhangsan/123456; /*新建用户没有 session (登陆)权限*/
ERROR:
ORA-01045: 用户 ZHANGSAN 没有 CREATE SESSION 权限; 登录被拒绝


警告: 您不再连接到 ORACLE。
SQL> show user
USER""
SQL> conn / as sysdba;
已连接。
SQL> grant create session to zhangsan; /*使 zhangsan 能够被连接*/

授权成功。

SQL> conn zhangsan/123456;
已连接。
SQL> show user;
USER"ZHANGSAN"
SQL> conn / as sysdba;
已连接。
SQL> grant resource to zhangsan; /*让zhangsan 能够在任何表空间下建表*/

授权成功。

SQL> create table users(name varchar(10),age number(3)); /*在 sys 角色下创建一个简单的表 users */

表已创建。

SQL> insert into users values('张三',22); /*插入数据*/

已创建 1 行。

SQL> insert into users values('李四',24);

已创建 1 行。

SQL> select * from users; /*查询*/

NAME                        AGE
-------------------- ----------
张三                         22
李四                         24

SQL> conn zhangsan/123456;
已连接。
SQL> select * from sys.users; /*新建的用户没有查询 sys 表的权限*/
select * from sys.users
                  *1 行出现错误:
ORA-00942: 表或视图不存在


SQL> conn / as sysdba;
已连接。
SQL> grant select on users to zhangsan; /*登录到 sys 给 zhangsan 授权让 zhangsan 可以查看 sys 下的 users 表*/

授权成功。

SQL> conn zhangsan/123456;
已连接。
SQL> select * from sys.users; /* 登录到 zhangsan 下查看 users 表*/

NAME                        AGE
-------------------- ----------
张三                         22
王五                         24

SQL> update sys.users set name='张小三' where name='张三'; /*这时如果想要更新 sys.users 中的数据,会提示 "ORA-01031: 权限不足 " 。因为 sys 只给了 zhangsan 查看的权利,如果仍然想更新,要到 sys 下进行授权*/
update sys.users set name='张小三' where name='张三'
           *1 行出现错误:
ORA-01031: 权限不足


SQL> conn / as sysdba
已连接。
SQL> grant update on users to zhangsan; /*登录到 sys 给 zhangsan 授权让 zhangsan 可以更新 sys 下的 users 表*/

授权成功。

SQL> conn zhangsan/123456;
已连接。
SQL> update sys.users set name='张小三' where name='张三';

已更新 1 行。

SQL> select * from sys.users;

NAME                        AGE
-------------------- ----------
张小三                       22
王五                         24

SQL> revoke resource from zhangsan; /*登陆到 sys 下回收 resource 权限*/

撤销成功。

SQL> revoke select on users from zhangsan; /*登陆到 sys 下回收 select 权限*/

撤销成功。

SQL> conn zhangsan/123456;
已连接。
SQL> select * from sys.users; /* 这时 sys 就不能再查询 sys.users 的数据了*/
select * from sys.users
                  *1 行出现错误:
ORA-00942: 表或视图不存在


使用 profile 管理用户口令

profile 是口令限制,资源限制的命令集合。当建立数据库时, Oracle 会自动建立名称为 default 的 profile。当建立用户没有制定 profile 选项,那 Oracle 就会将 default 分配给用户。

帐号锁定

指定登录时最多可以输入密码的次数,也可以指定用户锁定的时间,以天为单位。一般用 dba 的身份去执行命令。

指定用户 huang 最多只能尝试三次登录,锁定时间为 2 天。

SQL> conn / as sysdba;
已连接。
SQL> create profile lock_account limit failed_login_attempts 3 password_lock_time 2;

配置文件已创建

SQL> alter user huang profile lock_account;

用户已更改。

按 CTRL + C 退出来验证账号锁定

C:\Users\Administrator>sqlplus

SQL*Plus: Release 11.1.0.7.0 - Production on 星期三 1030 11:13:48 2019

Copyright (c) 1982, 2008, Oracle.  All rights reserved.

请输入用户名:  huang
输入口令:
ERROR:
ORA-01017: 用户名/口令无效; 登录被拒绝


请输入用户名:  huang
输入口令:
ERROR:
ORA-01017: 用户名/口令无效; 登录被拒绝


请输入用户名:  huang
输入口令:
ERROR:
ORA-28000: 帐户已被锁定


SP2-0157: 在 3 次尝试之后无法连接到 ORACLE, 退出 SQL*Plus

账户解锁
SQL> alter user huang account unlock;

用户已更改。

SQL> conn huang;
输入口令:
已连接。
终止口令

为了让用户定期修改密码,可以使用终止口令的指令完成,同样这个命令也要 dba 身份来操作。

给 huang 创建一个 profile 文件,要求该用户每隔 10 天要修改登录密码,宽限期 2 天

SQL> create profile huang limit password_life_time 10 password_grace_time 2;

配置文件已创建

SQL> alter user huang profile huang;

用户已更改。

解锁方式同上

口令历史

如果希望用户在修改密码时,不能使用以前用过的密码,可以使用口令历史,这样 Oracle 就会将口令修改的信息存放在数据字典中,这样当用户修改密码时, Oracle 就会对新密码与就得进行对比,如果一样提示用户重新输入。

SQL> create profile password_history limit password_life_time 10 password_grace_time 2 password_reuse_time 10;

配置文件已创建

SQL> alter user huang profile password_history;

用户已更改。

SQL> alter user huang identified by 12345678;

用户已更改。

SQL> alter user huang identified by 12345678;
alter user huang identified by 12345678
*1 行出现错误:
ORA-28007: 无法重新使用口令


password_reuse_time 10 表示 10 天后口令可重复使用。

删除 profile
SQL> drop profile password_history cascade;

配置文件已删除。

cascade 表示如果已经将 profile分 配给某个用户时,仍要删除 profile,就要加上 cascade。

Oracle 表的管理

表名和列的命名规则

  • 必须以字母开头
  • 长度不能超过 30 个字符
  • 不能使用 Oracle 的保留字
  • 只能使用如下字符 A-Z , a-z , 0-9 , $ , # 等

Oracle 支持的数据类型

字符型

char 定长,最长2000字符

例如: char(10) 存储内容为“小黄”时,前4个字符放‘小黄’,后六位由空格补齐

优点是:效率高,查询速率快。如身份证的字段可以设置成 char(18)

varchar2 变长最大 4000 字符( Oracle 推荐使用)

varchar2(10) 存储内容为“小黄”时, Oracle 分配 4 个字符

clob(character large object) 字符型大对象,最大 4G

数字类型

number 范围 -10 的 38 次方到 10 的 38 次方,可以是整数,也可以是小数

number(5,2) 表示一个小数有5位有效数字, 2 位是小数

例如:定义一个范围在 -999.99-999.99 的数字可以用 number(5,2),定义一个范围在 -99999-99999 可以用 number(5)

日期类型

date 包含年月日和时分秒

timestamp Oracle 对 date 类型的扩展,可以精确到毫秒。

图片类型

blob 二进制数据,可以存放图片,音频,视频最大 4G ,这个类型允许我们将大文件存储进数据库,但是一般在数据库里,存放的应该是这些文件的路径,如果对安全性有要求,可以将文件放入数据库(一般来讲,在真实项目中是不会把图片和声音真的往数据库里存放的)。

建表语句

建表
  • 学生表
create table student( /*表名*/
    id number(4), /*学号*/
    name varchar2(20), /*姓名*/
    sex char(2), /*性别*/
    birthday date, /*出生日期*/
    sal number(6,2) /*奖学金*/
    );


SQL> desc student; /*查看表结构*/
 名称                                      是否为空? 类型
 ----------------------------------------- -------- ----------------------------
 ID                                                 NUMBER(4)
 NAME                                               VARCHAR2(20 CHAR)
 SEX                                                CHAR(2 CHAR)
 BIRTHDAY                                           DATE
 SAL                                                NUMBER(6,2)

  • 班级表
create table class(
    c_id number(2),
    c_name varchar2(40)
    );


SQL> desc class;
 名称                                      是否为空? 类型
 ----------------------------------------- -------- ----------------------------
 C_ID                                               NUMBER(2)
 C_NAME                                             VARCHAR2(40 CHAR)


修改表
SQL> alter table student add (c_id number(2)); /*添加字段*/

表已更改。

SQL> alter table student modify (name varchar2(50)); /*修改字段的长度*/

表已更改。

SQL> alter table student modify (name char(20)); /*修改字段的类型(表中不能有数据)*/

表已更改。

SQL> alter table student rename column name to s_name; /*修改字段的名字(表中不能有数据)*/

表已更改。

SQL> alter table student drop column sex; /*删除一个字段(慎重使用)*/

表已更改。

SQL> rename student to stu; /*修改表的名字*/

表已重命名。

SQL> desc stu;
 名称                                      是否为空? 类型
 
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值