小编正在学习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图)
实体-联系图,例如:
(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