• 第7章


    第7章
    7-1 确定会话可以访问那些对象。
    7-1-1 确定模式中各种类型的对象 列出所有对象
    select object_type, count(object_type)
      from user_objects
     group by object_type
     
    7-1-2 确定有权访问的总数
    select object_type, count(object_type)
      from all_objects
     group by object_type
     
    7-1-3 确定谁拥有当前登录人能够看到的对象
    select distinct owner from all_objects
     
    显示表中的数据类型
    describe test3;
     
    user_tab_cols用来获取对应用户表的列信息;
    user_col_comments用来获取对应用户表列的注释信息;
    user_constraints用来获取用户表的约束条件;
    user_cons_columns约束中用户可访问列。
     
    select column_name,
           data_type,
            nullable,
            data_length,
            data_precision,
            data_scale
      from user_tab_columns
     where table_name = 'TF_DEV'
     
     select trunc(sysdate) from dual
     
    创建表
    create table tf_dev_copy
    as select * from tf_dev 
     
    创建表结构
    create table tf_dev_copy2
    as select * from tf_dev where 1=2
    非空约束和检查约束会应用于新表tf_dev_copy
    select * from tf_dev_copy where rownum<10
     
    新怎列
    alter table test3 add(id number)
     
    修改列
    alter table test3 modify(num default 0)
     
    删除列
    alter table test3 drop column id
     
    将列标记为未使用
    alter table test3 set unused column id
    alter table test3 drop unused columns
     
    重命名列名
    alter table test3 rename column num to tnum
     
    删除表
    drop table table_name
     
    merge into products p
    using (select * from newproducts) np
    on (p.product_id = np.product_id)
    when matched then
    update set p.product_name = np.product_name
    where np.product_name like 'OL%'
    when not matched then
    insert values(np.product_id, np.product_name, np.category)
    where np.product_name like 'OL%'
     
    truncate 删除所有行 无法回滚
    DML--数据管理语言
    SQL(structured query language)--结构化查询语言
     
    --6种常用的PL/SQL对象类型
    过程 函数 触发器 程序包 程序包主体 类型主体
     
    select '123'||'456' as "data number" from dual
     
    select q'<qual' hello>' "q<>" from dual
    结果
    q<>
    qual' hello
     
    user_objects显示登录人拥有的对象,
    all_objects显示登录人能够访问的所有对象。
    数据对象 表 视图 同义词 索引 序列
    同义词是表或视图的别名。
    对象名称不能超过30个字符,字符以字母数字 下划线 美元符号或者井字符号组成
    开头必须a`z
    对象名称区分大小写
     
    数据库链接名称可以128个字符
     
    表 视图 私有同义词共享相同的命名空间 不能同名
     
    CHAR(n BYTE/CHAR)
    默认1字节,n值最大为2000
    末尾填充空格以达到指定长度,超过最大长度报错。
    默认指定长度为字节数,字符长度可以从1字节到四字节。
    1.字符类型
    NCHAR(n)
    默认1字符,最大存储内容2000字节
    末尾填充空格以达到指定长度,n为Unicode字符数。
    默认为1字节。
     
    NVARCHAR2(n)
    最大长度必须指定,最大存储内容4000字节
    变长类型。n为Unicode字符数
     
    VARCHAR2(n BYTE/CHAR)
    最大长度必须指定,至少为1字节或者1字符,n值最大为4000
    变长类型。超过最大长度报错。默认存储的是长度为0的字符串。
     
    2.数字类型
    NUMBER(p[,s])
    1-22字节。
    P取值范围1到38
    S取值范围-84到127
     
    存储定点数,值的绝对值范围为1.0 x 10 -130至1.0 x 10 126。值大于等于1.0 x 10 126时报错。p为有意义的10进制位数,正值s为小数位数,负值s表示四舍五入到小数点左部多少位。
     
    BINARY_FLOAT
    5字节,其中有一长度字节。
    32位单精度浮点数类型。
    符号位1位,指数位8位,尾数位23位。
     
    BINARY_DOUBLE
    9字节,其中有一长度字节。
    64位双精度浮点数类型。
     
    3.时间、时间间隔类型
    YEAR
    -4712至9999,包括0
    任何整数
     
    MONTH
    01至12
    0至11
     
    DAY
    01至31
    任何整数
     
    HOUR
    00 至 23
    0 至 23
     
    MINUTE
    00 至 59
    0至 59
     
    SECOND
    00 to 59.9(n),9(n)不适用与DATE类型
    0 to 59.9(n)
     
    TIMEZONE_HOUR
    -1至14,不适用与DATE和TIMESTAMP类型
    不可用
     
    TIMEZONE_MINUTE
    00至59,不适用与DATE和TIMESTAMP类型
    不可用
     
    TIMEZONE_REGION
    不可用
     
    TIMEZONE_ABBR
    不可用
     
    4.大对象类型
    BLOB
    最大为(4GB-1)*数据库块大小
    存储非结构化二进制文件。支持事务处理。
     
    CLOB
    最大为(4GB-1)*数据库块大小
    存储单字节或者多字节字符数据。支持事务处理。
     
    NCLOB
    最大为(4GB-1)*数据库块大小
    存储Unicode数据。支持事务处理。
     
    BFILE
    最大为2 32-1字节
    LOB地址指向文件系统上的一个二进制文件,维护目录和文件名。不参与事务处理。只支持只读操作。
     
    5.其他类型
    LONG
    最大为2GB
    变长类型,存储字符串。创建表时不要使用该类型。
     
    RAW(n)
    最大2000字节,n为字节数,必须指定n
    变长类型,字符集发生变化时不会改变值。
     
    LONG RAW
    最大为2GB
    变长类型,不建议使用,建议转化为BLOB类型,字符集发生变化时不会改变值。
     
    ROWID
    10字节
    代表记录的地址。显示为18位的字符串。用于定位数据库中一条记录的一个相对唯一地址值。通常情况下,该值在该行数据插入到数据库表时即被确定且唯一。
     
    UROWID(n)
     
    create global temporary table temp_tab_name on commit preserve rows as select * from tab_name
     
    ORACLE数据库除了可以保存永久表外,还可以建立临时表temporary tables。这些临时表用来保存一个会话SESSION的数据,或者保存在一个事务中需要的数据。当会话退出或者用户提交commit和回滚rollback事务的时候,临时表的数据自动清空,但是临时表的结构以及元数据还存储在用户的数据字典中。
     
    分类:
    1.会话级临时表
    会话级临时表是指临时表中的数据只在会话生命周期之中存在,当用户退出会话结束的时候,Oracle自动清除临时表中数据。
    Create Global Temporary Table Table_Name
    (
    Col1 Type1,
    Col2 Type2
    ...
    )
    On Commit Preserve Rows;
     
    2.事务级临时表
    事务级临时表是指临时表中的数据只在事务生命周期中存在。
    Create Global Temporary Table Table_Name
    (
    Col1 Type1,
    Col2 Type2
    ...
    )
    On Commit Delete Rows;
    当一个事务结束(commit or rollback),Oracle自动清除临时表中数据。
     
    创建索引的好处:1强制实施主键约束和唯一约束,2提高性能
     
    为了提高性能应该始终在子表的外键列上创建索引
    B(balanced)*树索引和位图索引
    行的的指针是rowid,rowid是oracle专用的虚拟列每一行都有虚拟列
     
    B*树适用场景(可以包含null):
    1.列的基数(不同值的个数)很大
    2.表的行数多
    3.列用在where子句或join条件中
    数据超过2%到4%的行全表扫描比较快。
    压缩 反向键 唯一索引只能用B*树
     
    位图(不包含null)索引适用场景:
    1.列的基数小
    2.表中的行数多
    3.列用于布尔运算
     
    索引的常用种类
    1.唯一或非唯一
    2.反向键
    3.压缩
    4.复合
    5.基于函数
    6.升序或降序
     
    约束
    unique(可以输入null值)
    not null
    primary key
    foreign key
    check
     
    select constraint_name,constraint_type,column_name
    from user_constraints natural join user_cons_columns
    where lower(table_name)='test3'
     
    alter table test3 rename constraint old_name to new_name
    唯一约束和主键约束需要索引。
    创建同义词
    create [public] synonym synonymname for object
     
    序列是用来生成主键的宝贵工具
    ctrate sequence seq_name strat witch 10
     
    索引有自己的名称空间。
    表名必须以字母开头,表名不能是保留字原则,使用双引号可以
    绕开以上两个规则。
     
     
     
     

  • 相关阅读:
    linux 和 ubuntu 修改主机名
    Linux删除用户
    ubuntu更新源
    python连接mysql
    用于迭代器的yield return
    Tuple类型
    Action 和 Func
    用iDSDT制作声显卡DSDT
    C#“同步调用”、“异步调用”、“异步回调”
    读懂IL代码就这么简单
  • 原文地址:https://www.cnblogs.com/zhangyuanbo12358/p/9184867.html
Copyright © 2020-2023  润新知