Oracle入门笔记(一)

一、关于Oracle

 

Oracle 安装
   1 安装目标位置不能有空格 汉字
   2 window7及以上版本一定要调整兼容性
   3 双显卡尤其是N卡用户,一定要使用集成显卡安装
     A卡  AMD  图片 UI
     N卡  昂达 游戏性
   4 口令: 不要使用数字开头

数据库   DataBase
   DBMS(DATABASE MANAGEMENT SYSTEM) 数据库管理信息系统
   RDBMS (Relation DBMS)  关系型数据库管理信息系统   

关系型:
   基于关系模型发展起来
   表格 依据一定的逻辑方式来存储数据的
   行和列

Oracle 10g
   8i  9i  10g  11g  12g/12c

2 连接Oracle
  sqlplus 进入Oracle的命令

  Oracle的服务 (运行中使用 services.msc 命令)
        OracleOraDb10g_home1TNSListener
    * 允许外部应用程序访问Oracle
    OracleServiceORCL
    * Oracle中某个数据库的服务实例   
         oracle实例 = 数据库进程 + SGA(系统共享区内存)

3 Oracle中的用户
    用户: 存储数据的集合
    schema 模式
    角色: 多个权限的集合
      SYSTEM  DBA角色
      SYS     SYSDBA 权限 (最广的系统权限)     
      SCOTT   普通用户

4 Oracle中的常用命令
     show user  显示当前连接的用户
     host cls   清理屏幕
     clear screen 清理屏幕
     connect  或者 conn  连接其他用户
     change *用来修改上一个出错的SQL语句
       change /出错的内容/修改后的内容
    比如:        
         SQL> select table_names from user_tables;
         select table_names from user_tables
               *
        第 1 行出现错误:
        ORA-00904: "TABLE_NAMES": 标识符无效


         SQL> change /_names/_name
          1* select table_name from user_tables
         SQL> /
     
    * edit 或者 ed 命令  * 用来修改上一个出错的SQL
    * start 或者@
       用来执行一个SQL文件脚本
    * spool "文件路径"
      spool off;
       * spool表示将接下来在CMD中显示的内容,
         原封不动写入到文件中,一直到 spool off结束


二、表结构与字段介绍

 

 

表:  有行和列组成的一个概念
     按照一定的数据来存储数据,是一个存储数据的集合

记录: 把表中的每一行数据称作字段
字段(属性): 表的每一个列可以看作是记录的一个属性

存储数据:
    最小单位: 数据块 2KB大小的内存空间
                ||
               盘区 (若干个数据块组成一个盘区)
                ||
                段 (若干个盘区,组成一个段)
		||
               数据文件 (通常是 .dbf 文件)

创建表:
   create table 表名( 
	列名1 数据类型,
        列名2 数据类型,
        ...
        列名x 数据类型
   );
   
   * 第一范式: 同一张表中不能出现重复的列名
   * 列与列之间需要用逗号隔开
     最后一个列不需要写逗号

   Exec:
    创建学生表Student:
     学号sno  number
     姓名sname  varchar2(20)
     性别gender
     手机号phone

----------------------------------------------------
数据类型:
  
  字符类型:
    
    char    固定长度类型 最长2000B ANSI 一个汉字两个字节    
    nchar   固定长度类型 2000B 本地国家字符集 一个汉字一个字节
        * 带n的类型是本地国际字符集的编码  一个汉字一个字节
	* 固定长度:如果数据不超出最大长度,则开辟固定的内存大小
    varchar    可变长度类型  标准SQL中的类型
    varchar2   可变长度类型  Oracle支持
    nvarchar    可变长度类型  Oracle不支持
    nvarchar2   可变长度类型  Oracle支持
        * 可变长度是根据数据所占有的内存空间的实际消耗来开辟
    ** 固定长度与可变长度的比较:
       可变长度更节省资源
       固定长度效率更高
      

 "小明你好"       
                    JAVA实际需要    数据库中开辟
     char(20)   :     8B             20B  (12B大小的空格)
     nchar(3)   :     8B             ×
     varchar(20):     8B             8B
     nvarchar2(4):    8B             4B


  数值类型:
   number 
   number(p) :p指定的位数都是整数
   number(p,n)
        p: 1~38
	n: -84~127
        p :第一个参数指定总长度
     当n>0时 :允许出现的小数位数
               整数位= p-n
     当n<0时 :小数点向左数n的绝对值位做四舍五入精确

                    number(7,-2)  number(7,-8)
        1234567  →  1234600         0
                    12345.6000343
       number(5,1)   ×               9999.949999
       number(7,2)  12345.6

  日期类型:
      date : 年月日 小时 分钟 秒 (不带有毫秒数)
       当前系统时间: sysdate
      timestamp : 带有毫秒数的日期类型
       当前系统时间: systimestamp

