Oracle数据库

一、Oracle安装

Oracle服务的安装 ,Oracle客户端安装 ,pl sql developer安装。

OracleService+服务名,该服务是数据库启动的基础,只有该服务启动了,Oracle数 据库才能正常启动。这是必须启动的服务。

OracleOraDb10g_home1TNSListener,该服务是服务器端为客户端提供的监听服务, 只有该服务在服务器上正常启动,客户端才能连接到服务器。该监听服务
接收客户端发出的请求,然后将请求传递给数据库服务器。一旦建立了连接,客户端和数据库服务器就能直接通信了。

 OracleOraDb10g_home1iSQL*Plus ,该服务提供了用浏览器对数据库中数据操作的方 式。该服务启动后,就可以使用浏览器进行远程登录并进行数据库操作了

二、Oracle数据库版本分类:

Oracle 9g10g/11g/12c等。

sql 是结构化查询语言,是关系型数据库。

数据定义语言(DDL),包括CREATE(创建)命令、ALTER(修改)命令、DROP(删 除)命令等。

 数据操纵语言(DML),包括INSERT(插入)命令、UPDATE(更新)命令、DELETE (删除)命令、SELECT … FOR UPDATE(查询)等。 

数据查询语言(DQL),包括基本查询语句、Order By子句、Group By子句等。

 事务控制语言(TCL),包括COMMIT(提交)命令、SAVEPOINT(保存点)命令、 ROLLBACK(回滚)命令。

 数据控制语言(DCL),GRANT(授权)命令、REVOKE(撤销)命令。

三 、Oralce数据类型

varchar(n) 可变的 4000KM

char(n) 固定的 2000KM

number 浮点的j

number(m,n)精度,小数

date 日期型数据

long 可变的字符串

raw long raw 二级制

clob 图形 文本

image blob  基本数据类型 存储图片

四、Oralce创建表和约束

CREATE TABLE INFOS

(

STUID VARCHAR2(7) NOT NULL, --学号

STUNAME VARCHAR2(10) NOT NULL, --姓名

GENDER VARCHAR2(2) NOT NULL, --性别

AGE NUMBER(2) NOT NULL, --年龄

SEAT NUMBER(2) NOT NULL,--座号

ENROLLDATE DATE, --入学时间

STUADDRESS VARCHAR2(50) DEFAULT '地址不详', --住址

CLASSNO VARCHAR2(4) NOT NULL --班号

)

go

ALTER TABLE INFOS ADD CONSTRAINT PK_INFOS PRIMARY KEY(STUID)

 ALTER TABLE INFOS ADD CONSTRAINT CK_INFOS_GENDER CHECK(GENDER = '男'
OR GENDER = '女')

ALTER TABLE INFOS ADD CONSTRAINT CK_INFOS_SEAT CHECK(SEAT >=0 AND SEAT <=50)

 ALTER TABLE INFOS ADD CONSTRAINT CK_INFOS_AGE CHECK(AGE >=0 AND AGE<=100)

ALTER TABLE INFOS ADD CONSTRAINT CK_INFOS_CLASSNO CHECK((CLASSNO >='1001' AND
CLASSNO<='1999') OR (CLASSNO >='2001' AND CLASSNO<='2999'))

ALTER TABLE INFOS ADD CONSTRAINTS UN_STUNAME UNIQUE(STUNAME)

 

--简单查询一条语句

select 表达式 from 表名 where 条件 group by 列名 having 条件 order by 表达式

dual 是一个虚拟表

SELECT * FROM dual; 
SELECT to_char(SYSDATE,'yyyy-mm-dd hh24:mi:ss')AS 获取当前系统时间 FROM dual; 
select sys_context('userenv','terminal') AS 获取主机名 FROM dual; 
select sys_context('userenv','language') AS 获取当前locale语言 FROM dual; 

 

-- Create table
create table SYS.DUAL
(
dummy VARCHAR2(1)
)
tablespace SYSTEM
pctfree 10
pctused 40
initrans 1
maxtrans 255
storage
(
initial 16K
next 1M
minextents 1
maxextents unlimited
);
-- Grant/Revoke object privileges
grant select on SYS.DUAL to PUBLIC with grant option;


--查看表结构 (describe)简写 desc 表名

--去重复( distinct)

nvl

val

查询条件   like  ,in,or,between and  ,not null,is null,is not null

%ABC%

%_BC%     注 _是占位符

函数 

concat  连接字符串,instr 字符串,length 字符串长度,lover 大转小,upper  小转大 ,lpad(填充左边)rpad(填充右边) ,ltrim rtrim trim 去除空格,replace替换,substr字符串长度,

