Oracle学习笔记(一)

来源:互联网 发布:淘宝假冒申诉 编辑:程序博客网 时间:2024/06/06 02:54

一、关于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/12c2 连接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~38n: -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 : 带有毫秒数的日期类型       当前系统时间: systimestampdual :  测试用表 伪表 万能表   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/tigergrant 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 0