创建表空间

创建表空间: 逻辑单位, 通常我们新建一个项目,就会去新建表空间,在表空间中创建用户来创建表
     语法:
         create tablespace 表空间的名称
         datafile \'文件的路径\'   (虚拟机服务器上的存放路径)  文件后缀为.dbf
         size 大小
         autoextend on  设置自动扩展
         next 每次扩展的大小
		 

--创建表空间
create tablespace table01
datafile \'c:\\table01.dbf\'
size 100m
autoextend on
next 10m;

--删除表空间
drop tablespace handong;   --只删除逻辑关系,不删除磁盘文件

创建用户

创建用户 
    create user 用户名
    identified by 密码
    default tablespace 表空间的名称

create user user01
identified by user01
default tablespace table01;

授权 --- 语法:  grant 权限 to 用户
   
三种权限: 
       dba: 拥有全部特权,是系统最高权限,只有DBA才可以创建数据库结构。可使用其他用户表空间
       Resource:拥有Resource权限的用户只可以创建实体,不可以创建数据库结构。
       Connect:拥有Connect权限的用户只可以登录Oracle,不可以创建实体,不可以创建数据库结构。

--授予Connect权限
grant connect to user01;

--授予dba权限
grant dba to user01;

创建表

1.直接创建表
  语法格式:
     create table 表名(
       列名  列的类型 [列的约束],
       列名  列的类型  [列的约束]      
     );
     
	 
2.子查询创建表  :create table 表名 as 查询语句; 

相当于复制被查询表。(只复制表结构和表数据,不复制约束)  
	
create table test1(    --创建表,设置三列
   name1 varchar2(10),  
   name2 char(10),
   age   number(2,3)    
);

列的类型:
     1.varchar ,在Oracle中,目前是支持的, 但是不保证以后还支持
     
     2.varchar2(长度) 可变字符长度    varchar2(10)  hello  占5个字符
     3.char(长度)   固定长度字符      char(10)      hello  占10个字符,用空格填充
     4.number(总长度,小数长度)     数字类型  ***小数长度不能大于等于总长度
     
     5.date                   年月日时分秒 2017/4/13 9:43:49
     6.timestamp              时间戳, 比date类型更加精确 13-APR-17 09.44.08.272000 AM +08:00
     
     7.LONG/CLOB : 存放一本小说
     8.BLOB      : 存放电影  java 存进去,  再读取出来
 
约束:用来约束表中数据的规则
列的五大约束  
	 1.主键约束: primary key 不能为空, 必须唯一
	 2.非空约束
	 3.唯一约束
	 4.检查约束 check(条件)  在mysql中是可以写的,但是mysql直接忽略了检查约束
	 5.外键约束:  主要是用来约束从表A中的记录,必须是存在于主表B中

增删改

插入数据:
     insert into 表名 values(所有列的值都要对应写上)
     insert into 表名(列1,列2) values(值1,值2);
         
    使用子查询插入数据
         insert into 表名 查询语句
	

更新数据
    update 表名 set 列名 = 列的值  [where 条件]
	update emp1 set ename=\'HUAAN\' where ename = \'KING\';



删除数据:
       delete from 表名  [where 条件] 
	   
       delete和truncate 区别
        delete:                truncate:
        DML                    DDL
        逐条删除                先删除表再创建表
        支持事务操作            不支持事务操作,
                               执行效率要高  
							   						   
--设置默认级联删除 on delete

--级联删除 : 先删除从表中关联数据,然后再删除表中的数据

--强制删除表(不建议使用) : 先删除外键关联表的外键约束,然后再删除自己, 先删除product的外键约束,再删除原表
drop table 表 cascade constraint;

事务

   四大特性: 原子性,隔离性,持久性,一致性
      
   如果不考虑隔离级别: 脏读,虚读,不可重复读
        MYSQL隔离级别: READ UNCOMMITTED , READ COMMITTED, REPEATABLE READ, SERIALIAZABLE
        ORACLE隔离级别: READ COMMITTED SERIALIZABLE READ ONLY 
                    默认隔离级别: READ COMMITTED
                    
  提交 : commit
  事务的保存点/回滚点: savepoint 保存点的名称
  回滚: rollback

视图: 就像窗户一样, 封装查询结果 , 通常视图创建只读视图

序列: 主要是用来实现ID自增长

索引: 相当于目录,能够提高查询效率, 原理 平衡二叉树, 每隔一段时间DBA都需要去重建索引

同义词: create synonym 名称 for 对象的名称

视图

  视图: 是对查询结果的一个封装,视图里面所有的数据,都是来自于它查询的那张表。
         
      1.能够封装复杂的查询结果
      2.屏蔽表中的细节
   语法: 
      create [or replace] view 视图的名称 as 查询语句 [ with read only]
      
   注意: 通常不要通过视图去修改,视图创建的时候,通常要加上with read only

序列

序列: 生成类似于 auto_increment 这种ID自动增长 1,2,3,4,5....
   auto_increment 这个是mysql  
   
   语法:
       create sequence 序列的名称
       start with 从几开始
       increment by 每次增长多少
       maxvalue 最大值 | nomaxvalue
       minvalue 最小值 | nominvalue
       cycle | nocycle  是否循环    1,2,3,1,2,3
       cache 缓存的数量3 | nocache  1,2,3,4,5,6 
       
  如何从序列获取值
      currval : 当前值
      nextval : 下一个值
      
           注意: currval 需要在调用nextval之后才能使用      
           
           永不回头,往下取数据, 无论发生异常, 回滚   

索引

索引:相当于是一本书的目录,能够提高我们的查询效率
   如果某一列,你经常用来作为查询条件,那么就有必要创建索引,数据量比较的情况
   
   语法: 
         create index 索引的名称 on 表名(列)   
    
   注意:主键约束自带主键索引, 唯一约束自带唯一索引
   
   索引原理: btree   balance Tree 平衡二叉树
   
         如果某列作为查询条件的时候,可以提高查询效率,但是修改的时候,会变慢
         
         索引创建好之后,过了一段,DBA都会去做重构索引
         
   SQL调优:
         1.查看执行计划F5
         2. 分析里面的cost 和 影响行数, 想办法降低            

PLSQL编程

 PLSQL编程 : procedure Language 过程语言 Oracle对SQL的一个扩展
         让我们能够像在java中一样写 if else else if 条件, 还可以编写循环逻辑 for while
         
         declare
            --声明变量
            变量名 变量类型;
            变量名 变量类型 := 初始值;
              vsal emp.sal%type;  --引用型的变量  
              vrow emp%rowtype;   --声明记录型变量          
         begin
            --业务逻辑
         end;
         
         dbms_output.put_line()相当于java中 syso 

PL条件判断

 if then
 
 elsif then
   
 else 
 
 end if;

循环操作

1.  while 循环
      while 条件 loop
        
      end loop;
    
2.  for循环
      for 变量  in [reverse] 起始值..结束值 loop
        
      end loop;
  
3.  loop循环  
      loop
        exit when 条件
      end loop;
收藏 打印