add_months(to_char('12-03-10','dd-mm-yy'),4)

last_day(to_date('',''))最后一天

months_between,sysdate 当前系统时间,to_date,to_number

avg  min max sum count

--查看当前数据库中所有表(dba_tables)

SELECT * FROM dba_tables;

--数据字典表
SELECT * FROM user_cons_columns;
SELECT * FROM User_Constraints;

--数据字典视图
SELECT * FROM User_Views;
SELECT * FROM all_views;
SELECT * FROM dba_views;

--索引
SELECT * FROM User_Indexes
SELECT * FROM user_ind_columns;

五、序列

--序列 (sequence) 
SELECT * FROM User_Sequences; 
SELECT * FROM all_Sequences; 
SELECT * FROM dba_Sequences;

-- Create sequence
create sequence SEQ_D_DMP_SSP_SETTLEMENT
minvalue 1
maxvalue 9999999999999999999999999999
start with 32
increment by 1
cache 10;

六、子查询与表连接

单行子查询:不向外部返回结果,或者只返回一行结果。

多行子查询:向外部返回零行、一行或者多行结果。

七、表空间 (TableSpace) 表空间就是存放数据的,数据存放在(Data File目录下)。

一个数据库可以包含多个表空间,一个表空间只能属于一个数据库
一个表空间包含多个数据文件,一个数据文件只能属于一个表空间

 

--查看数据库的版本
select * from v$version;
SELECT * FROM product_component_version;
SELECT VERSION FROM product_component_version
WHERE SUBSTR(product ,1,6)='Oracle';


--查看表空间的名称及大小
SELECT * FROM dba_tablespaces;
SELECT * FROM dba_data_files;
select t.tablespace_name, round(sum(bytes / (1024 * 1024)), 0) ts_size
from dba_tablespaces t, dba_data_files d
where t.tablespace_name = d.tablespace_name
group by t.tablespace_name;


--查看数据库对象
SELECT * FROM all_objects;
SELECT owner,object_type,status,COUNT(*) COUNT#
FROM all_objects
GROUP BY owner,object_type,status;

--查看控制文件
SELECT * FROM v$controlfile;
SELECT NAME FROM v$controlfile;

--查看日志文件
SELECT * FROM v$logfile;
SELECT MEMBER FROM v$logfile;


--查看表空间使用的情况
SELECT * FROM dba_free_space;
SELECT * FROM dba_data_files;

select a.TABLESPACE_NAME "表空间名",
total "表空间大小",
free "表空间剩余大小",
(total - free) "表空间使用大小",
total / (1024*1024*1024) "表空间大小(G)",
free / (1024*1024*1024) "表空间剩余大小(G)",
(total - free) / (1024*1024*1024) "表空间使用大小(G)",
round((total - free) / total , 4 ) *100"使用率%"
from (select tablespace_name,sum(bytes) free
from dba_free_space
group by tablespace_name) a,
(select tablespace_name,sum(bytes) total
from dba_data_files
group by tablespace_name) b
where a.TABLESPACE_NAME = b.tablespace_name;

 

 查看表空间使用的情况:

select a.TABLESPACE_NAME "表空间名",
total "表空间大小",
free "表空间剩余大小",
(total - free) "表空间使用大小",
total / (1024*1024*1024) "表空间大小(G)",
free / (1024*1024*1024) "表空间剩余大小(G)",
(total - free) / (1024*1024*1024) "表空间使用大小(G)",
round((total - free) / total , 4 ) *100"使用率%"
from (select tablespace_name,sum(bytes) free
from dba_free_space
group by tablespace_name) a,
(select tablespace_name,sum(bytes) total
from dba_data_files
group by tablespace_name) b
where a.TABLESPACE_NAME = b.tablespace_name;

 

--查询表空间使用情况
  SELECT UPPER(F.TABLESPACE_NAME) "表空间名",
  D.TOT_GROOTTE_MB "表空间大小(M)",
  D.TOT_GROOTTE_MB - F.TOTAL_BYTES "已使用空间(M)",
  TO_CHAR(ROUND((D.TOT_GROOTTE_MB - F.TOTAL_BYTES) / D.TOT_GROOTTE_MB * 100,2),'990.99') || '%' "使用比",
  F.TOTAL_BYTES "空闲空间(M)",
  F.MAX_BYTES "最大块(M)"
  FROM (SELECT TABLESPACE_NAME,
  ROUND(SUM(BYTES) / (1024 * 1024), 2) TOTAL_BYTES,
  ROUND(MAX(BYTES) / (1024 * 1024), 2) MAX_BYTES
  FROM SYS.DBA_FREE_SPACE
  GROUP BY TABLESPACE_NAME) F,
  (SELECT DD.TABLESPACE_NAME,
   ROUND(SUM(DD.BYTES) / (1024 * 1024), 2) TOT_GROOTTE_MB
  FROM SYS.DBA_DATA_FILES DD
  GROUP BY DD.TABLESPACE_NAME) D
  WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME
  ORDER BY 1;

