2019-01-10

小编正在学习c# http://ADO.NET连接Oracle数据库的知识,刚好又可以重新去回顾下Oracle的基础知识了,我觉得学习的过程必须要去总结,不然好多的问题发现不了。

知识点一:

【oracle 安装成功后,会默认生成3个用户:】

①sys 用户:超级管理员,权限最高,他的角色dba,密码 change_on_install

②system 用户:是系统管理员,权限也很高,他的角色是dbaoper,密码 manager

③scott 用户:普通用户密码是 tiger

【sys 与 system 的差异:】

sys 有 create database 的权限,而 system 没有。其他相似。

在日常对 oracle 管理过程中,使用 system 就足够了。

【sql*plus常用命令】

1.show user; 查看当前用户的用户名

2.连接命令(退出exit;)

conn[ect]

用法:conn 用户名/密码@网络服务名 [as sysdba/sysoper]

当用特权用户身份连接时,必须带上 as sysdba 或是 as sysoper。

如下:

conn scott/876521963;

conn sys/876521963 as sysdba;

conn sys/876521963 as sysoper;

3.断开连接

disc[onnect]

说明:该命令用来断开与当前数据库的连接

4.passw[word]

说明:该命令用于修改用户的密码。如果要想修改其他用户的密码,

需要用 sys/system 登陆。

5.show user

说明:该命令会断开与数据库的连接,同时会退出 sql*plus

6.文件操作命令【常用】

①start和@

说明:运行sql脚本

案例:@ d:/a.sql 或者 START d:/a.sql

②edit

说明:该命令可以编辑制定的sql脚本

案例:edit d:/a.sql

③spool

说明:该命令可以将 sql*plus 屏幕上的内容输出到指定文件中去。

案例:spool d:/b.sql (创建b.sql文件) 并输入 spool off (将屏幕内容输出到文件)

7.想看scott用户到底可以操作哪些表?

提供一个简单的方法:进入pl/sql,左栏选择“My objects(我的对象)”->“Tables”。

8.Oracle与SQLServer、MySql不能通用的SQL语句:

select top 2 * from emp;

show databases;

show create table emp;

create database mydata;【oracle的数据库虽然很强大,但创建1个数据库却很麻烦】

drop database mydata;

auto_increment、primary key

9.pl/sql一个特殊的sql语句(是区分大小写的)

select * from emp where ename='&name';

按回车之后会弹出一个输入框要求输入name的值~

10.显示和设置环境变量

概述:可以用来控制输出地各种格式,set show 如果希望永久的保存相关的设置,

可以去修改 glogin.sql 脚本。

(1)linesize

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

show linesize;

set linesize 90;

(2)pagesize (打印报表的时候很有用,数值的大小并非每页显示纪录的大小)

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

至于其他环境参数的使用也是大同小异。

11.创建用户

概述:在 oracle 中要创建一个新的用户使用 create user 语句,一般是具有

dba(数据库管理员)的权限才能使用。

create user xiaoming identified by m123;

注意:设置密码的时候必须以字母开头,如果以数字开头的话则不能成功。

-----------------------------------------------------

SQL> show user;User is "scott"SQL> create user xiaoming identified by m123;create user xiaoming identified by m123

-----------------------------------------------------

SQL> disc;Not logged onSQL> conn system/876521963;Connected to Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 Connected as system SQL> create user yang3wei identified by dxyang3wei; User created

-----------------------------------------------------

12. 给用户修改密码(如果是给别人修改密码则自身需要 dba 的权限)

概述:

如果给自己修改密码可以直接使用:password 用户名

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

alter user 用户名 identified by 新密码。

注意:在sql *plus里面和 pl/sql里面效果不同

13.用户管理的综合案例

概述:创建的新用户是没有任何权限的,甚至连登陆到数据库的权限都没有,需要

为其指定相应的("相应的"就意味着权限远不止一种)权限。

①system 和 sys 具有给新用户赋权限的权力。

②给一个用户赋予权限使用命令 grant.

grant connect to yang3wei;

③回收权限使用命令 revoke。

revoke connect from yang3wei;

【0.只有具备了 “create session”的系统权限,才能登陆】

【1.准确来讲,connect 不是一种权限而是一种角色,它包含了 create session 的系统权限】

【2.oracle 大概有 140 多种权限,关键的对象权限有 25 个左右】

【3.一个权限一个权限给太麻烦,太慢了,于是oracle提出角色的概念,

可以一次性给用户赋予多种系统或对象权限,感觉像权限的批量授权】

【4.预定义角色:数据库安装完毕的时候就具有了的角色,如 connect 】

【5.自定义角色:自定义权限集合,很灵活】

14.删除用户

概述:一般以dba的身份去删除某个用户,如果用其他用户区删除用户则

需要具有 drop user 的权限。比如:

drop user 用户名 【cascade】

注意1:自己删除自己是不允许的~

注意2:再删除用户时,如果要删除的用户,已经创建了表,那么在删除的时候就

需要带一个参数 cascade(把这个用户和这个用户创建的表级联的删除)

