从零开始学Oracle(一至五)
--以下内容转载于http://tech.ddvip.com
--从零开始学Oracle—环境配置(一)
一、开始前的准备
1.启动Oracle
启动监听服务:OracleOraHome90TNSListener
启动实例服务:OracleServiceOrac
2.Oracle系统用户
Oracle三大系统用户
默认用:system/welcome
超级用户:sys/welcome 权限最大
普通用户:scott/tiger
3.登录Oracle的方式
Windows窗口下的sqlplus的操作 运行->sqlplusw.exe
DOS下的sqlplus的操作 运行-> sqlplus.exe
登录Oracle但不连接数据库 运行->sqlplusw /nolog
connect 用户名/密码@主机连接字符串 连接到指定用户
4.Oracle常用操作
show user 查看当前用户 select * from tab where tabtype=’TABLE’ 查看当前用户下的表
desc dept 察看表dept的结构
quit/exit 退出
clear screen 清除屏幕
set linesize 200 设置一行显示200个字符
set pagesize 20 设置每页显示20行
spool 文件名 (spool c:abc.txt) 作日志文件命令 spool off
alter session set nls_date_format = ‘yyyy-mm-dd’; 改日期的默认格式
conn /as sysdba select * from v$version;查看当前Oracle的版本
conn system/welcome select * from v$tablespace; 查看表空间
5.表空间 用户 表三者的关系
一个用户可以使用一个或多个表空间,一个表空间也可以供多个用户使用
用户和表空间没有隶属关系。
表空是一个用来管理数据存储逻辑概念,表空间只是和数据文件发生关系,数据文件是物理的,
一个表空间可以包含多个数据文件,而一个数据文件只能隶属一个表空间
二、常规操作
1.DDL语句(数据定义语言) Data Define Language
create alter drop truncate 开头的语句 truncate table <表名>
特点:<1>建立和修改数据对象
<2>建立和修改直接存入库中,直接生效
创建表空间:Create tablespace Product datafile ‘D:testaa.DBF’ size 100M
删除表空间:Drop tablespace Product
创建用户: Create user zhangsan identified by “welcome” default tablespace Product
修改用户: Alter user zhangsan identified by “Hello”
授予用户连接的权限: grant connect to zhangsan;
撤销用户连接权限: revoke connect from zhangsan;
授予用户在表空间创建对象的权限
grant unlimited tablespace to zhangsan;
grant resource to zhangsan;
系统特权:unlimited tablespace表示用户可以在任意表空间中创建对象,且此权限只能授予用户而不能授予角色
resource角色:给用户RESOUCE权限后,用户就拥有在所有表空间上建表权限
授予用户zhangsan对Emp表增、删、查、改的权限
grant select on scott.empa to y2;
delete
update
insert
all (=select,delete,update,insert)
with grant option 授予用户权限,则接受权限的用户可以将此权限授予其他用户.
(1).建表,并指定表空间
示例: Create table tab1
(
no number(4),
name varchar2(10)
)tablespace Product;
学生表 Student
Create table student
(
xh number(4) primary key, —学号
name varchar2(10) not null, —姓名
sex char(2) check (sex in (‘男’,’女’)),—性别
birthday date,—生日
sal number(7,2), —奖学金
classid number(2) references class(classid) —班级
); 班级表class
Create table class
(
classid number(2), —班级编号
cname varchar2(20) —班级名字
);
添加字段(学生所在班级classid)
alter table student add (classid number(2));
修改字段的长度
alter table student modify (xm varchar2(12)) ;
修改字段的类型(不能有记录的)
alter table student modify (xh varchar2(5));
删除一个字段
alter table student drop column sal;
删除表
drop table student;
表的名字修改
rename student to stu;
字段如何改名字
—先删除
a)alter table student drop column sal;
—再添加
b)alter table student add (salary number(7,2));
Number数据类型的存储范围
精度 存储字节数
1 - 9 5
10-19 9
20-28 13
29-38 17
--从零开始学Oracle—基本语法解析(二)
Oracle数据操作语言 DML
接上一篇:
2. DML语句(数据操作语言) Data Manupilate Language
select
insert
delete
update
特点:<1>对数据起作用的
<2> 这些语句的修改是在内存中发生的
要想改动存入库中必须要commit语句
查看当前用户的所有权限
select * from session_privs;
查看当前用户下的所有表
select * from tab where tabtype=’TABLE’;
3. TCL(事务控制语句) Transaction Control Language
commit; 提交 修改保存到数据库中
rollback; 回滚 取消内存中的改动
savepoint;保存点 分解事务的 把事务变小
DDL语句 会自动提交以前未提交的事务
关闭SQLplus工具 也会自动提交未提交的事务的
事务 — 就是一个完整的对数据的DML操作
所有事务 都是要明确的提交和回滚的
—转账
update 账目表
set 钱=钱-500
where 帐号=’A’;
update 账目表
set 钱=钱+500
where 帐号=’B’;
commit;
事务何时存在 DML语句中除select以外都会有事务
《《《《《《《注意》》》》》 / 重复运行上一条SQL语句
commit; 结束上一个事务 并且开始一个新的事务
update student set sal = null where xh =1000;
savepoint c111;
insert into student(xh,name,sex) values (1004,’MIKE’,’男’);
rollback to c111; —撤销了插入的数据
rollback; —从c111这个点回滚到事务的开始点
《SQLPLUS规则》
a)DML语句后跟上DDL语句 DML语句的事务会被自动提交
b)exit/quit命令 退出 SQLPLUS环境时也会自动提交事务
点小叉子关闭sqlplus窗口 事务都自动回滚了
c)非法操作是不能提交事务的 ,只能导致事务回滚
《4》 DCL语句(数据控制语句) Data Control Language grant 授予权限
revoke 撤销权限
权限 select ,insert,delete,update
all (select ,insert,delete,update 总和)
角色 connect (登陆数据库),resource(建立表和对象)
如何建一个自己的用户?
必须是超级用户才能建用户
—连接到超级用户
connect system/manager
—建立用户名zhangsan 密码m123
create user zhangsan identified by m123;
—授予必要的权限connect 你能够连接
resource 你能建表不受空间的限制,建立对象
grant connect,resource to zhangsan;
—这个普通用户就建好了 和scott用户的权限是一样的
grant DBA to zhangsan; —张三的权限和System一样
—改张三的密码
<<1>> 自己改自己的密码
connect zhangsan/m123
密码改为了mm1
alter user zhangsan identified by mm1;
<<2>> 超级用户来改
connect system/manager
alter user zhangsan identified by mm1;
-—-从零开始学Oracle-—约束(三)
给表添加约束
主键约束 — 每个表要有主键,唯一的标识一行数据
非空约束
唯一性约束
外键约束
检查约束
查看一个表的约束:
select constraint_name,constraint_type
from user_constraints
where table_name = ‘表名’
查看约束作用于那个字段:
select * from user_cons_columns
where CONSTRAINT_NAME=’约束名’;
1.建立表的同时使用约束
create table student( —学生表
xh number(4) primary key, —学号主键
xm varchar2(10) not null, —姓名不能为空
sex char(2) check (sex in (‘男’,’女’)), —性别
birthday date unique, —日期
sal number(7,2) check (sal between 500 and 1000),—奖学金 sal >=500 and sal <=1000
classid number(2) references cla(id)
); —必须要先有cla表才对
—一定先建立班级cla表
2.建立约束的同时给约束指定名字,便于删除
create table stu( —学生表
xh number(4) constraint pk_stu primary key, —学号是主键
xm varchar2(20) constraint nn_stu not null, —姓名非空
age number(2) constraint ck_stu check (age between 10 and 90),
birthday date,
shenfenzheng number(18) constraint uq_stu unique, —身份证唯一
classid number(2) constraint fk_stu references cla(id) — 班级编号外键
—(引用的一定是另外表的主键或唯一性约束的字段)
);
3.建完表后加约束
添加主键约束:alter table student add constraint pk_stu primary key (xh);
添加非空约束:alter table student modify (xm not null);
检查约束:
alter table student add check(sex in (‘男’,’女’));
alter table student add constraint ck_sal check(sal between 500 and 1000));
添加外键约束: alter table student add constraint fk_stu foreign key (classid) references cla(id);
添加唯一约束: alter table student add constraint uq_sfz unique(shenfenzheng);
4.删除约束:
格式:alter table 表名 drop constraint 约束名
alter table student drop constraint fk_stu;
-—从零开始学Oracle—内建对象(五)
1. 序列
查询当前用户下的序列:select * from user_sequences
定义:用来生成唯一、连续的整数的数据库对象,序列通常用来自动生成主键或唯一键的值、可升、可降序排列.
语法: Create sequence 序列名称 //从1开始 每次自动增加1 没有最大值
[star with 值] 指定要生成的第一个序列号,对于升序默认值为最小值、反之…
[increment by 值] 间隔数
[maxvalue 值|nomaxvalue] 序列最大值,如果指定为nomaxvalue,则升序最大值为10的27次方,降序-1.
[minvalue 值|nominvalue] 序列最小值,———————————-升序为1,降序为10的负26次方
[cycle|nocycle] cycle指序列到达最大或最小时,将从头开始生成值 nocycle值不在生成
[cache 值|nocache] 预先分配一组序列号,将其保存在内存中. 默认缓存20个序列
访问序列方法: currval 和nextval —当前序列 select 序列名.currval from dual
更改序列:Alter sequence 序列名
删除序列:drop sequence 序列名
注意——————-序列使用时需要先用nextval输出完以后再来使用
使用:
1.和表关联作为表的字段的值
a) create table student(
xh number(4) primary key, —学号
xm varchar2(20) not null —姓名
);
要求:学号字段 从1000开始每次增加4 最大值9999
—建立序列
create sequence xh_seq
start with 1000 —从1000开始
increment by 4 —每次增加4
maxvalue 9999 —最大值 9999
;
—使用SQL语句关联
insert into student values
(xh_seq.nextval,’Mike’);
insert into student values
(xh_seq.nextval,’John’);
insert into student values
(xh_seq.nextval,’Rose’);
—特点:能产生唯一的值,但是不能保证值在表中的连续性
b) create table teacher(
teacherxh varchar2(10) primary key,
teachername varchar2(20)
);
要求:教师的编号的格式是TH00001
TH00002
….
—建立序列
create sequence teacher_seq
maxvalue 99999;
—
insert into teacher values (‘TH’||
ltrim(to_char(teacher_seq.nextval,’00000’)),
‘张三’);
insert into teacher values (‘TH’||
ltrim(to_char(teacher_seq.nextval,’00000’)),
‘李’);
insert into teacher values (‘TH’||
ltrim(to_char(teacher_seq.nextval,’00000’)),
‘王’);
2.视图
查看当前用户下的视图:select view_name from user_views;
作用:隐藏数据,增加系统的安全性
语法:Create [or replace] [Force|noForce] veiw 视图名 [(别名1,别名2…)]
AS 子查询
[with check option [constraint 约束名]]
[with read only] 视图是只读的
其中:or replace 表示替代已经存在的视图
force 表示不管基表是否存在,创建视图
noforce 表示只有基表存在时,才创建视图.
别名是为子查询中选中的列新定义的名字,替代查询表中原有的列名。
with check option 对视图操作时必须满足子查询的约束条件。后面的约束名是该约束条件的名字
删除视图者需要是视图的建立者或者拥有DROP ANY VIEW权限。视图的删除不影响基表,不会丢失数据
对视图操作需满足以下条件:
<1>建立视图的select语句必须是简单的select语句
简单:不能是多表的查询
不能有分组函数
<2>建立视图的时候不能带with readonly关键字
例:
create or replace view emp_v2
as —select语句
select empno,ename,sal from emp
with read only; —只读视图
3.同义词
查看用户创建的同义词:select * from user_synonum;
定义:数据库对象的一个别名
用途:1.简化SQL
2.隐藏对象名称和所有者
3.为分布式数据库的远程对象提供了位置透明度
4.提供对象的公共访问
注意:使用同义词前需要确保用户得到访问同义词的权限
同义词分为:
1.私有同义词 —只能被当前用户模式访问 要在自身模式下创建须 Create synonum 权限
2.共有同义词 —须Create any synonym权限
语法: Create [or replace] [public] synonym 同义词名称 for 要创建同义词对象的名称
4.索引
作用:加快查询 索引一定是建立在表上的.
语法:Create Index 索引名 on 表名(列名)
创建唯一索引: Create unique Index 索引名 on 表名(列名)
创建位图索引: Create bitmap Index 索引名 on 表名(列名)
数据的不同值对于记录的行数来说 是个很小的数 这种字段适合使用位图索引 它比普通索引效率高
不能用索引的条件:
<1>规则1:索引的字段不能参与运算
<2>规则2:索引的字段上不能使用函数
5.簇
定义:用于多表联合查询,提高数据查询效率
1.簇的创建必须在创建表结构时指定
2.如果使用簇,则两个表必须要有主外键关系
簇的使用步骤:
1.创建簇 Create cluster 簇名称(字段名 数据类型);
2.创建主键表使用簇
Create table depa (
deptno number(2) primary key,
dname varchar2(20)
) cluster 簇名(deptno);
3.创建外键表使用簇
Create table empa(
empno number(4) primary key,
ename varchar2(20)
) cluster 簇名(empno)
4.在簇上建立索引
Create Index 索引名 on cluster 簇名
还没有评论,来说两句吧...