--查看表空间物理文件的名称及大小
SELECT * FROM dba_data_files;

select tablespace_name,
file_id,
file_name,
round(bytes / (1024 * 1024), 0) total_space
from dba_data_files
order by tablespace_name;


--查看表空间是否具有自动扩展能力
SELECT * FROM DBA_TABLESPACES;
SELECT * FROM DBA_DATA_FILES;

SELECT T.TABLESPACE_NAME,
D.FILE_NAME,
D.AUTOEXTENSIBLE,
D.BYTES,
D.MAXBYTES,
D.STATUS
FROM DBA_TABLESPACES T, DBA_DATA_FILES D
WHERE T.TABLESPACE_NAME = D.TABLESPACE_NAME
ORDER BY TABLESPACE_NAME, FILE_NAME;

--Oracle递归查询
select * form start with name='系统' connect by prior t.parentid= id

 

锁表查询
select p.spid,
a.serial#,
c.object_name,
b.session_id,
b.oracle_username,
b.os_user_name
from v$process p, v$session a, v$locked_object b, all_objects c
where p.addr = a.paddr
and a.process = b.process
and c.object_id = b.object_id;

 

--查看表中的列数

select count(column_name) from user_tab_columns where table_name ='表名'   --表名为大写

b)创建表空间
create tablespace user_date datafile 'D:\app\user_date.dbf' size 50M 
autoextend on next 50M maxsize 2048M extent management local;

c)创建用户
create user 用户名  identified by 密码 default tablespace 表空间名称;

d)给新用户授权

grant connect,resource,dba to 用户名;

或者:
GRANT CONNECT TO 用户名;
GRANT RESOURCE TO 用户名;
e)使用新用户登录
conn 用户名/用户名;

1.使用System用户登录Oracle
2.alter user scott account unlock;//解锁账户
3.alter user scott identified by tiger//更改密码
4.conn scott/tiger;

Oracle 导入导出(dmp)文件

imp daspzk/daspzk@zzld file='d:aa/daspzk.dmp owner = daspzk log='d:aa/daspzk.txt'

imp daspzk/daspzk@zzld file='d:aa/daspzk.dmp owner = daspzk full=y  log='d:aa/daspzk.txt'

exp daspzk/daspzk@zzld file='d:aa/daspzk.dmp owner = daspzk log='d:aa/daspzk.txt'

 修改表结构

add drop modify rename

truncate :删除表中所有文件,删除后就不能恢复了

delete :删除表数据,保留表结构

drop: 表结构,表数据都一并删除了

--修改数据库的表名

alter table old表名 rename to new表名

--修改列名

alter table 表名 rename column old列名  to new表名

--修改列名的数据类型

alter table 表名 modify 列名 new_datatype

--插入列

alter table 表名 add 列名 datatype

--添加约束

alter table 表名 add(constraint 约束名 约束类型(列名))

--更新约束

alter table 表名 modify(constraint 约束名 约束类型(列名))

--删除约束

alter table 表名 drop(constraint 约束名 约束类型(列名))

删除列

alter table 表名 drop column 列名

约束 : not null 非空 unique 唯一 primary key 主键 foreign key 外键 check 检查  constraint constraint 约束名 references 表名(列名)

Oracle实例的启动与关闭:Oracle数据库是由实例和数据库组成,一个实例只能打开一个数据库。

启动Oracle 服务器的命令是 startup 只有sys用户才能执行。

startup 例程启动

net start OracleServiceORCL   

startdown 例程关闭
net stop OracleServiceORCL

--游标

declare
--定义游标
cursor emp_cursor is
select ename,sal from emp where deptno= 30;
--定义变量
v_ename emp.ename%type;
v_sal emp.sal%type;
begin

--打开游标
open emp_cursor;
loop
--提取数据
fetch emp_cursor into v_ename, v_sal;
exit when emp_cursor%notfound;
dbms_output.put_line(v_ename|| '工资是:' ||v_sal);
end loop;
--关闭游标
close emp_cursor;
end;

 

posted @ 2017-07-24 13:59  随情  阅读(239)  评论(0编辑  收藏  举报