oracle一步接一步(1)--基础入门

1. 下载并安装oracle10。

    (1)一路默认安装,设置好自己的密码。安装完成要运行database configration assistant图形工具创建数据库。有的是默认安装完就运行,如果默认不运行,自己在开始菜单中找到该选项运行(在windows下时)


2. 登录同机sqlplus客户端。

    (1)打开命令行控制台,在其中输入sqlplus 命令。

    (2)系统会提示输入登陆用户名和密码,一次输入。如用户名:SYSTEM 密码:yourpwd。

             当出现 SQL> (在dos控制台下)时,表示登陆成功。

 

3.创建一个用户。

    (1)在登陆sqlplu后,输入:create user somename identified by pwd;

            即创建了一个用户名为somename,密码为 pwd 的用户

    (2)为用户授予权限:  grant create session to somename ; // 授予 somename 连接数据的权限

             或为用户授予角色:grant dba to somename;

    (3)修改用户密码:alter user somename identified by otherpwd;

    (4)删除用户:drop user somename;

    (5)显示用户所拥有的表:select table_name from dba_tables where owner='somename';

    (6)显示所有用户:select username from dba_users;

 

4.查看当前登陆相关信息

     (1)查看当前登录数据库

                     show parameter db_name; select name from v$database;

     (2)查看当前sid和servicename

                     select sid from v$mystat where rownum <=1;

                     show parameter service

     (3) 查看数据库中的所有表 select * from tab;

     (4)查看当前数据库版本 select * from product_component_version

 

5.新建表以及数据操作同标准sql在这里不再赘述。

     (1)但是oracle很多地方还是很让人恶心的,比如设定主键自动增长机制。需要用的sequence和trigger,即序列和触发器。这要比起mysql的auto_increment和sql server的identity(1,1)的方便性比较,简直就是十分值得抱怨的事情。好了,现在说怎么实现orcale建表主键的自动增长的例子

      a)建立表  create table xtest(id int not null primary key, name varchar(20));

      b)建立序列

create sequence xtest_seq
minvalue 1
maxvalue 999999999
start with 1
increment by 1
cache 20;

       c)建立触发器

create or replace trigger xtest_trigger before
insert on xtest for each row when(new.id is null)
begin
select xtest_seq.nextval into :new.id from dual;
end;
/

分析原理:主键自动增长是用sequence来完成的,这需要我们在插入的时候指定用哪个sequence来给予值。于是就需要触发器来做这些事情。触发器类似与存储过程,但负责监听。比如上面的触发器监听xtest表的插入事件。当然,我们也可以不用触发器,直接insert into xtest(id, name) values(xtest_seq.nextval, 'johntor');了事。但是谁又会喜欢去写如此的sql语句呢!

   (2)显示表设计

                 desc 表名

这个mysql也有,不用多说。全称命令是describe。

   (3)显示已经建立的sequence

                 select * from user_sequences;

可以有where语句如   where sequence_name = 'YOUR_SEQ_NAME'

   (4)关于删除表

我们都会知道用sql如:drop table tablename;   ok,执行后,数据库提示你执行成功了,但是在查询一下你的所有表select * from tab;会发现,多了一个类似“ BIN$YkN4S58dTPC/vBboMCNh0A==$0”名字的表 。奇怪吗,其实也不,自己在第一时间想到的就是oracle为了安全起见,让你恢复表数据用 的,事实也的确如此。

        a)我们用flashback table "BIN$YkN4S58dTPC/vBboMCNh0A==$0" to before drop;命令乐意恢复我们刚才删除的表。也就是说,我们用的删除语句把一个结构相同而其重命名的表放进了回收站。

        b)drop table tablename purge; 可以绕过回收站,直接删除。这样就不能恢复了。

        c)执行 purge recyclebin; 命令可清空当前用户的回收站。执行purge table tablename; 命令可以清除回收站内指定的表。记住这里的tablename不是那个很长的字符串,而是自己原来删除前表的是进名字。

 

6.关于表空间

(1)查询现有表空间情况的sql语句如下:

      select 
      total.tablespace_name tsname, 
      count(free.bytes) nfrags, 
      nvl(max(free.bytes)/1024,0) mxfrag, 
      total.bytes/1024 totsiz, 
      nvl(sum(free.bytes)/1024,0) avasiz, 
      (1-nvl(sum(free.bytes),0)/total.bytes)*100 pctusd 
  from 
      dba_data_files total, 
      dba_free_space free 
  where 
      total.tablespace_name = free.tablespace_name(+) 
  group by 
      total.tablespace_name, 
      total.bytes;

 当然可以用一句话来看都有什么表空间 select tablespace_name from dba_data_files;

(2)表空间的概念:一个数据库从逻辑上来说是由一个或多个表空间所组成,表空间是数据库中物理编组的数据仓库。每一个表空间是由段所组成,一个表空间存放一个或多个数据库的物理文件。一个数据库中的数据被逻辑地存储在表空间上。

更直观一点说,表空间就是由一个或几个数据文件构成的逻辑存储单元。

(3)创建表空间:

create tablespace data01
datafile 'C:/data/data01.dbf' size 500M
uniform size 128k; #默认为64k

 (4)删除表空间:drop tablespace data01 including contents and datafiles;

 (5)修改表空间大小:alter database datafile 'C:/data/data01.dbf' resize 100M;

 (6)移动表到另一个表空间:alter table ztest move tablespace data01;

         上面ztest为表的名字data01为表空间的名字

 (7)显示属于一个表空间的所有内容信息以及所有者:

select distinct owner,segment_name, segment_type 
from dba_extents
where tablespace_name='DATA01';

  (8)显示一个表属于哪个表空间:select tablespace_name from tabs where table_name = 'ZTEST';

通过上面关于表空间的一些讲述,我们就会想到在建表的时候,就为表直接指定表空间了,如下:

                          create table zztest(id int) tablespace USERS;

下面是我没有测试过的,但应该没有什么问题的技巧:

      a)给表空间添加数据文件:alter tablespace date01 add datafile d:/data/date02.dbf size 50m;

      b)设置数据文件自动扩展:

    alter database datafile d:/data/date02.dbf autoextend on next 10m maxsize 500m;

 

你可能感兴趣的:(数据结构,oracle,sql,mysql,SQL Server)