15.如果希望 xiaoming 用户可以去查询 emp 表呢?

首先,新用户xiaoming没有任何表!

xiaoming可以建表吗?不可以,没有在system表空间建表的权限。

16.如果希望xiaoming用户可以去查询scott 的emp表呢(对象权限的控制)?

scott、sys、system 等用户执行以下命令(自个儿的东西,权力大的用户):

grant select on emp to xiaoming;

xiaoming 在查询 emp表的时候,必须用以下命 令才能查看 emp表

select * from scott.emp;

希望xiaoming用户可以去修改 scott 的emp 表呢?

grant update on emp to xiaoming;

希望xiaoming用户可以去修改/删除、查询、添加scott的 emp表

grant all on emp to xiaoming;

16.如果 scott 希望收回xiaoming 对 emp 表的查询权限呢?

revoke select on emp from xiaoming;

17.对权限的维护 -- 还希望xiaoming可以把这个权限继续给别人。

【注意:如果是 对象权限,就加入 with grant option 】

grant select on emp to xiaoming with grant option;

【注意:如果是 系统权限,如 system 给 xiaoming 权限时:】

grant connect to xiaoming with admin option;

18.如果scott授予xiaoming查询scott.emp表的权限,而xiaoming又授予了

xiaohong查询scott.emp表的权限。那么,当scott收回xiaoming查询scott.emp

表的权限时,xiaohong是否还保留有对scott.emp表的查询权限呢?

答:也被回收!(这是对象权限的情形,如果是系统权限,则恰恰相反)

知识点二:

一、SQL语言包含4个部分:

数据定义语言(DDL:CREATE、DROP、ALTER);

数据操作语言(DML:INSERT、UPDATE、DELECTE);

数据查询语言(DQL:SELECT);

数据控制语言(DCL:GRANT、REVOKE、COMMIT、ROLLBACK)

建表

create table demo(        id number(8),        name varchar2(20)  )

插入数据

insert into demo values(1,'zhangshang');  insert into demo values(2,'lishi');

提交

commit;

查询数据字典(table_name='这里的值要大写')

select * from dba_tab_cols a where a.table_name='DEMO';

创建视图

create or replace:如果该视图存在就替换,如果不存在就创建

create or replace view myView as select id 编号,name 姓名 from demo;  select * from myView;

二. Oracle(甲骨文)简介

Oracle Database下载安装:Oracle Database Express Edition (XE) Downloads

2.Oracle 数据库监听程序' 的端口: 1521

3.Oracle Services for Microsoft Transaction Server' 的端口: 2030

4.Oracle HTTP 监听程序' 的端口: 8080

连接数据库:Oracle自带“运行SQL命令行”输入“conn system”;windows cmd命令行工具输入sqlplus “as sysdba”(作为管理员身份);

三.系统开发的概念

(1)、 系统开发周期:需求分析、系统设计、编码、测试、上线、维护

(2)、 数据库开发:

是一个自顶向下的系统过程,将商业信息需求转化为一个可操作的数据库

由五个阶段组成:Strategy and Analysis(策略与需求)、Design(设计,构建实体关系模型图(ER图))、Build and Document(构建相应的文档)、Transition(实例图)、Production数据库设计

四、数据建模

(1)、 Entity Relationship Model(ER图)

实体-联系图,例如:

2019-01-10_第1张图片

(2)、 实体关系建模的概念:

实体:生活中存在的一些事物

属性:描述实体的一些特征

关系:两个实体之间的关系

(3)、 实体关系模型

根据具体业务规划和描述创建ER图

(4)、 实体间关联关系

one-to-one:一对一关系如果要建立主外键关系,如果都是实线或都是虚线可以随便建。如果一边实线,一边虚线,实线一边建唯一外键

one-to-many:一对多关系外键建立在多的一方

many-to-many:多对多可以拆成两个一对多或者建立一张桥表

(5)、 范式

符合某一种级别的关系模式的集合,关系型数据库要遵循范式

第一范式:如果关系中所有属性的值都是单个值(有主关键字,主关键字不能为空,主键不重复,字段不可再分)

第二范式:如果关系模式是第一范式,而且关系中每一个非主属性不部分依赖于主键(第二范式主要任务是满足第一范式前提下,消除部分依赖)

第三范式:满足第二范式的前提下,消除传递依赖

(6)、 完整性约束

主键(primary key):一个表最多只能有一个主键,主键内容未非空和唯一。如果多个列联合作为主键,则是联合唯一、单列非空(代理主键、自然主键)

外键(foreign key):由一个列或者多个列组成,取值为本表或者其他表的唯一约束列或主键列,可以为NULL,但如果外键是联合主键的一部分那么外键的值不能为NULL

非空(NOT NULL):一定要赋值

唯一(UNIQUE):取值不能重复

CHECK:自定义约束限定列的内容

(7)、 数据库设计

实体和属性映射成表和列;

