从零开始学Oracle(一至五)

素颜马尾好姑娘i 2022-09-26 14:52 284阅读 0赞

--以下内容转载于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 簇名

发表评论

表情:
评论列表 (有 0 条评论,284人围观)

还没有评论,来说两句吧...

相关阅读

    相关 开始 Oracle 读书笔记

    前言: 在阅读《从零开始学 Oracle 》的时候,发现课后习题可以帮助自己回忆这一章节的内容。但是,没能找到题目的答案,于是自己总结了一份,记录于此。这里没有SQL实战,但是

    相关 开始摄影

    一、摄影技术的学习方法 二、必须要掌握的专用名词 三、摄影审美的学习方法 正文: 一、摄影技术的学习方法 最近好几个朋友都聊到说要找个老师学摄影,由此我又有点关于摄

    相关 开始抓取

    从零开始学抓取   昨天突然遇到了一个需要统计某个网站所有页面单词数的任务,于是从零开始学起python搞抓取。   看了一下资料,需要用到下面几个库: bea

    相关 开始netty

    Netty概述: 1、netty是基于Java NIO的网络应用框架,client-server框架 2、Netty是一个高性能、异步事件驱动的NIO框架,它提供了对T