(Les13 Managing Schema Objects)[20171220]

来源:http://www.cnblogs.com/also-brook/archive/2017/12/21/8081055.html
-Advertisement-
Play Games

目的: 增加約束 創建索引 使用CREATE TABLE語句創建索引 創建函數索引 刪除列和將列置為UNUSED 平臺FLASHBACK閃回操作 創建臨時表 創建和使用外部表 ALTER TABLE語句 -增加列 -修改已存在的列 -定義列的預設值 -刪除列 語法 ALTER TABLE table ...


目的:     增加約束     創建索引     使用CREATE TABLE語句創建索引     創建函數索引     刪除列和將列置為UNUSED     平臺FLASHBACK閃回操作     創建臨時表     創建和使用外部表      ALTER TABLE語句     -增加列     -修改已存在的列     -定義列的預設值     -刪除列          語法         ALTER TABLE table_name ADD (column datatype [DEFAULT expr] [,column datatype] . . .);         ALTER TABLE table_name MODIFY (column datatype [DEFAULT expr] [,column datatype] . . .);         ALTER TABLE table_name DROP (column);         ALTER TABLE table_name SET UNUSED column_name;         ALTER TABLE table_name DROP UNUSED COLUMNS;                 ALTER TABLE table_name READ ONLY;         ALTER TABLE table_name READ WRITE;                      增加列             -新增列不能指定列的顯示位置。新列成為最後一列         註意:增加新列NOT NULL約束時,如果表中已有資料NOT NULL約束將失敗。              修改列             -可以對列的數據類型、大小和預設值進行更改。             -滿足以下條件,可以減少列的寬度                 -該列僅包含空值                 -空表                 -減少的列寬不小於該列中的現有值             -如果該列子包含空值,則可以更改數據類型。char-to-varchar2有數據也可以轉換。             -對列的預設值更改只會影響後續的插入。                 刪除列             -該列包含或不包含數據             -使用ALTER TABLE 語句,一次只能刪除一列             -表格中必須至少保留一列             -列被刪除後,無法恢復             -如果列是約束的一部分或者是索引鍵上的欄(測試主鍵和外鍵),則不能刪除列,除非添加了cascade級聯選項             -如果列上有大量的數據,刪除列需要一些時間。這種情況下最好將其設置為UNUSED狀態,併在系統上的用戶較少時將其丟棄,以避免擴大鎖定。         註意:某些列永遠不能被刪除,例如構成分區表分區鍵的列或構成索引組織表的主鍵一部分的列。                      SET UNUSED             -SET UNUSED將一列或多列標記為未使用,以便在系統資源需求較低時可將其刪除。它並不會從實際空間進行刪除,因此響應時間比執行DROP子句更快。列被標記為未使用之後,將無權訪問該列。             -SET UNUSED信息存儲於USER_UNUSED_COL_TABS數據字典中。         註意:SET UNUSED的原則與DROP相似       約束         -可以增加、刪除、啟用/關閉約束,但不能改變其結構。         -增加NOT NULL約束,必須使用ALTER TABLE MODIFY語句。       註意:只能在空表的列上增加NOT NULL約束或者列上每一行都有值。                          語法             ALTER TABLE <table_name > ADD [CONSTRAINT <constraint_name>] TYPE (<column_name>);                      -ON DELETE CASCADE級聯刪除             允許子表引用的父鍵數據被刪除,但不被更新。當父表中鍵值刪除時,子表中依賴值的所有行也被刪除。在FOREIGN KEY外鍵約束中指定ON DELELTE CASCADE選項。         -ON DELETE SET NULL級聯置空             當父表中鍵值刪除時,子表中依賴值置空。                  延遲約束             -DEFERRABLE or NOT DEFERRABLE             -INITIALLY DEFERRED or INITIALLY IMMEDIATE             推遲約束檢查,直達事務結束時才進行約束檢查。如果違反約束,則整個事務將回滾。                          ALTER TABLE <table_name> ADD CONSTRAINT <constraint_name> PRIMARY KEY (column_name) DEFERRABLE INITIALLY DEFERRED;             SET CONSTRAINTS <constraint_name> IMMEDIATE;             ALTER SESSION SET CONSTRAINTS=IMMEDIATE;           刪除約束             ALTER TABLE <table_name> DROP CONSTRAINT <constraint_name>;             ALTER TABLE <table_name> DROP PRIMARY KEY|UNIQUE (column) | CONSTRAINT <constraint_name> [CASCADE];           關閉約束             ALTER TABLE <table_name> DISABLE CONSTRAINT <constraint_name> [CASCADE];            註意:關閉唯一性約束和主鍵約束時,相關的索引會進行刪除。         啟用約束             ALTER TABLE <table_name> ENABLE CONSTRAINT <constraint_name> ;             註意:啟用主鍵約束時,依賴此主鍵的外鍵約束不會級聯啟用。         級聯約束             ALTER TABLE <table_name> DROP COLUMN <column_name> CASCADE CONSTRAINTS;->如果列上有引用使用cascade constraints選項可以級聯刪除列。       索引         索引類型:             唯一性索引:PRIMARY KEY和UNIQUE約束會自動創建唯一性索引。             非唯一性索引:用戶自定義創建索引。CREATE INDEX/CREATE TABLE                          註意:創建唯一性索引時,建議創建一個唯一性約束,因為它會隱式的創建一個唯一性索引。                  重用Index             ALTER TABLE <table_name> ADD PRIMARY KEY (column_name) USING INDEX <index_name>;              基於函數的索引             -索引上是表達式可以是:列、約束、SQL 函數和用戶自定義函數。             註意:使用函數索引必須將參數QUERY_REWRITE_ENABLED設定為TRUE             CREATE INDEX <index_name> ON table_name(UPPER(column_name));                          select * from ocp_047_base_function where upper(col)=upper('name');             select * from table(dbms_xplan.display_cursor());         刪除索引             DROP INDEX <index_name>;                  刪除表         DROP TABLE <table_name> [PURGE];         Oracle 10g引入了一個刪除表的新功能。刪除表時,資料庫不會立即釋放與該表關聯的空間。而是將表重命名放入回收站中,如果發現錯誤地刪除,則可以使用FLASHBACK TABLE語句恢復該表。如果想立即釋放空間可以使用DROP TABLE [PRUGE]語句。         註意:SYS(AS SYSDBA)賬戶刪除的表不會放入回收站中。     FLASHBACK TABLE閃回     FLASHBACK TABLE [schema .] table [, [schema.] table ...] TO { TIMESTAMP | SCN } expr [ { ENABLE | DISABLE} TRIGGERS];         -Oracle 10g提供的新特性DDL命令,FLASHBACK TABLE         -將表恢復到較早的時間點或防止意外刪除和修改表         -FLASHBACK TABLE 是一種自助修複工具,用於恢復表中的數據以及索引或視圖         -資料庫聯機時完成,只需回滾指定的表。         -與傳統恢復機制相比,此功能提供了易用性、可用性和更快恢復等優勢。         -預設情況下所有涉及的表都禁用觸發器,也可以指定ENABLE TRIGGERS來啟用。       SQL>  show recyclebin ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME ---------------- ------------------------------ ------------ ------------------- EMP#             BIN$X5JCv1b5JHDgU+sCHqzk8Q==$0 TABLE        2017-12-05:13:39:38 EMP$_#           BIN$X5JCv1b+JHDgU+sCHqzk8Q==$0 TABLE        2017-12-05:13:40:12 EmP              BIN$X5JCv1cDJHDgU+sCHqzk8Q==$0 TABLE        2017-12-05:13:40:21 INSERT_TAB       BIN$X6NQR/0SAVbgU+sCHqzqQg==$0 TABLE        2017-12-06:10:39:32 INSERT_TAB       BIN$X6NQR/0MAVbgU+sCHqzqQg==$0 TABLE        2017-12-06:10:20:06     SQL> desc recyclebin Name                                      Null?    Type ----------------------------------------- -------- ---------------------------- OBJECT_NAME                               NOT NULL VARCHAR2(30) ORIGINAL_NAME                                      VARCHAR2(32) OPERATION                                          VARCHAR2(9) TYPE                                               VARCHAR2(25) TS_NAME                                            VARCHAR2(30) CREATETIME                                         VARCHAR2(19) DROPTIME                                           VARCHAR2(19) DROPSCN                                            NUMBER PARTITION_NAME                                     VARCHAR2(32) CAN_UNDROP                                         VARCHAR2(3) CAN_PURGE                                          VARCHAR2(3) RELATED                                   NOT NULL NUMBER BASE_OBJECT                               NOT NULL NUMBER PURGE_OBJECT                              NOT NULL NUMBER SPACE                                              NUMBER SQL> select original_name,operation,droptime from recyclebin; ORIGINAL_NAME                    OPERATION DROPTIME -------------------------------- --------- ------------------- EMP#                             DROP      2017-12-05:13:39:38 EMP$_#                           DROP      2017-12-05:13:40:12 EmP                              DROP      2017-12-05:13:40:21 TAB_04                           DROP      2017-12-06:10:00:19 T01                              DROP      2017-12-20:17:11:48 INSERT_TAB                       DROP      2017-12-06:10:39:32 OCP_047_BASE_FUNCTION_V0         DROP      2017-12-20:17:05:53 OCP_047_BASE_FUNCTION            DROP      2017-12-20:17:05:53 INSERT_TAB                       DROP      2017-12-06:10:20:06                  閃回表             FLASHBACK TABLE <table_name> TO BEFORE DROP;     臨時表         CREATE GLOBAL TEMPORARY TABLE <table_name> ON COMMIT [PRESERVE | DELETE ] ROWS;         -PRESERVE ROWS :保留至會話結束         -DELETE ROWS:保留至事務結束           14:17:38 SQL> create global temporary table temp_t0         14:18:23   2  on commit preserve rows as select * from employees where rownum<20;