命名规则(以字母开头,长度限制30个字符,A-Z、a-z、0-9、_、$和#,不能是保留字,在同一用户下对象名不能重复);

数据类型(VARCHAR2(size)可变长度字符串;CHAR(size)固定长度字符串;NUMBER(i)i为整数位;NUMBER(p,s)p为有效数字位,s为小数位;DATE;TIMESTAMP精确到毫秒;CLOB可存储大数据的字符串;BLOB可存储二进制数据);

其他需求设计:设计索引,定义视图,设计物理存储空间,重新定义完整性约束

五.事务transaction

(1)、 组合在一块的多个操作,这多个操作表现像一个不可分割的原子操作,要么同时成功,要么同时失败,通过事务确保数据的完整性。特点:原子性、一致性、隔离性、持久性

try{//启动事务//对表进行操作  (事务)//提交事务}catch(Exception e){//回滚事务}

(2)、 事务开始边界的声明

通过SQLPlus连接上Oracle,即开始一个事务

一个事务的结束也意味着另一个事务的开始

(3)、 事务结束边界的声明

正常结束(COMMIT):数据改变写入数据库,所有用户均可看到改变后的结果,所有的回滚点擦除,作用于记录上的锁丢失,其他用户可对这些记录进行更新操作,DDL和DCL命令的执行(自动提交),DML不会自动提交,正常退出会自动提交

异常回滚(ROLLBACK):事务进行过程中状态丢失,恢复到事务开始前的状态,作用于记录上的锁丢失,其他用户可对这些记录进行更新操作,系统失败或非正常地终止SQLPuls,将会自动回滚

回滚到特定位置:通过命令SAVEPOINT设置回滚点,通过命令ROLLBACK TO回退到回滚点(设置回滚点:SAVEPOINT p)

六. 数据字典

(1)、 概念:Oracle数据库创建、更新和维护的表,包含数据库的相关信息(数据库用户的名字、授权给用户的权限信息、数据库对象的信息、表的约束信息)

(2)、 分类:

USER(用户创建对象对应的数据字典);

ALL(所有用户所能访问对象(包括用户创建的对象)对应的数据字典表);

DBA(所有对象对应的数据字典);

V$(描述系统性能相关的数据字典表);

DICTIONARY(一个特殊的数据字典表——用来描述数据字典表相关信息的数据字典表);

TABLE_PRIVILEGES(数据表权限)

(3)、 使用人员范围:

DBA人员(V$version、DBA);

开发人员(user_*、all_*)

(4)、 数据字典中常用表的定义:

dictionary(存放数据字典中所有表的信息);

user_object(存放当前用户下所有对象(包括表、视图、索引、序列和约束等));

user_constraints(存放当前用户下所有的约束信息)

user_cons_columns(用来查看和约束相关的列)

dict_columns(可以查看数据字典中所有视图对应的列)

user_users(存放当前用户的信息)

all_user(存放数据库中所有用户的信息)

user_indexes(存放当前用户所有的索引信息)

all_indexes(存放数据库中所有用户的索引信息)

user_tables(存放当前用户所有的表信息)

all_tables(存放数据库中所有用户的表信息)

user_views(存放当前用户所有的视图信息)

all_views(存放数据库中所有用户的视图信息)

user_synonyms(存放当前用户所有表的同义词)

all_synonyms(存放当前数据库所有用户表的同义词)

七. 序列SEQUENCE

Oracle数据库中一种特殊的对象,能够产生连续的整数,可以为数据库中多个对象共同使用,主要用于作为主键值

(1)、 创建SEQUENCE

CREATE SEQUENCE table_name_seq[INCREMENT BY n]//递增值n[START WITH x]//初始值x[MAXVALUE max|NOMAXVALUE]//是否有最大值[MINVALUE min|NOMINVALUE]//是否有最小值[CYCLE|NOCYCLE]//到最大值后是否从初始值循环[CACHE m|NOCHAHE];//预先产生m个值到缓存中,默认20个

(2)、 使用SEQUENCE

通过NEXTVAL(每次获得不同的(下一个)sequence值)和CURRVAL(获得当前指向sequence值)进行调用,在SEQUENCE对象没有通过NEXTVAL调用之前,不能通过CURRVAL调用,否则会产生错误

(3)、 修改SEQUENCE

/*不能修改起始值*/ALTER SEQUENCE seq_name[INCREMENT BY n][MAXVALUE max|NOMAXVALUE][MINVALUE min|NOMINVALUE][CYCLE|NOCYCLE][CACHE m|NOCHAHE];

(4)、 删除SEQUENCE

DROP SEQUENCE seq_name;

八. 数据导入导出

(1)、 数据导出

以DBA身份连接到数据库

创建用户授权

CREATE USER user_name IDENTIFIED BY password;

GRANT RESOURCE,CONNECT TO user_name;

登出SQL*Plus并导出数据文件

exp userid=user_name/password full=y file=*.dmp

(2)、 数据导入

登出SQL*Plus并导入数据文件

imp userid=user_name/password full=y file=*.dmp

你可能感兴趣的:(2019-01-10)