zoukankan      html  css  js  c++  java
  • 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;
    
    表已更改。
  • 相关阅读:
    fn project 试用之后的几个问题的解答
    fn project 扩展
    fn project 生产环境使用
    fn project 对象模型
    fn project AWS Lambda 格式 functions
    fn project 打包Function
    fn project Function files 说明
    fn project hot functions 说明
    fn project k8s 集成
    fn project 私有镜像发布
  • 原文地址:https://www.cnblogs.com/shizhengwen/p/14672507.html
Copyright © 2011-2022 走看看