已建立表格.

        14:19:21 SQL> select count(*) from temp_t0;

  COUNT(*)                                                                                                    

----------                                                                                                    

        19                                                                                                    

14:19:25 SQL> commit;

確認完成.

14:19:29 SQL> select count(*) from temp_t0;

  COUNT(*)                                                                                                    

----------                                                                                                    

        19                                                          

        14:20:27 SQL> create global temporary table temp_t0 on commit        14:28:25   2  delete rows as select * from employees where rownum<20;

已建立表格.

14:28:44 SQL> select * from temp_t0;

沒有任何資料列被選取

14:28:51 SQL> select count(*) from temp_t0;

  COUNT(*)

----------

         0

14:29:06 SQL> insert into temp_t0  select * from employees;

已建立 107 個資料列.

14:29:23 SQL> select count(*) from temp_t0;

  COUNT(*)

----------

       107

14:29:33 SQL> commit;

確認完成.

14:29:36 SQL> select count(*) from temp_t0;

  COUNT(*)

----------

         0

14:29:37 SQL>

    外部表         外部表是一個只讀表,元數據存儲在資料庫中,但其數據存儲在資料庫之外。外部表可以被認為是一個視圖,可以對外部數據進行SQL查詢,而不需要將外部數據載入到資料庫中。         外部表不能進行DML操作、建立索引。但可以使用CREATE TABLE AS SELECT載入數據到資料庫中。         外部表提供了兩個訪問驅動程式:ORACLE_LOADER和ORACLE_DATAPUMP             -ORACLE_LOADER將外部數據映射到資料庫             -ORACLE_DATAPUMP將資料庫資料卸載到外部文件          外部表的創建                 -創建目錄提供給外部表 CREATE [OR REPLACE] DIRECTORY <directory_name> AS 'directory_path';                 -授權目錄給使用賬戶 GRANT READ ON DIRECTORY <directory_name> TO schema_name;           ORACLE_DATAPUMP                 CREATE TABLE extract_emps                     ORGANIZATION EXTERNAL (TYPE ORACLE_DATAPUMP                                                                     DEFAULT DIRECTORY ...                                                                     ACCESS PARAMETERS (...)                                                                     LOCATION (...)                                                                     PARALLEL 4                                                                     REJECT LIMIT UNLIMITED                     AS                     SELECT * FROM ...;      create table extract_datapump    (last_name,employee_id,salary)

    organization external    

    (type oracle_datapump

    default directory expdp_path

    location('emp_01.bat','emp_02.bat'))

    parallel

    as

    select last_name,employee_id,salary from employees

    ;

                    [oracle@xxxxx bak]$ strings emp_01.bat|tail

      Perkins

      Bell

      Everett

 

          ORACLE_LOADER                 CREATE TABLE extract_loader ( --表名稱                     fname char(25), --欄位名                     lname char(25)) --欄位名                 ORGANIZATION EXTERNAL --外部表                     (TYPE ORACLE_LOADER  --外部表驅動器                     DEFAULT DIRECTORY <directory_name> --預設目錄                     ACCESS PARAMETERS --標識訪問參數                         (RECORDS DELIMITED BY NEWLINE                          NOBADFILE --不產生故障文件                         NOLOGFILE --不產生日誌文件                         FIELDS TERMINATED BY ',' --區分符                         (fname POSITION (1:20) CHAR, --定義文件類型對應值                          lname POSITION (22:41) CHAR))                         LOCATION ('file_name'))--載入文件名稱                     PARALLEL 5 --並行度                     REJECT LIMIT 200; --限制錯誤的個數及停止查詢                                      外部表創建語法                 CREATE TABLE <table_name>                     (<col_name> <datatype>, ... )                     ORGANIZATION EXTERNAL                         (TYPE <access_driver_type>                         DEFAULT DIRECTORY <directory_name>                         ACCESS PARAMETERS                             ( ... ) )                         LOCATION ('<localtion_specifier>') )                 REJECT LIMIT [ 0 | <number> | UNLIMITED];               
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1.搜尋執行檔——which which指令主要是在PATH所包含的目錄中去搜尋執行檔的檔名,若加上-a參數就可以搜尋除所有包含檔案的信息 上面列出root賬號的PATH包含的目錄,which命令會在這些目錄中去查看文件 如果文件不在這些目錄中就會提示找不到,如下 cd檔案用which找不到,因為c ...
  • 初學Redhat,有不對的地方見諒 man手冊用法 man(選項)(參數) 其中man手冊主體分為以下幾個部分 man手冊部分 代號 內容說明 NAME 簡短的命令、數據名稱說明(命令名稱及功能簡要說明) SYNOPSIS 簡短的命令執行語法簡介(用法說明,包括可用的選項) DESCRIPTION ...
  • 最近因為要學習Python,於是把放在家裡接了一年灰的樹莓派又給搜出來了,剛買那會也搗鼓了好一陣子, 基本操作都學會了,但現在又忘光了,只能又從頭開始搞了,首先第一個要解決的是怎麼把文件從電腦傳輸到樹莓派 ,記得以前是在Windows上傳的,直接在網上下載了一個軟體,filezilla,打開輸入板卡 ...
  • 通過啟用屏幕共用來開啟遠程桌面登錄,開啟後需要關閉encryption,否則會出現無法連接的情況。關閉encryption可以使用系統配置工具dconf來完成。所以先安裝dconf-editor。 更新源並安裝系統配置工具(不更新源無法進行安裝) 1、查看系統版本 2、添加更新源,更新源內容可以從網 ...
  • 一、環境 VMware12 Pro CentOS-6.7-i386-bin-DVD1 jdk-8u151-linux-i586 二、詳細安裝步驟 前提:需要卸載自己Linux上的jdk rpm -qa | grep jdk 會顯示你所有包含jdk這個字元串的安裝包 rpm -e --nodeps 對 ...
  • 目錄 一、概述 二、MySQL安裝 三、安裝成功驗證 四、NavicatforMySQL下載及使用 一、概述 MySQL版本:5.7.17 下載地址:http://rj.baidu.com/soft/detail/12585.html?ald 客戶端工具:NavicatforMySQL 綠色版下載地 ...
  • 項目需要定時備份資料庫,以下是自己的操作筆記 1.檢查磁碟空間 這是我當前linux伺服器的情況,至於為什麼是這樣子,我也不清楚(我是半路接過來的,無奈) 根據上面的信息,我就把備份文件放在/dev目錄下麵 2.創建備份目錄 3.創建備份shell命令 輸入如下內容 對備份進行壓縮 註意: 把 us ...
  • 在增量部署系統的時候, 經常需要提供增量修改的腳本, 如果是修改存儲過程或者自定義函數, 那還是很好改的, 不用擔心表功能收到影響. 如果是改欄位呢? 首先不知道欄位是不是已經在系統裡面, 沒有的話, 需要新增上去, 有的話, 需不需要修改? 其次, 腳本如果報錯, 是否會重覆執行一下腳本? 會不會 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...