dual :  测试用表 伪表 万能表
   select sysdate from dual;  -- 查看当前的系统时间
   select systimestamp from dual;  -- 带有毫秒数

long : 长文本  2GB 过时
   带有long的表不允许导入导出
   不允许给long类型的类添加索引

lob :类型来替代long   4GB
   clob
   blob
   nclob


性别用那种类型来存储?
   number      0  1                   
   char
   varchar2


-------------------------------------------------

长文本如何存储?
  比如一张报纸内容
    写成HTML文件
    .avi

三、Oracle中的用户权限

 

 

1 Oracle中的SCOTT用户:
     * 此用户默认上锁
    
2 解锁用户:
  1 首先要连接到一个有权限的用户
    conn system/etoak
  2 在具有一定的权限用户下, 才能去修改其他用户的属性
    alter user 用户名 account unlock;

3 创建用户:
  1 首先要连接到一个有权限的用户
    conn system/etoak
  2 使用创建用户的命令
    create user 用户名 identified by 口令;

4 修改用户密码:
  1 首先要连接到一个有权限的用户
    conn system/etoak
  2 修改用户的密码
    alter user 用户名 identified by 口令;


-----------------------------------------------------
权限:

系统权限: 能够操作用户对象自身的权限

  授权: grant 权限 to 用户;
   1 连接一个有权限授权的用户
   conn system/etoak
   2 授权操作
   grant create session to et1505;

   都有哪些系统权限?
   create session  :允许访问用户
   connect         :允许连接用户
   create table    :创建表
   create view     :创建视图
   resource        :占用资源
   ......

   允许用户能够创建表:
   grant create session,create table,resource to 用户;

   授权某个用户时,可以允许用户将权限再次授权给别人:
    with admin option
   比如:
    首先将create session 权限授权给et1505,
     并且允许他给et1504
    conn system/etoak
    grant create session to et1505 with admin option;
    conn et1505/etoak
    grant create session to et1504;
    

  撤销: revoke 权限 from 用户;

   如果允许et1505将权限给et1504,并且授权成功,
   此时将et1505的create session权限撤掉,
   那么et1504是否依然能够访问到?
   
   conn system/etoak
    grant create session to et1505 with admin option;
    conn et1505/etoak
   grant create session to et1504;
   conn system/etoak
   revoke create session from et1505;
   conn et1504/et1504   √

用户权限: 能够操作用户中资源的权限
  * 用户权限一定会出现on关键字
  授权:
     grant 权限 on 资源 to 用户;
     资源: 表(table) 视图(view) 
           序列(sequence) 过程(procedure)
     权限: insert 新增 
           update 更新
	   delete 删除
	   select 查询
	   execute 执行

   将scott用户中的emp表的查询权限授权给et1505;
    第一种方式: 将et1505提升成DBA
    第二种方式:
      * 连接上有权限的用户 conn system/etoak
      * 给et1505用户scott下的emp表的查询权限

      * 也可以直接透过拥有资源的对象来授权
	 conn scott/tiger
	grant select on emp to et1505;

  用户权限允许将权限授权其他用户: with grant option

   conn scott/tiger
   grant select on emp to et1505 with grant option;
   conn et105/etoak
   grant select on scott.emp to et1504;

   revoke select on scott.emp from et1505;
   问 et1504是否能够查询到scott的emp表中数据?
  

  撤销: revoke 权限 on 资源 from 用户;


系统权限和用户权限的区别:
 1 用户权限一定带有on,系统权限不带有on 
 2 系统权限通过with admin option 再次授权,
   用户权限通过with grant option 再次授权给其他用户

四、复制表的语句

 

 

****跨用户的复制表必须保重能够访问其他用户资源

1 跨用户复制表,并且复制表中的数据
create table emp as select * from scott.emp;

2 本用户内复制表结构 不复制数据
create table emp2 as select * from emp where 1=3;

3 复制指定的某几个列
create table emp3 as select empno,ename from emp;

4 复制表,并且更改列名称
 create table emp4(eno,name) as select empno,ename from emp;

5 如果表已存在比如:
 create table empX(
  eid number,
  ename varchar2(20)
  );

  问题:
   将查询到的工资大于3000的所有员工的
   编号姓名插入到empx表中:
 insert into empx(eid,ename)
		select empno,ename from emp 
			where sal>3000;

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值