• oralce操作常用操作


    插入数据

    SQL> insert into dept values(50, 'App', 'Beijing');
    
    已创建 1 行。
    
    SQL> select * from dept;
    
        DEPTNO DNAME          LOC
    ---------- -------------- -------------
            50 App            Beijing
            10 ACCOUNTING     NEW YORK
            20 RESEARCH       DALLAS
            30 SALES          CHICAGO
            40 OPERATIONS     BOSTON
    
    已选择5行。
    
    -- 插入数据(全部字段)
    SQL> insert into emp values (777, 'Tom', 'SALESMAN', 7698, to_date('2016-05-02','yyyy-mm-dd'),2500,null,30) ;
    
    -- 按指定插入的数据
    SQL> insert into emp(empno, ename) values (8888, 'Jerry') ;

    更行数据

    SQL> update emp set sal=sal*1.1 where job='CLERK' and sal<1000;

    删除数据

    -- 删除指定行
    SQL>  delete emp where ename='SCOTT';
    
    -- 不加条件就是删除所有行
    SQL>  delete emp;

    在insert语句中使用子查询    与 where 的值不一样就插不进去

    SQL> insert into (select * from emp where deptno=10 with check option) values(66,'name', 'jjj', 100,'', 100, 100, 6);
    insert into (select * from emp where deptno=10 with check option) values(66,'name', 'jjj', 100,'', 100, 100, 6)
                               *1 行出现错误:
    ORA-01402: 视图 WITH CHECK OPTION where 子句违规
    
    
    SQL> insert into (select * from emp where deptno=10 with check option) values(66,'name', 'jjj', 100,'', 100, 100, 10);

    创建表结构一样的表

    SQL> create table copy_emp as select * from emp where 1=0

    合并表中的数据

    SQL> merge into copy_emp c
    using emp e
    on (c.empno=e.empno)
    when matched then
    update set
    c.ename=e.ename,
    c.job=e.job,
    c.mgr=e.mgr,
    c.hiredate=e.hiredate,
    c.sal=e.sal,
    c.comm=e.comm,
    c.deptno=e.deptno
    when not matched then
    insert values(
    e.empno,
    e.ename,
    e.job,
    e.mgr,
    e.hiredate,
    e.sal,
    e.comm,
    e.deptno
    );

    事物

    savepoint 是保存点

    SQL> select * from aaa;
    
             X NAME
    ---------- ------------
          1990 Stella
    
    已选择 1 行。
    
    SQL> insert into aaa values(1,'X');
    
    已创建 1 行。
    
    SQL> savepoint a1;
    
    保存点已创建。
    
    SQL> insert into aaa values(1,'Y');
    
    已创建 1 行。
    
    SQL> savepoint a2;
    
    保存点已创建。
    
    SQL> update aaa set x=2 where name='Y';
    
    已更新 1 行。
    
    SQL> savepoint a3;
    
    保存点已创建。
    
    SQL> insert into aaa values(3,'A');
    
    已创建 1 行。
    
    SQL> select * from aaa;
    
             X NAME
    ---------- ------------
          1990 Stella
             1 X
             2 Y
             3 A
    
    已选择4行。

    上面建好了数据和保持点,现在开始回退了

    SQL> rollback to a3;
    
    回退已完成。
    
    SQL> select * from aaa;
    
             X NAME
    ---------- ------------
          1990 Stella
             1 X
             2 Y
    
    已选择3行。
    
    SQL> rollback to a2;
    
    回退已完成。
    
    SQL> select * from aaa;
    
             X NAME
    ---------- ------------
          1990 Stella
             1 X
             1 Y
    
    已选择3行。
    
    SQL> rollback to a1;
    
    回退已完成。
    
    SQL> select * from aaa;
    
             X NAME
    ---------- ------------
          1990 Stella
             1 X
    
    已选择2行。
    
    SQL> roll
    回退已完成。
    SQL> select * from aaa;
    
             X NAME
    ---------- ------------
          1990 Stella
    
    已选择 1 行。

    约束 

    not null    -- 非空约束, 这一列不允许有空值
    
    unique    -- 唯一约束, 这一列不允许有重复的值
    
    primary key    -- 主键约束, 一张表只能有一个主键,不能有空值和重复的值
    
    foreign key    -- 外键约束, 只能参照主键建立外键
    
    check    -- 数据约束, 设置插入值的范围

    使用

    SQL> create table t03(id number(3) not null);
    
    表已创建。
    
    -- 查看库中有哪些约束
    SQL> desc user_constraints
     名称                                      是否为空? 类型
     ----------------------------------------- -------- ----------------------------
     OWNER                                              VARCHAR2(30)
     CONSTRAINT_NAME                           NOT NULL VARCHAR2(30)
     CONSTRAINT_TYPE                                    VARCHAR2(1)
     TABLE_NAME                                NOT NULL VARCHAR2(30)
     SEARCH_CONDITION                                   LONG
     R_OWNER                                            VARCHAR2(30)
     R_CONSTRAINT_NAME                                  VARCHAR2(30)
     DELETE_RULE                                        VARCHAR2(9)
     STATUS                                             VARCHAR2(8)
     DEFERRABLE                                         VARCHAR2(14)
     DEFERRED                                           VARCHAR2(9)
     VALIDATED                                          VARCHAR2(13)
     GENERATED                                          VARCHAR2(14)
     BAD                                                VARCHAR2(3)
     RELY                                               VARCHAR2(4)
     LAST_CHANGE                                        DATE
     INDEX_OWNER                                        VARCHAR2(30)
     INDEX_NAME                                         VARCHAR2(30)
     INVALID                                            VARCHAR2(7)
     VIEW_RELATED                                       VARCHAR2(14)
    
    -- 查看T03 的约束有哪些
    SQL> select CONSTRAINT_NAME, CONSTRAINT_TYPE,SEARCH_CONDITION FROM USER_CONSTRAINTS WHERE TABLE_NAME='T03';
    
    CONSTRAINT_NAME                C
    ------------------------------ -
    SEARCH_CONDITION
    --------------------------------------------------------------------------------
    SYS_C0011103                   C
    "ID" IS NOT NULL

    重新创建 t03 表,给约束取名字

    SQL> drop table T03 purge;
    
    表已删除。
    
    -- 用 constraint 给外键取名字
    SQL> create table t03(id number(3) constraint nn_t03_id not null);
    
    表已创建。
    
    SQL> select CONSTRAINT_NAME, CONSTRAINT_TYPE,SEARCH_CONDITION FROM USER_CONSTRAINTS WHERE TABLE_NAME='T03';
    
    CONSTRAINT_NAME                C
    ------------------------------ -
    SEARCH_CONDITION
    --------------------------------------------------------------------------------
    NN_T03_ID                      C
    "ID" IS NOT NULL

    增加唯一约束

    -- 增加 name 字段给 t03
    SQL> alter table t03 add(name varchar2(10));
    
    表已更改。
    
    -- 查看 t03 的表字段已经创建了
    SQL> desc t03;
     名称                                      是否为空? 类型
     ----------------------------------------- -------- ----------------------------
     ID                                        NOT NULL NUMBER(3)
     NAME                                               VARCHAR2(10)
    
    -- 给 t03 的 name 字段加上唯一索引
    SQL> alter table t03 add constraint uk_t03_name unique(name);
    
    表已更改。
    
    SQL> col SEARCH_CONDITION for a30
    -- 这时查看表中的约束 就出来了
    SQL> select CONSTRAINT_NAME, CONSTRAINT_TYPE,SEARCH_CONDITION FROM USER_CONSTRAINTS WHERE TABLE_NAME='T03';
    
    CONSTRAINT_NAME                C SEARCH_CONDITION
    ------------------------------ - ------------------------------
    NN_T03_ID                      C "ID" IS NOT NULL
    UK_T03_NAME                    U

    增加主键约束

    SQL> create table t01(id number(4), name varchar2(15));
    
    表已创建。
    
    SQL> desc t01
     名称                                      是否为空? 类型
     ----------------------------------------- -------- ----------------------------
     ID                                                 NUMBER(4)
     NAME                                               VARCHAR2(15)
    
    -- 增加主键约束
    SQL> alter table t01 add constraint pk_t01_id primary key (id);
    
    表已更改。
    
    -- 这时主键约束被加上去了
    SQL> select CONSTRAINT_NAME, CONSTRAINT_TYPE,SEARCH_CONDITION FROM USER_CONSTRAINTS WHERE TABLE_NAME='T01';
    
    CONSTRAINT_NAME                C SEARCH_CONDITION
    ------------------------------ - ------------------------------
    PK_T01_ID                      P

    外键约束

    -- 给 t03 id这段添加外键 参照 t01 表 
    SQL> alter table t03 add constraint fk_t03_id foreign key (id) references t01;
    
    表已更改。
    
    -- 这时 外键约束已经加上去了
    SQL> select CONSTRAINT_NAME, CONSTRAINT_TYPE,SEARCH_CONDITION FROM USER_CONSTRAINTS WHERE TABLE_NAME='T03';
    
    CONSTRAINT_NAME                C SEARCH_CONDITION
    ------------------------------ - ------------------------------
    NN_T03_ID                      C "ID" IS NOT NULL
    UK_T03_NAME                    U
    FK_T03_ID                      R

     在刚建好的外键上插入数据

    SQL> insert into t01 values(1,'a');
    
    已创建 1 行。
    
    SQL> insert into t03 values(1,'tom');
    
    已创建 1 行。
    
    SQL> insert into t03 values(1,'Irving');
    
    已创建 1 行。

    删除主键,级联 

    -- 碰见了外键约束无法删除
    SQL> delete t01;
    delete t01
    *1 行出现错误:
    ORA-02292: 违反完整约束条件 (SCOTT.FK_T03_ID) - 已找到子记录
    
    -- 把t03外键约束删掉
    SQL> alter table t03 drop constraint FK_T03_ID;
    
    表已更改。
    
    -- 换上了新的外键约束,这次换上的是级联删除约束
    SQL> alter table t03 add constraint fk_t03_id foreign key (id) references t01 on delete cascade;
    
    表已更改。
    
    -- 测试一下删除数据
    SQL> delete t01;
    
    已删除 1 行。

    check 约束

    SQL> alter table emp add constraint ch_emp_sal check (sal>=800);
    
    表已更改。
    
    SQL> insert into emp (empno,ename,sal)values(1,'tom',700);
    insert into emp (empno,ename,sal)values(1,'tom',700)
    *1 行出现错误:
    ORA-02290: 违反检查约束条件 (SCOTT.CH_EMP_SAL)

    修改约束     给建好的表也想启用非空约束 

    SQL> alter table t03 modify (id number not null);
    
    表已更改。

    删除约束

    SQL> select CONSTRAINT_NAME, CONSTRAINT_TYPE,SEARCH_CONDITION FROM USER_CONSTRAINTS WHERE TABLE_NAME='T03';
    
    CONSTRAINT_NAME                C SEARCH_CONDITION
    ------------------------------ - ------------------------------
    SYS_C0011111                   C "ID" IS NOT NULL
    UK_T03_NAME                    U
    FK_T03_ID                      R
    
    SQL> alter table t03 drop constraint SYS_C0011111;
    
    表已更改。

    禁止约束

    -- 禁用 check 约束
    SQL> alter table emp modify constraint CH_EMP_SAL disable;
    
    表已更改。
    
    -- 禁用后 700 就能插进去
    SQL> insert into emp (empno,ename,sal)values(1,'tom',700);
    
    已创建 1 行。
    
    -- 恢复约束,由于插入的700不符合约束,所以插不进去
    SQL> alter table emp modify constraint CH_EMP_SAL enable;
    alter table emp modify constraint CH_EMP_SAL enable
                                      *1 行出现错误:
    ORA-02293: 无法验证 (SCOTT.CH_EMP_SAL) - 违反检查约束条件
    
    -- 要想插入时不检测老数据,只想对新数据插入时校验加上 novalidate
    SQL> alter table emp modify constraint CH_EMP_SAL enable novalidate;
    
    表已更改。
  • 相关阅读:
    在公司中使用springboot技术的经验
    使用swagger2代替api文档
    第一份正式工作-华为外包。
    zookeeper学习入门
    dubbo入门
    C/C++编程笔记:inline函数的总结!C/C++新手值得收藏!
    刚毕业入职程序员?程序员需注意这 6 点!都是前辈“血的教训”
    你在群里提的技术问题没人回答!是为什么?因为没注意这 4 点!
    程序人生:程序员想要提升英文阅读能力怎么办?实用秘籍推荐!
    程序员必看:长期工作的程序员转眼变油腻大叔!你今天护肤了吗?
  • 原文地址:https://www.cnblogs.com/shizhengwen/p/14672507.html
Copyright © 2020-2023  润新知