Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 438|回复: 0

[默认分类] 表的创建修改及增删改查-DML操作

[复制链接]
  • TA的每日心情
    开心
    2021-12-13 21:45
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    发表于 2018-7-9 18:32:52 | 显示全部楼层 |阅读模式

    1.表名和列的命令规则:
    必须以字母开头,长度不能超过30个字符。不能使用ORACLE保留字。只能使用A-Za-z0-9$#等。
    表 TABLE包括:分区表,TABLE PARTITION       簇CLUSTER  索引表INDEX-ORGANIZED TABLE(IOTs)


    2.支持的数据类型:

    标量数据类型:
    varchar2 最大值4000字符 变长字符型数据
    char 最大值2000字符,定长字符型数据
    date 日期型数据,取值范围从公元前4712.1.1到9999.12.31    timestamp 精确到毫秒

    number   数字型数据,
    clob 用于在数据库中存储定长字节的大数据对象,如WORD文件。字符型大对象最大4G
    blob 存储大的无结构二进制对象,如照片或幻灯片。
    bfile 用于在数据库外的操作系统文件中存储大的无结构的二进制对象,如电影
    raw  在数据库直接存储二进制数据。最大长度2000个字节
    LOGN LONG RAW,ORACLE 8  劈头盖脸数据库中存储二进制图像文本等。

    3.关于ROWID
    在用户向表中插入一行数据时,ORACLE会自动在这一行数据加上一个ROWID,每行都有一个唯一ROWID,ORACLE利用ROWID定位数据行。并不显式存储为一列的值,是访问一个表中行的最快机制。
    000000 FFF BBBBBB RRR
    数据对象号 相应文件号块号 行号
    数据对象号,被赋予每一个对象,在一个数据库中是唯一的。相对文件号,对同一个表空间中每一个文件是唯一的。块号,为相对文件中包含数据行的块的位置。行号,标识块头中行目录位置。
    SQL> select ename,rowid from scott.emp;
    ENAME     ROWID
    ---------- ------------------
    SMITH     AAAR3sAAEAAAACXAAA
    ALLEN     AAAR3sAAEAAAACXAAB
    WARD      AAAR3sAAEAAAACXAAC
    JONES     AAAR3sAAEAAAACXAAD
    SMITH行的数据对象号为AAAR3s,相对文件号AAE,块号AAAACX,行号AAA
    #############################
    ORACLE数据行结构
    行头 row header,存储行中列数,迁移信息,行锁状态。
    行数据,一系列列长和列值组成
    列长 columnlength,一般需要一个字节,列长度超过250字节,列长为3个字节
    列值 columnvalue,列的实际值紧接列长字节后存放。
    创建表时,应将不同表放在不同表空间中。
    使用本地管理表空间以避免碎片,在表中使用若干标准EXTENT尺寸减少表空间碎片。


    4.建表的几种方式
    create table语句建表    要指明表名,列名,列数据类型,列宽度,是否有默认值
    用查询语句做子句建表。此时新建表的内容将是所查询表的相应列的内容。
    create table t2 as select ename name,salsalary from emp;
    create table t2 as select * from emp;
    用假条件,只对立表结构,不要数据
    create table t3(c1,c2,c3) as selectename,empno,sal from emp where 9=1;
    手动创建一个表,有五个列,数据类型4位数字,20个变长,2位定长,生日数据类型为日期,奖金最多7位,有两位小数,即最多9999.99
    create table student(xh number(4),xmvarchar2(20),sex char(2),birthday date,sal number(7,2));
      
    5.修改表
    修改列的数据类型、字长
    alter table t2 modify(name char(4));
    修改表的名称,表的OWNER或SYSDBA修改
    rename t2 to t_2;
    修改列名称
    alter table t3 rename column c1 to name;
    表注释和列注释
    修改一列:
    alter table emp4 modify test varchar2(20);
    删除一列:
    alter table emp4 drop column test;
    给表中新增列并设置默认值时:alter table test add new number(9) default 22;
    该语句会对所有记录进行填值操作,对于现场tab_large中存在3000W条左右数据,该步骤需要执行数小时。
    可以将该语句改为:
    alter table test add newcol2 number(9);
    alter table test modify newcol2 number(9) default 2;
    该语句只会对新增的记录进行填值操作,只需要数秒。如果需要对原来的值进行操作,可以在升级后进行update操作,这样能够节省大量的升级时间。
      
    6.删除表
    未真将表删除,改为系统命名表,放在回收站,闪回时用到
    drop table t2;
    show recyclebin;
    select * from user_recyclebin;
    从回收站将删除的表还原
    flashback table t2 tobefore drop;
    从回收站将删除的表还原并改名
    flashvack  table t2 to  before drop rename tt2;
    从回收站删除指定表
    purge table t2
    清空回收站
    purge recyclebin;
    直接删除,不放在回收站
    drop table t2  purge;
      
    7.插入数据
    ALTER SESSION SET NLS_DATE_FORMAT="yyyy-mm-dd";
    插入全部列的值
    insert into student values("001","白不白","男","2012-12-23",99);
    插入部分字段
    insert into student (xh,xm,sex)values("002","白白白","女");
    插入空值NULL
    insert into student (xh,xm,sex,birthday)values("003","白不","男",null);
    使用函数插入数据
    insert into t1(c2) values(sysdate);
    日期转换
    insert into t29c1) values(to_date("20121223","yyyymmdd")
      
    子查询插入,相当于复制表数据,也可以在创建表时用子查询创建
    insert into d1 select * from dept;
    insert ito emp select * from emp wheredeptno=30;
    8.修改数据
    修改数据:
    update student set sex="女" where xh="001";
    一次修改两列数据
    update student set sex="女",sal="19"where xh="001";
    使用表达式修改
    update student set sal=sal+1;
    子查询修改
    update emp2 set dname=(select dname fromdept where dept.deptno=emp2.deptno);
    9.删除
    删除所有行
    delete t1;
    删除符合条件行
    delete emp2 where sal>2000;
    --删除表中的所有记录,表结构还在,不写日志,无法找回删除的记录,速度快。DDL语句
    truncate TABLE student;
    truncate table <tab_name>
    这样默认会回收 Extent 的,应该会慢的。

    如果是 truncate table <tab_name> resuse storage  ,这样快truncate表时如遇到主外键约束引起的报错,可以临时关闭相应约束。


    SQL> truncate table table_name;

            truncate table table_name * ERROR 位于第 1 行: ORA-02266: 表中的唯一/主键被启用的外部关键字引用
    SQL> alter table dorm_employee disableprimary key cascade; 表已更改。
    SQL> truncate table dorm_employee; 表已截掉。
    SQL> alter table dorm_employee enableprimary key; 表已更改。

    10.还原点的设置和使用
    提交COMMIT或ROLLBACK后,所有还原点失效。

    设置还原点
    Savepoint a;
    进行修改操作
    Savepoint b;
    进行删除操作
    Savepoint c;
    插入操作;
    Rollback to a/b/c
    可以回滚到设置还原点的状态。


    11.分页的操作可以按rowid,RK分析函数。Rownum来分页
    下面最主要介绍第三种:按rownum来分
    1. rownum 分页
        SELECT * FROM emp;   
      2. 显示rownum[oracle分配的]
    SELECT e.*, ROWNUM rn FROM (SELECT * FROM emp) e;
      rn相当于Oracle分配的行的ID号
    3.挑选出6—10条记录
    先查出1-10条记录
    SELECT e.*, ROWNUM rn FROM (SELECT * FROM emp) e WHERE ROWNUM <=10;
    如果后面加上rownum>=6是不行的,
    4. 然后查出6-10条记录
    SELECT * FROM (SELECT e.*, ROWNUM rn FROM (SELECT * FROM emp) e WHEREROWNUM <= 10) WHERE rn >= 6;
    5. 几个查询变化
    a. 指定查询列,只需要修改最里层的子查询
    只查询雇员的编号和工资
    SELECT * FROM (SELECT e.*, ROWNUM rn FROM (SELECT ename, sal FROMemp) e WHERE ROWNUM <= 10) WHERE rn >= 6;
    b. 排序查询,只需要修改最里层的子查询
    工资排序后查询6-10条数据
    SELECT * FROM (SELECT e.*, ROWNUM rn FROM (SELECT ename, sal FROMemp ORDER by sal) e WHERE ROWNUM <= 10) WHERE rn >= 6;
       
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-4-26 21:39 , Processed in 0.379251 second(s), 48 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表