oracle学习心得

   1 ... sqlplus 操作

1.  查询一个数据库所有表--》 selec * from  tab;
2.  设置页数 set pagesize 30;
3.  设置每行显示的数 set linesize 300;
4.  切换用户  conn 用户名[sys]/密码 [as sysdba/sys];
5.  查看一个表的结构-->desc 表名
6.  输入/ 可以重复刚刚执行的语句


 2....  cmd下
1. sqlplus  用户名[sys]/密码  [as sysdba or sysoper];

 

3.....sql语句操作
1. select job 工作  from emp;  查询工作列
2. select distinct job 工作  from emp;  查询工作列消除重复项
3. select  job 工作, sal*12 年薪  from emp;  查询工作列消除重复项
4. select  * from emp where ename like '_M%'
5. select * from emp where sal like '%5%' 查询工资包含5 的员工所有信息

 

oradim -NEW -SID myoracle -STARTMODE m -PFILE D:/app/Administrator/oradata/test.ora
startup -pfile = D:/app/Administrator/oradata/test.ora nomount

 

4....创建表和管理表

1. 常用数据类型 
  --------------------|-------------------------
   数据类型           |    描述
  --------------------|--------------------------------------------
   number,            |  number(n) 表示一个整数,number(m,n) 表示一个小数,小数长度为n,整数长度为m
   -------------------|----------------------------------
   varchar,varchar2  |
 ---------------------|-----------------------------------------
   date ,             |       表示日期类型
----------------------|------------------------------------------------
   blob,             |         二进制数据大对象4G
----------------------|-----------------------------------------
   clob               |         文本数据4G
----------------------|----------------------------------------

直接创建表
create table 表名
{
       字段名称   字段类型    [default 默认值],
       字段名称   字段类型    [default 默认值],
       字段名称   字段类型    [default 默认值],
}

用查询复制表
create table 表名 as (子查询)
如 create table temp as select * from emp where 1=2;可以复制表结构

删除表的数据
 delete 表名
删除表结构和数据
 drop table 表名

创建一个person表
 create table  person
(
    pid  varchar2(20) primary key,
    name varchar2(20),
    age number(3),
    birthday  date,
    sex varchar2(2)  default '男'
);

向表中增加数据
 insert into person(pid,name,age,birthday,sex)
 values('111111111111','张三',30,to_date('1976-02-03','yyyy-mm-dd'),'男');

5.....表的结构的语法
   1.增加
   alter table 表名 add(列名 列的类型 [default] 默认值);
   alter table person add(address  varchar2(100)  default '暂无地址');
   2.修改
   alter table 表名 modify(列名 列的类型 [default] 默认值);
   alter table person modify(name varchar(10) default '无名氏');
 
   3.给表重命名
   rename 表名1 to 现有表名


6...... 约束

 

  1.  利用笛卡尔集来求对应关系

  create table nation(
        name varchar2(20)
  );
 insert into nation values('中国');
 insert into nation values('美国');
 insert into nation values('英国');
 insert into nation values('荷兰');
 insert into nation values('巴西');


 select  t1.name , t2.name
 from  nation t1 ,nation t2   where  t1.name <> t2.name;

 2. 约束分类

   . 主键约束

         表示是一个唯一的标识,本身不能为空
  create table  person
(
    pid  varchar2(20) primary key,
    name varchar2(20),
    age number(3),
    birthday  date,
    sex varchar2(2)  default '男'
);

或者

 drop table person ;  
    create table  person
(
    pid  varchar2(20) ,
    name varchar2(20),
    age number(3),
    birthday  date,
    sex varchar2(2)  default '男',
    constraint person_pid_pk primary key(pid)
);   // person_pid_pk 代表约束名称

 


   . 唯一约束
  
          一个表中只允许一个主键约束,
          而其他列如果不希望出现重复值的话可以使用唯一约束。
 drop table person ;  
    create table  person
(
    pid  varchar2(20) primary key,
    name varchar2(20) unique,
    age number(3),
    birthday  date,
    sex varchar2(2)  default '男'
);

或者

 drop table person ;  
    create table  person
(
    pid  varchar2(20)  primary key,
    name varchar2(20),
    age number(3),
    birthday  date,
    sex varchar2(2)  default '男',
    constraint person_name_uk unique(pid)
);   // person_pid_pk 代表约束名称

 

   . 检查约束

          检查一个列的内容是否合法
          例如:年龄 只能是0--150

 drop table person ;  
    create table  person
(
    pid  varchar2(20),
    name varchar2(20) ,
    age number(3)  check(age between 0 and 150),
    birthday  date,
    sex varchar2(2)  default '男',
    constraint person_pid_pk primary key(pid),
    constraint person_name_uk unique(name)
);   // person_pid_pk 代表约束名称


   . 非空约束

          例如:姓名字段里面不能为空

  drop table person ;   
    create table  person
