Oralce專題10之Oracle的其他數(shù)據(jù)庫對象

1、Oracle的數(shù)據(jù)庫對象:序列

a、什么是序列?

  • 序列(sequence):是一種用于自動(dòng)生成唯一數(shù)字的數(shù)據(jù)庫對象。主要用于提供主鍵值。
    Oralce專題10之Oracle的其他數(shù)據(jù)庫對象

    b、怎樣創(chuàng)建序列?

  • 創(chuàng)建序列的語法格式:
    CREATE SEQUENCE     sequence 
    [INCREMENT BY n] --每次增長的數(shù)值(步長),默認(rèn)值為1(n為正數(shù),則自增;n為負(fù)數(shù),則自減)
    [START WITH n] --從哪個(gè)值開始(初始值),默認(rèn)值為1
    [{MAXVALUE n | NOMAXVALUE}] -- 默認(rèn)值為 NOMAXVALUE
    [{MINVALUE n | NOMINVALUE}]-- 默認(rèn)值為 NOMINVALUE
    [{CYCLE | NOCYCLE}] -- 是否循環(huán),默認(rèn)值為NOCYCLE
    [{CACHE n | NOCACHE}] --是否緩存,默認(rèn)為不緩存
  • 示例:
    SQL> create sequence deptno_seq start with 50 increment by 10 maxvalue 70 cache 3;
    序列已創(chuàng)建。

    c、怎樣使用序列?

  • 當(dāng)使用序列時(shí),必須通過偽列NEXTVAL和CURRVAL來引用序列。
  • NEXTVAL用于引用返回下一個(gè)序列值。例如:deptno_seq.nextval。
  • CURRVAL用于引用返回當(dāng)前序列值。例如:deptno_seq.currval。
  • 示例1:插入數(shù)據(jù)時(shí),使用序列(需要注意的是,當(dāng)?shù)谝淮尾迦胄蛄袝r(shí),只能使用nextval偽列,不能使用currval偽列)
        SQL> create table deptnew as select * from dept;
        表已創(chuàng)建。
        SQL> insert into deptnew(deptno, dname, loc) values(deptno_seq.nextval, 'test_dname','test_loc');
        已創(chuàng)建 1 行。
        SQL> select * from deptnew;
            DEPTNO DNAME          LOC
                    10 ACCOUNTING     NEW YORK
                    20 RESEARCH       DALLAS
                    30 SALES          CHICAGO
                    40 OPERATIONS     BOSTON
                    50 test_dname     test_loc
  • 查看當(dāng)前序列值:
    SQL> select deptno_seq.currval from dual;
         CURRVAL
                    50

    - 附加說明:Oracle中的dual表

    成都創(chuàng)新互聯(lián)公司基于成都重慶香港及美國等地區(qū)分布式IDC機(jī)房數(shù)據(jù)中心構(gòu)建的電信大帶寬,聯(lián)通大帶寬,移動(dòng)大帶寬,多線BGP大帶寬租用,是為眾多客戶提供專業(yè)服務(wù)器托管報(bào)價(jià),主機(jī)托管價(jià)格性價(jià)比高,為金融證券行業(yè)達(dá)州主機(jī)托管,ai人工智能服務(wù)器托管提供bgp線路100M獨(dú)享,G口帶寬及機(jī)柜租用的專業(yè)成都idc公司。

  • dual表是一個(gè)虛擬表,用來構(gòu)成select的語法規(guī)則,oracle保證dual里面永遠(yuǎn)只有一條記錄。我們可以用它來做很多事情,如下:
    1、查看當(dāng)前用戶,可以在SQLPlus中執(zhí)行下面語句:select user from dual;
    2、用來調(diào)用系統(tǒng)函數(shù):select to_char(sysdate,'yyyy-mm-dd hh34:mi:ss') from dual; -- 獲得當(dāng)前系統(tǒng)時(shí)間
  • select SYS_CONTEXT('USERENV','TERMINAL') from dual;--獲得主機(jī)名
  • select SYS_CONTEXT('USERENV','language') from dual;--獲得當(dāng)前l(fā)ocale
  • select dbms_random.random from dual;--獲得一個(gè)隨機(jī)數(shù)
    3、獲得序列的下一個(gè)值或者當(dāng)前值,用下面語句:
  • select your_sequence.nextval from dual;--獲得序列your_sequence的下一個(gè)值
  • select your_sequence.currval from dual;--獲得序列your_sequence的當(dāng)前值
    4、可用作計(jì)算器:select 7*9 from dual;

    d、怎樣查詢序列?

  • 查詢數(shù)據(jù)字典視圖USER_SEQUENCES獲取序列定義信息:SELECT sequence_name, min_value, max_value, increment_by, cycle_flag, cache_size, last_number FROM user_sequences;
  • LAST_NUMBER列有兩種情況,如果指定NOCACHE情況,則LAST_NUMBER顯示的是序列當(dāng)中的下一個(gè)值;如果指定CACHE情況,則LAST_NUMBER顯示的是序列緩存當(dāng)中最后一個(gè)序列號(hào)的下一個(gè)值。
        SQL> SELECT sequence_name, min_value, max_value, increment_by, cycle_flag, cache_size, last_number from user_sequences;
        SEQUENCE_NAME   MIN_VALUE  MAX_VALUE INCREMENT_BY   C    CACHE_SIZE LAST_NUMBER 
        DEPTNO_SEQ                1                 70                      10                            N              3                     80

    e、修改序列

  • 修改序列的命令:ALTER SEQUENCE。
    ALTER SEQUENCE sequence 
    [INCREMENT BY n] --每次增長的數(shù)值
    [{MAXVALUE n | NOMAXVALUE}]
    [{MINVALUE n | NOMINVALUE}]
    [{CYCLE | NOCYCLE}] -- 是否需要循環(huán)
    [{CACHE n | NOCACHE}] --是否需要緩存
  • 需要注意的是,序列的初始值不能夠修改。
    SQL> alter sequence deptno_seq maxvalue 90;
    序列已更改。

    f、怎樣刪除序列?

  • 刪除序列的命令:DROP SEQUENCE。
  • 語法格式為:DROP SEQUENCE sequence;
    SQL> DROP SEQUENCE deptno_seq;
    序列已刪除。

    g、序列注意事項(xiàng)

  • 如果指定cache值,可提高訪問效率,但是使用cache也會(huì)出現(xiàn)跳號(hào)的可能。(即序列出現(xiàn)缺口)
  • 序列在下列情況下回出現(xiàn)序列缺口(裂縫):回滾、系統(tǒng)異常、多個(gè)表同時(shí)使用同一序列。

    2、Oracle的數(shù)據(jù)庫對象:索引

    a、什么是索引?

  • 索引是為了加速對表中的數(shù)據(jù)行的檢索而創(chuàng)建的一種存儲(chǔ)結(jié)構(gòu)。

    b、索引的分類

  • 按索引列的個(gè)數(shù):單列索引、復(fù)合索引。
  • 按索引列值的唯一性:唯一索引、非唯一索引。

    c、怎么創(chuàng)建索引?

  • 在一個(gè)或者多個(gè)列上創(chuàng)建索引。語法格式為:CREATE INDEX index ON table (column[, column] ...);
  • 創(chuàng)建單列索引示例:
    SQL> create index idx_ename on emp(ename);
    索引已創(chuàng)建。
  • 創(chuàng)建復(fù)合索引示例:
    SQL> create index idx_deptno on emp(deptno, job);
    索引已創(chuàng)建。
  • 創(chuàng)建唯一索引(索引的列值不能重復(fù))
    SQL> create unique index idx_dname on dept(dname);
    索引已創(chuàng)建。
  • 創(chuàng)建非唯一索引
    SQL> create index idx_job on emp(job);
    索引已創(chuàng)建。

    d、什么時(shí)候創(chuàng)建索引?

  • 以下情況可以創(chuàng)建索引:
    1、where子句經(jīng)常引用的表列上。
    2、為了提高多表連接的性能,應(yīng)該在連接列上建立索引。
    3、經(jīng)常排序的列上創(chuàng)建索引,可以加快數(shù)據(jù)排序的速度。
  • 什么時(shí)候不能創(chuàng)建索引:
    1、表很小。
    2、列不經(jīng)常作為連接條件或者出現(xiàn)在WHERE子句中。
    3、表經(jīng)常更新。

    e、怎么查詢索引?

  • 可以使用數(shù)據(jù)字典視圖USER_INDEXES(索引信息)和 USER_IND_COLUMNS(索引列信息)查看索引的信息。
  • 示例:SELECT uic.index_name, uic.column_name, uic.column_position, ui.unqueness FROM user_indexes ui, user_ind_columns uic WHERE uic.index_name = ui.index_name AND ui.table_name = 'EMP';
        SQL> SELECT uic.index_name, uic.column_name, uic.column_position, ui.uniqueness FROM user_indexes ui, user_ind_columns uic WHERE uic.index_name = ui.index_name AND ui.table_name = 'EMP';
        INDEX_NAME         COLUMN_NAME         COLUMN_POSITION   UNIQUENES
        IDX_JOB                JOB                              1                                NONUNIQUE
        ......
        PK_EMP                  EMPNO                      1                                UNIQUE

    f、怎樣刪除索引?

  • 使用DROP INDEX命令刪除索引:DROP INDEX index;
    SQL> DROP INDEX idx_ename;
    索引已刪除。

    3、Oracle的數(shù)據(jù)庫對象-同義詞

    a、什么是同義詞?

  • 同義詞是數(shù)據(jù)庫方案對象的一個(gè)別名。
  • 方案對象:表、索引、視圖、觸發(fā)器、序列、同義詞、存儲(chǔ)過程等;非方案對象:表空間、用戶、角色等。
  • 比如:stu是表studuent_info的同義詞。

    b、同義詞的作用

    1、簡化對象訪問。
    2、提供對象訪問的安全性:多用戶協(xié)同開發(fā)中,可以屏蔽對象的名字及其持有者。

    c、同義詞的分類

  • 包括公共同義詞和私有同義詞。
  • 公共同義詞:是指數(shù)據(jù)庫中所有的用戶都可以使用;私有同義詞:只能被創(chuàng)建它的用戶所擁有,其他用戶在引用時(shí)必須帶有方案名。

    d、創(chuàng)建同義詞

  • 創(chuàng)建公共同義詞:CREATE PUBLIC SYNONYM synonym FOR [schema.]object;
  • 創(chuàng)建私有同義詞:CREATE SYNONYM synonym FOR [schema.]object;
  • 注意:schema指的是方案名。(同用戶名);創(chuàng)建同義詞時(shí)用戶需要有創(chuàng)建同義詞的權(quán)限。
  • 授予scott用戶創(chuàng)建同義詞的權(quán)限示例:(創(chuàng)建公共同義詞和私有同義詞)
    SQL> conn sys/02000059 as sysdba;
    已連接。
    SQL> grant create public synonym to scott;
    授權(quán)成功。
    SQL> grant create synonym to scott;
    授權(quán)成功。
  • 給scott用戶下的deptnew表創(chuàng)建公共同義詞dn示例:
    SQL> conn scott/02000059
    已連接。
    SQL> create public synonym dn for scott.deptnew;
    同義詞已創(chuàng)建。
    SQL> select * from dn;
            DEPTNO DNAME          LOC
                    10 ACCOUNTING     NEW YORK
                    20 RESEARCH       DALLAS
                    30 SALES          CHICAGO
                    40 OPERATIONS     BOSTON
                    50 test_dname     test_loc
  • 給scott用戶下的emp01表創(chuàng)建私有同義詞em示例:
    SQL> create synonym em for scott.emp01;
    同義詞已創(chuàng)建。
    SQL> select * from em;
             EMPNO ENAME      JOB              MGR HIREDATE              SAL       COMM
            DEPTNO
                7951 EASON      ANALYST         7566 01-12月-17           3000
                    20
                7369 G_EASON    CLERK           7902 17-12月-80            800
                    20
                ......
                7934 MILLER     CLERK           7782 23-1月 -82           1300
                    10
    已選擇9行。

    e、查看同義詞

  • 當(dāng)建立同義詞時(shí),Oracle會(huì)將同義詞的信息存放到數(shù)據(jù)字典中。通過查詢數(shù)據(jù)字典視圖USER_SYNONYMS,可以顯示當(dāng)前用戶所有同義詞的詳細(xì)信息。
  • 示例:SELECT synonym_name, table_owner, table_name FROM user_synonyms WHERE synonym_name = 'EM';
    SQL> SELECT synonym_name, table_owner, table_name FROM user_synonyms WHERE synonym_name = 'EM';
    SYNONYM_NAME            TABLE_OWNER               TABLE_NAME
    EM                                     SCOTT                           EMP01

    f、Oracle對下列數(shù)據(jù)字典視圖提供的同義詞

  • 序列,數(shù)據(jù)字典:USER_SEQUENCES,對應(yīng)的同義詞:SEQ。
  • 索引,數(shù)據(jù)字典:USER_INDEXES,對應(yīng)的同義詞:IND。
  • 同義詞:數(shù)據(jù)字典:USER_SYNONYMS ,對應(yīng)的同義詞:SYN。
  • 示例查看私有同義詞:
    SQL> select * from syn where synonym_name = 'EM';
    SYNONYM_NAME     TABLE_OWNER               TABLE_NAME        DB_LINK
    EM                             SCOTT                            EMP01
  • 示例查看公共同義詞:
    SQL> SELECT synonym_name, table_owner, table_name FROM all_synonyms WHERE synonym_name = 'EM';
    SQL> select * from syn where synonym_name = 'EM';
    SYNONYM_NAME     TABLE_OWNER               TABLE_NAME      
    EM                             SCOTT                            EMP01

    g、刪除同義詞

  • 刪除公共同義詞:DROP PUBLIC SYNONYM synonym;
  • 刪除私有同義詞:DROP SYNONYM synonym;

文章題目:Oralce專題10之Oracle的其他數(shù)據(jù)庫對象
文章網(wǎng)址:http://bm7419.com/article12/igcgdc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供域名注冊、網(wǎng)站內(nèi)鏈、企業(yè)建站、、微信小程序、網(wǎng)站策劃

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)