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;