(
    pid  varchar2(20) primary key,
    name varchar2(20) not null,
    age number(3),
    birthday  date,
    sex varchar2(2)  default '男'
);

 

   . 外键约束

       两张表之间进行外键约束
 
    drop table person2 ;   
    create table  person2
(
    pid  varchar2(20) primary key,
    name varchar2(20) not null,
    age number(3),
    birthday  date,
    sex varchar2(2)   default '男',
    foreign key(pid)  references person(pid)
);


如果要删除父表,可以采用级联删除。
drop table person cascade constraint;

  drop table person ;  
  create table  person
(
    pid  varchar2(20) ,
    name varchar2(20),
    age number(3),
    birthday  date,
    sex varchar2(2)  default '男'
);
 
增加约束
alter table  add constraint 约束名称 约束类型 (约束字段)

删除约束
alter table drop constraint 约束名称


 rownum 是一个伪列  可以通过它来访问一个表的数据

7...视图

  1.创建视图

   create view 视图名 as  (子查询)
  create view empv20 as select empno,ename,job,hiredate
  from emp where deptno = 20;  
  创建一个视图

 
 如果提示没有权限  可以conn system/密码 连接登陆
 然后  grant create any view to scott;
 要撤销  revoke create any view from scott;


  create  or replace  view 视图名 as  (子查询)
  create view empv20 as select empno,ename,job,hiredate
  from emp where deptno = 20;
  如果存在视图就删除再创建该视图


   ****利用视图可以建立复杂的查询

 2.更新视图

      视图中间没有真实数据,更新视图不能更新创建条件
   
    视图的本质作用是为了查询 所以为了避免更新视图
    在创建的时候可以加一条语句
  create or replace view empv20 as select empno,ename,job,hiredate
  from emp where deptno = 20 with read only;
 


8......序列

     在许多数据库中有自动增长列 ,但是oracle中没有。
     所以要手工完成自动增长操作。

       create sequence 序列名
     ( 
       [increment by n] [start with n],
      
            
     );
 
  两个操作
    nextVal
        currVal
 
create table testseq
(
   next number,
   curr number
);

将一个序列加入到一个表中
insert into testseq(next ,curr) values(myse.nextVal,myse.currval);


create sequence myse  increment by 2 start with 1;


create sequence  myse1 
maxvalue 10
start with 1
increment by 1
cycle
cache 2;


删除序列
drop  sequence  序列名


9....同义词
   1.select sysdate from dual;
   查询系统时间
   dual  是一张续表 在sys下的一个表(sys.dual)
 

   scott可以查看此表是因为同义词的关系
 
创建一个同义词
create synonym   同义词名  for  用户名.表名 -->>  同义词名=用户名.表名


删除同义词
drop synonym  同义词名

10......用户管理

    在oracle中队用户进行建立及其授权的操作

   1.创建用户
   create user  用户名   identified by 密码;
   如  create  user test identified by test123;

 
   2. 为用户授权
   grant 权限1,权限2 to  用户名 
   如grant create session to test;   可以让其登陆而已

  
  如果现在加上要想把多个权限一次性赋予一个用户,则可以
  将这些权限定义成一个角色

  如
   grant connect ,resource to 用户名。
   
   connect,resource 都是角色。

  3.  删除用户
      drop  user 用户名
 
  4.修改用户密码

      在sys下
      alter user 用户名  identified  by 新密码。

  5. 让密码失效
    alter user 用户名 password expire;
    为了让其更新密码

 6. 锁住用户
    alter  user 用户名  account lock;
 
 7. 解除锁定用户
    alter user 用户名 account unlock;
 
 8. 授权访问某一张表
    grant select,delete on scott.emp to 用户名

 9. 回收权限
   revoke  select,delete on scott.emp from  用户名

 

11 ......数据库的备份与恢复
   . 数据库备份   exp
    .数据库恢复   imp


     在cmd下  直接用exp命令

      会提示一些信息
      直接回车下去
 


12......嵌套表

 


 一个部门有多个项目

    创建一个项目类别
   create  type   project_ty  as object(
       proid  number(4),
       pname   varchar(20)
   );
   /

**注意 / 不可少

  // 用一个别名
  create type  project_nt as table of project_ty;
     /

 //创建部门表  嵌套项目类别表
   create table department
(
    deptno  number(2)  primary key ,
    dname   varchar(50),
    projects   project_nt
 )nested  table  projects store as project_nt_tab_temp;

 

 //存入数据
insert into department(deptno,dname,projects)
values(1,'技术部',project_nt(
                  project_ty('1','论文管理系统'),
                  project_ty('2','员工管理系统'),
                  project_ty('3','薪资管理系统')
                   )
);
 
      

12........数据库设计范式


 

 
      

 

  

 

 


 
 
 
   


  

 

 

 


 

 

 

   


11:39 2011-6-5

 

 

 

  

 


 

 
 
 


 

 

 

  

 

 
  
  

 

你可能感兴趣的:(oracle,Date,数据库,user,table,insert)