• Oracle第四课(学习笔记)


    1、复制文件到新的表
    建立表直接拷贝内容
    CREATE TABLE JUL12_STUDENT_NEW  
        AS
        SELECT ID,SNAME,AGE FROM JUL12_STUDENT
        WHERE AGE >23;
    >>把查询出来的内容放置在新的表中,创建表的同时将数据放置在表里面

    ==============================================================

    2、Data Manipulation Language 数据库操作语言
    Command
    INSERT 添加命令
    UPDATE 更新命令
    DELETE 删除命令

    INSERT语句用子查询得到的数据直接添加进入另一个表
    INSERT INTO HISTORY (ID,LAST_NAME,SALARY,TITLE,START_DATE)
    SELECT ID,LAST_NAME,SALARY,TITLE,START_DATE
    FROM S_EMP
    WHERE START_DATE<'01-JAN-94';
    -------------------------
    Updating Rows
    UPDATE JUL12_STUDENT_NEW SET AGE=44,SNAME ='ABC'
    WHERE ID =103;

    要求,表内所有人的年龄都加10
    UPDATE JUL12_STUDENT_NEW
    SET AGE = AGE+10;

    CREATE TABLE JUL12_STUDENT_TEMP(
        A NUMBER(3),
        B NUMBER(3)
    );
    INSERT INTO JUL12_STUDENT_TEMP VALUES( 2,3);
    将student_temp表中a字段的值更新为student中
    最大的id,b字段的值更新为student中最小的年龄
    自己写:UPDATE JUL12_STUDENT_TEMP
    SET     A=(SELECT MAX(SID) FROM JUL12_STUDENT),
        B=(SELECT MIN(AGE) FROM JUL12_STUDENT)
    减少查询的次数 。变成一次。
    UPDATE JUL12_STUDENT_TEMP
    SET    SET (A,B)=     
        (SELECT MAX(SID) ,MIN(AGE)  FROM JUL12_STUDENT)
    --------------------------
    Deleting Rows from a table
    条件删除
    DELETE FROM a_smp
    WHERE start_date >
    TO_DATE('01.01.1996','DD.MM.YYYY');
    非条件删除
    DELETE FROM JUL12_TEST;

    ==================================================

    3、DCL 数据控制语言
    Database Control Language
    Transaction 事务
    事务的四个特性
    ACID四个英文单词的缩写
    atomic         原子性    不可分割
    consistence     一致性    一起成功一起失败
    isolation     隔离性    两个事务之间的隔离
    durability     持久性    持久化到数据库的表文件

    进入SQLPLUS后每个人都开启一个事务

    注:"/"表示执行上面的那个命令语句。

    两种级别:
    局部事务:
    局部事务(数据库的操作都是针对一个数据库的同一个用户)
    全局事务(分布式事务)(数据库操作是对多个数据库或者一个数据库的不同用户下的表)

    COMMIT 全部成功
    ROOLBACK 上面失败   回滚所有的操作

        DELETE FROM JUL12_STUDENT WHERE ID > 12;
        UPDATE JUL12_STUDENT SET AGE=23 WHERE SID =4;
        SELECT * FROM JUL12_STUDENT;
        --事务结束,一起失败
        ROOLBACK ;


    事务的锁定
    一个端口
    INSERT INTO JUL12_TABLE
    VALUES( 123,'XIE');

    另一个端口
    UPDATE JUL12_TABLE
    SET SID =123;

    一个客户端对这条记录操作。则锁定 。。等待提交事务(commit.或者,roolback) 否则另一个事务中就没有办法操作这个数据项
    事务工作方式:
    如果你没有提交事务,则其他用户就看不见
    没有提交或者回滚则,其他用户就不可以对该数据进行处理
    如果成功提交,则数据更改就提交到数据库中,进行存盘的操作。

    ---------指定返回事务----------
    当我们想把其中的几步回滚,那么我们就需要在操作的地址进行设置回滚点。
    例子:
    SELECT * FROM JUL12_STUDENT
    INSERT INTO JUL12_STUDENT VALUES(120,'ZHANG',12);
    SAVEPOINT INSERT_POINT_NAME1;
    UPDATE JUL12_STUDENT
    SET SID = 123, SNAME = 'XIA', AGE =13;
    SAVEPOINT UPDATE_POINT_NAME2;
    ROOLBACK;全部回滚
    ROOLBACK TO UPDATE_POINT_NAME1;
    则我们的insert语句还是可以执行的,就是下面的update语句是不可以执行的而已。这样我们就可以理解了这个ROOLBACK的用意了。
    ------------END-----------

    Other Database Object  其他数据对象
    1、Sequence     序列

    INSERT INTO JUL12_STUDENT VALUES(103,'ZHANG',23);

    CREATE SEQUENCE JUL12_SEQ_STU;
    //创建一个SEQUENCE
    CREATE SEQUENCE name
        [INCREMENT BY n]        增长的段    
        [START WITH n]            开始编号
        [{MAXVALUE n|NOMAXVALUE}]    最大值
        [{MINVALUE n|NOMINVALUE}]    最小值
        [{CYCLE|NOCYCLE}]        循环
        [{CACHE n|NOCACHE}]        缓存

    //删除索引
    DROP SEQUENCE name
    其中[START WITH n]不可以被修改,只可以被删除

    INSERT INTO JUL12_STUDENT VALUES (JUL12_SEQ_STU.NEXTVAL,'ZHANG',23);

    //序列的数字字典表
    user_sequences
    DESC USER_SEQUENCES;
    //查看序列当前的值
    SELECT JUL12_SEQ_STU.currval from dual(这个表只是为了让序列显示而已);

    //CACHE一般情况使用NOCACHE
    =====================================

    CREATE TABLE JUL12_INFO(
        ID NUMBER(3) PRIMARY KEY,
        NAME VARCHAR2(10),
        AGE NUMBER(3)
    );
    INSERT INTO JUL12_INFO VALUES( 1,'ZHANG',17);
    INSERT INTO JUL12_INFO VALUES( 2,'ZHANG',15);
    INSERT INTO JUL12_INFO VALUES( 3,'ZHANG',45);
    INSERT INTO JUL12_INFO VALUES( 4,'ZHANG',78);
    INSERT INTO JUL12_INFO VALUES( 5,'GOOD',23);
    INSERT INTO JUL12_INFO VALUES( 6,'GOOD',25);
    INSERT INTO JUL12_INFO VALUES( 7,'XIE',14);
    INSERT INTO JUL12_INFO VALUES( 8,'XIE',64);

    相同的记录只留下一条记录(自己写)
    SELECT A.ID, A.NAME,A.AGE
    FROM JUL12_INFO A ,
    (
    SELECT NAME,MAX(AGE) AGE FROM JUL12_INFO
    GROUP BY NAME
    ) B
    WHERE A.NAME =B.NAME AND A.AGE = B.AGE ;
    ----------------------面试的可能题目---------------
    ROWID 这条记录的实际存储位置
    SELECT ROWID FROM JUL12_INFO ;

    去除所有的内容
    DELETE FROM JUL12_INFO
    WHERE NAME IN
    (
        SELECT NAME FROM JUL12_INFO
        GROUP BY NAME
        HAVING COUNT(*) > 1
    );

    DELETE FROM JUL12_INFO A
    WHERE ID >
    (
        SELECT MIN(ID)
        FROM JUL12_INFO B
        WHERE A.NAME = B.NAME
    )

    DELETE FROM JUL12_INFO A
    WHERE A.ROWID >
    {
        SELECT MIN(ROWID)
        FROM JUL12_INFO B
        WHERE A.NAME = B.NAME
    }
    ============================
    随机查找
    SELECT DBMS_RANDOM.RANDOM FROM JUL12_INFO;
    -------随即取三条记录(自己写)-----------
    SELECT ID,NAME,AGE FROM
    (
        SELECT DBMS_RANDOM.RANDOM RADOMNUM,ID,NAME,AGE     
        FROM JUL12_INFO
        ORDER BY RADOMNUM
    )
    WHERE ROWNUM <=3;

    SELECT ID,NAME,AGE FROM
    (
        SELECT ID,NAME,AGE
        FROM JUL12_INFO
        ORDER BY DBMS_RADON.RANDOM
    )
    WHERE ROWNUM <= 3;
    -----------------end-----------------

    ――――――――acid
    -----隔离级别
    四种读:    
    dirty-read,脏读
    一个事务读到另一个事务没有提交的数据(在ORACLE没有这个情况)。
    committed-read ,提交读(默认的隔离级别)
    一个事务提交了事务,而另一个事务才可以读到
    repeatable-read 重复读 ,
    更改后没有什么,另一个查找的两次查找的过程中显示的结果一样。
    serializable-read 序列读(phantom-read幻影读)
    插入记录后,另一个用户读取不到数据。

    SET TRANSACTION ISOLATION;

    SET TRANSACTION ISOLATION LEVEL READ COMMITTED;

    SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

    2、Index        索引

    是一个独立的对象。

    建立了一个主键约束,或唯一约束的话,那么那个主键就是一个索引
    如果NAME为主键
    SELECT ID ,NAME .AGE FROM JUL12_INFO WHERE NAME='ASD';
    INDEX_TABLE
    AAA      ROWID
    BBB    ROWID
    ......

    自己建立索引
    CREATE INDEX index
    ON table (column[,column]...);

    Example:
    SQL> CREATE INDEX     s_emp_last_name_idx
        ON    s_emp(last_name);
    Index created;

    DESC USER_INDEXES;    
    SELECT INDEX_NAME FROM
    USER_INDEXES
    WHERE TABLE_NAME ='JUL12_INFO';

    按照NAME来找
    CREATE INDEX  JUL12_INDEX_INFO
    ON JUL12_INFO(NAME);
    删除索引
    DROP INDEX JUL12_INDEX_INFO
    3、view        视图
    准备数据
    CREATE TABLE JUL12_CLASS(
        CID NUMBER(3),
        CNAME CHAR(10)
    );
    INSERT INTO JUL12_CLASS VALUES( 101,'JAVA');
    INSERT INTO JUL12_CLASS VALUES (102,'C');
    INSERT INTO JUL12_CLASS VALUES( 103,'DD');
    CREATE TABLE JUL12_STUDENT(
        SID NUMBER(3),
        SNAME CHAR(10),
        CID NUMBER(3)
    );
    INSERT INTO JUL12_STUDENT VALUES (1,'ZHANG',101);
    INSERT INTO JUL12_STUDENT VALUES (2,'XIE',102);
    INSERT INTO JUL12_STUDENT VALUES (3,'GOOD',101);
    INSERT INTO JUL12_STUDENT VALUES (4,'SSS',101);
    SELECT S.SID,S.SNAME,C.CNAME    
    FROM JUL12_CLASS C ,JUL12_STUDENT S
    WHERE S.CID = C.CID;
    创建视图
    CREATE VIEW JUL12_S_C_VIEW
    AS
        SELECT S.SID,S.SNAME,C.CNAME
        FROM JUL12_CLASS C,JUL12_STUDENT S
        WHERE S.CID = C.CID;
    查询视图
    SELECT * FROM JUL12_S_C_VIEW
    更改视图
    CREATE OR REPLACE VIEW JUL12_S_C_VIEW
    AS
        SELECT S.SID,S.SNAME,C.CNAME
        FROM JUL12_CLASS C,JUL12_STUDENT S
    WHERE S.CID = C.CID;

    数据字典表
    user_views
    SELECT VIEW_NAME,TEXT FROM USER_VIEWS;

    ================================================
    CREATE TABLE JUL12_INFO(
        ID NUMBER(3),
        NAME CHAR(10),
        AGE NUMBER(3),
        ADDRESS CHAR(10)
    );
    INSERT INTO JUL12_INFO VALUES (101,'ZHANG',23,'JIANGSU');
    INSERT INTO JUL12_INFO VALUES (102,'XIE',23,'NANJING');
    INSERT INTO JUL12_INFO VALUES (103,'ZHNG',23,'ZEJIANG');
    INSERT INTO JUL12_INFO VALUES (104,'ZHG',23,'HANGZHOU');
    1。建立视图
    CREATE OR REPLACE VIEW JUL12_INFO_VIEW
    AS
        SELECT NAME ,AGE,ADDRESS
        FROM JUL12_INFO;
    2。查询视图
    SELECT * FROM JUL12_INFO_VIEW;
    3。加入数据
    INSERT INTO JUL12_INFO_VIEW  
    VALUES ('ZHANG',23,'CHANGZHOU');
    4.不允许加入数据
    CREATE OR REPLACE VIEW JUL12_INFO_VIEW
    AS
        SELECT NAME ,AGE,ADDRESS
        FROM JUL12_INFO
    WITH READ ONLY;
    如此作业就可以将视图不可以往数据库里面添加记录

    CREATE OR REPLACE VIEW JUL12_INFO_VIEW
    AS
        SELECT NAME,AGE ,ADDRESS
        FROM JUL12_INFO
        WHERE AGE =24
    WITH CHECK OPTION CONSTRAINT SS111;
    加入的记录符合WHERE的条件。
    INSERT INTO JUL12_INFO_VIEW
    VALUES ('22',24,'NJ'); 可以插入
    INSERT INTO JUL12_INFO_VIEW
    VALUES ('23',22,'JS'); 不可以插入

    简单视图,复杂视图
    复杂视图是不可以对视图进行插入值将值转换到表中。
  • 相关阅读:
    软件开发和机械制造的核心差别
    不做纯技术导向的程序员与中国特色的社会主义
    从代码里你可以看到什么?
    多少钱才可让人重拾理想
    项目经理一定比码农好么?
    技术还是管理?
    评李彦宏先生的内部邮件
    组织行为学对项目管理的意义(1)
    组织行为学对项目管理的意义:动机理论
    Silverlight与ashx通讯序列化DateTime时需注意的细节
  • 原文地址:https://www.cnblogs.com/itgmhujia/p/1264884.html
Copyright © 2020-2023  润新知