<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Oracle表的創建與管理一(Oracle數據類型,表和約束的創建修改與刪除)

      一.數據類型

      1.Character 數據類型用來存儲字符型數據:

      類型

      特點

      長度

      CHAR(n)

      用來存儲本地數據庫字符集定長字符串,如果不指定長度,缺省為1

      1-2000B

      NCHAR(n)

      用來存儲Unicode字符數據,即雙字節存儲

      1-2000B

       

      類型

      特點

      長度

      VARCHAR2(n)

      可變長度,n定義其最大長度,數據不足時不會以空格補充

      字段長度可達4000B

      NVARCHAR2(n)

       

      用來存儲Unicode字符數據,即雙字節存儲

       

      字段長度可達4000B

       2.number 數據類型用來存儲帶符號的整數或浮點數,其具有精度(precision)和范圍(scale)

      類型

      特點

      范圍

      Number

      (p,s)

      p定義精度,是字段的取值位數,不算小數點;s定義范圍,表示小數點后允許幾位數字

      P∈[1-38],默認為38

      S∈[-84~127],默認為0

      例:NUMBER(5,2)可以用來存儲表示-999.99...999.99間的數值 ,若在一行數據中的這個字段輸入575.316,則真正保存到字段中的數值是575.32

      3.float數據類型用來存儲精度為126位二進制(相當于38位的十進制)的浮點數。

      4.Integer數據類型用于存儲整型數據。

      5.日期時間數據類型

      日期時間數據類型用來存儲日期和時間的組合數據.

      類型

      特點

      date

      可存儲日期和時間信息;有效范圍為公元前4712年1年1月1日到公元后9999年12月31日,按7個字節來保存日期數據,包括世紀、年、月、日、小時、分、秒。缺省格式為DD-MON-YY。

      timestamp

      可存儲日期和時間信息,秒的默認精度為6位小數,秒最大可達到小數點后9位。最大存儲空間11Bytes.


      可使用獲取系統當前日期時間的函數SYSDATE:

      select sysdate from dual;

      插入數據時如不采用系統給定的格式,則需要使用日期類函數如TO_DATE進行轉換.
      重新定義date格式:

      ALTER SESSION SET nls_date_format=‘mm-dd-yyyy hh24:mi:ss';

      6.LOB數據類型

      LOB數據類型用于存儲大型的未被結構化的數據,如WORD文檔、二進制文件、圖片文件及其他外部文件,最大長度是128TB。

      類型

      特點

      BLOB

      可存儲可變長度的大型的、未被結構化的二進制數據,如圖像、音頻、視頻等,最大128TB

      CLOB

      存儲可變長度的字符數據,最大128TB。

      BFILE

      可存儲二進制格式的外部文件,該字段為只讀字段,不能通過數據庫對其中的數據進行修改,最大128TB

      7.ROWID數據類型

      ROWID數據類型是ORACLE數據表中的一個偽列,它是數據表中每行數據內在的唯一的標識 ,保存了每條記錄的物理地址,該字段為隱含的。
      ROWID字段的構成

      由18個字符組成,即OOOOOODDDBBBBBBRRR四組
      OOOOOO表示數據庫對象編號
      DDD表示表空間中的數據文件編號
      BBBBBB存儲記錄的數據塊的編號
      RRR標識同一數據塊中不同的記錄

      二.表的創建與修改

      1.創建表

      語法格式:

      CREATE  TABLE [schema_name.]table_name//[schema_name.]注釋:加[schema_name.]代表不同模式下的表
      ([column_name data_type
           [DEFAULT expr][PRIMARY KEY] [NULL|NOT NULL] ]
      [ , …]
      )
      [TABLESPACE tablespace_name]
      [NOLOGGING|LOGGING]
      [CACHE|NOCACHE]
      [STORAGE(…… )]]
      [AS subquery]

      語法說明:
      TABLESPACE :指定表所存放的表空間,用戶需擁有在表空間的CREATE ANY TABLE權限才可使用此子句
      NOLOGGING|LOGGING :不記錄到日志或記錄到日志
      CACHE|NOCACHE :是否將讀中的數據塊放置到LRU中最近最常使用的一端
      STORAGE子句 :設置存儲參數,主要用于數據字典管理方式,11g中在本地化管理方式中將忽略STORAGE子局設置的部分存儲參數.
      AS subquery:使用子查詢創建表
      【例1】以orac_test用戶在默認表空間中創建一個學生表student,表結構如下:

      字段名

      說明

      類型

      長度

      約束

      是否為空

      stuid

      學號

      Varchar2

      8

      主鍵

      sname

      學生姓名

      nVarchar2

      20

       

      sbirth

      出生日期

      DATE

       

       

      ssex

      性別

      nChar

      1

      默認‘男’

      stall

      身高

      NUMBER

      3

       

      sclass

      所屬班級

      Varchar2

      20

       

      saddress

      地址

      nVarchar2

      50

       


      SQL語句創建學生表student,語句如下:

      CREATE  TABLE student
      (stuid  varchar2(8) PRIMARY KEY,
        sname nvarchar2(20) NOT NULL,
        ssex  nchar(1) DEFAULT ‘男’,
        sbirth  date,
         stall  number(3),
         sclass varchar2(20),
         saddress  nvarchar2(50)
      )
      [TABLESPACE users];

      添加記錄的語法格式:

      INSERT INTO table_name
      (column_name1[,…])
      VALUES(value1,…valuen)

       說明:
      如果未指定列名,則VALUES子句必須按表結構定義的列次序提供列值;

      如指定了列名,則每個指定的列只能有一個值,且值的次序必須與表定義的次序相同;
      如使用SELECT子句,則指定的列必須匹配一致;
      字符串類型應注意用單引號括住

      【例2】在STUDENT表中錄入如下記錄:

      STUID

      SNAME

      SBIRTH

      SSEX

      STALL

      SCLASS

      a01

      張海

      1995-1-11

      ‘男’

      175

      軟件1141

      a02

      王麗

      1995-6-24

      ‘女’

      165

      軟件1142

       

      SQL>INSERT INTO student
      VALUES(‘a01’,‘張海’,‘男’, ‘11-1月-1995',175,'軟件1441','長春');
      SQL>INSERT INTO student
      VALUES(‘a02’,‘王麗','',TO_DATE('1995-4-24','yyyy-mm-dd'),165,'軟件1442','吉林');

       注: 在為表指定表空間時,用戶必須在相應的表空間中擁有足夠的配額,或者擁有UNLIMITED TABLESPACE系統權限

      2.修改表

      1、增加字段

      語句格式:
      ALTER TABLE table_name
      ADD (column_name datatype[, column_name  datatype])

      【例3】為emp表添加 phone_number和 hiredate兩列。

      SQL>ALTER TABLE emp
      
      ADD(phone_ number VARCHAR2(20),  hiredate DATE DEFAULT SYSDATE NOT NULL);

      2、修改列定義

      語句格式:
      ALTER TABLE table_name
      MODIFY column_name  datatype [DEFAULT expr][,column datatype …];
      【例4】修改emp表中 first_name和 phone_ number兩列的數據類型

      SQL>ALTER TABLE emp MODIFY first _name CHAR(25);
       SQL>ALTER TABLE emp MODIFY phone _number CHAR(30);

       3、修改列名

      語句格式:
      ALTER TABLE table_name
      RENAME COLUMN column_name TO new_col_name;
      【例5】修改emp表中 hiredate列的名稱為hire_date 

      SQL>ALTER TABLE emp RENAME COLUMN hiredate TO hire_ date;

       4、刪除列

      1)刪除一列
      語句格式:
      ALTER TABLE table_name
      DROP COLUMN column_name;
      2)刪除多列
      語句格式:
      ALTER TABLE table_name
      DROP (column1_name, column2_name);

      【例6】刪除emp表中的emp_id(主鍵), phone_number,hire_date三列

       SQL>ALTER TABLE emp DROP COLUMN emp_ id CASCADE CONSTRAINTS;
      sQL>ALTER TABLE emp DROP(phone _number,hire_date);

      5.將列設置為不可用

      LTER TABLE table_name

      SET UNUSED COLUMN  column1_name;或者SET UNUSED COLUMN  (column1_name,column2_name);

      【例7】將emp表中的 first_name, last_name, salary 列設置為UNUSED狀態。

      SQL>ALTER TABLE emp SET UNUSED COLUMN salary;
      SQL>ALTER TABLE emp SET UNUSED(first_name,last_name);
       SQL>ALTER TABLE emp DROP UNUSED COLUMNS;注釋:恢復可用狀態

       6.重命名表名

      【例8】為emp表重新命名為new_emp.

      SQL>ALTER TABLE emp RENAME TO new_ emp;

      7.查詢表

      可以通過查詢數據字典視圖DBA_TABLES、 ALL_TABLES、 USER_TABLES、DBA_TAB COLUMNS、 ALL_TAB_COLUMNS、USER_TAB_ COLUMNS獲取表及其列的信息。

      【例9】查詢當前用戶擁有的所有表的信息。

      SQL>SELECT table name, tablespace_name, status, logging FROM user_tables;

      三.刪除表

      如果表不再需要,可以使用 DROP TABLE語句將其刪除。如果要刪除的表中包含有被其他表外鍵引用的主鍵列或唯一性約束列并且希望在刪除該表的同時刪除其他表中相關的外鍵約束,則需要使用 CASCADE CONSTRAINTS子句。
      刪除 player表 

      SQL>DROP TABLE player CASCADE CONSTRAINTS;

      但是在 Oracle1g數據庫中,使用 DROP TABLE語句刪除一個表時,通常并不立即回收該表的空間,只是將表及其關聯對象的信息重命名后寫入一個稱為“回收站”(RECYCLEBIN)的邏輯容器中,從而可以實現表的閃回刪除( FLASHBACK DROP)操作。如果要回收該表的存儲空間,可以清空“回收站”(PURGE RECYCLEBIN)或在DROP TABLE語句中使用 PURGE語句。例如:

      SQL>DROP TABLE player CASCADE CONSTRAINTS PURGE; 

      四.數據完整性

      可添加單列或多列約束:

      若約束應用于單列,稱為列級約束
      若約束引用了多列,稱為表級約束
      使用 CREATE TABLE 或者 ALTER TABLE:
      CREATE TABLE 是在創建表時創建約束
      ALTER TABLE 是在一個已有的表上添加約束

      1.創建主鍵約束 

      1) 創建主鍵可以在建表時使用CREATE TABLE 命令完成. 

        【例11】在student庫中,建立一個民族表(民族代碼,民族名稱),將民族代碼指定為主鍵。其程序清單如下:

      CREATE TABLE native
      (native_id char(2) CONSTRAINT pk_mzdm PRIMARY KEY,
        native_name varchar2(30)  NOT NULL); 

       查詢用戶創建的約束信息,用數據字典USER_CONSTRAINTS。 

      2) 為已存在的表創建主鍵約束,其語法格式如下:   

        ALTER  TABLE  table_name
           ADD   CONSTRAINT constraint_name
          PRIMARY KEY [CLUSTERED|NONCLUSTERED]
           {(column[,…n])}

      【例12】修改教師表teacher,在該表中設置教師編號(TID)為主鍵 :

        ALTER TABLE teacher
                     ADD CONSTRAINT pk_bh PRIMARY KEY  (TID);

       在為表添加主鍵約束時,如該表已存在數據,則要求主鍵列不能具有相同的值,也不能存在NULL值,否則將添加失敗。

       【例13】修改教師表teacher,刪除該表中的主鍵約束 :

       ALTER TABLE teacher
                    DROP  CONSTRAINT pk_bh;   

      PRIMARY KEY 約束的注意事項:

      每張表只能有一個 PRIMARY KEY 約束
      主鍵列的值必須是惟一的
      主鍵列不允許為空值
      會自動為主鍵列創建惟一索引,以及一個非空約束
      主鍵約束可以是列級約束,也可以是表級約束。

      2.創建惟一約束

      1)創建表時創建惟一約束,其語法格式如下:

       CREATE  TABLE  table_name
                  (column_name data_type CONSTRAINT constraint_name    UNIQUE) ;

       2) 為存在的表創建惟一約束,其語法格式如下:        

          ALTER  TABLE  table_name
                   ADD   CONSTRAINT constraint_name
                    UNIQUE {(column[,…n])} 

       【例14】:在student庫中,為“民族”native表中的“民族名稱”native_name字段創建一個惟一約束。其程序清單如下:

      ALTER  TABLE native
                  ADD CONSTRAINT uk_mzmz
                  UNIQUE  (native_name )

       UNIQUE 約束的注意事項:          
      設置唯一約束的列,字段值不允許包含重復的值
      該列允許包含多個NULL值
      在一個表上允許多個 UNIQUE 約束
      可定義在列級或表級
      ORACLE會自動為其建立一個唯一索引
      對某列UNIQUE約束可以和NOT NULL約束同時定義,且對位置無要求。

      3.創建檢查約束

      1)創建表時創建檢查約束,其語法格式如下:

      CREATE  TABLE  table_name
           (column_name  data_type  CONSTRAINT constraint_name  CHECK(logical_expression) )

      2)使用SQL語句為已存在的表創建檢查約束,其語法格式如下:            

        ALTER  TABLE  table_name
                     ADD  CONSTRAINT constraint_name
                     CHECK  (logical_expression) 

       【例15】在student庫中,為教師表的出生日期列創建一個檢查約束,以保證輸入的數據大于1950年1月1日。其程序清單如下:

        ALTER  TABLE teacher
            ADD CONSTRAINT ck_csrq
             CHECK (tbirth>to_date (‘1950-1-1’,’yyyy-mm-dd’));

       CHECK 約束的注意事項:
      表達式的計算結果應是布爾值。
      只能引用同表中的其他列,但不能引用其他表中的列。
      該約束可定義在列級或表級。
      約束表達式中不能包含子查詢,也不能包含sysdate、user等SQL函數;
      對于同一個字段,可以定義多個CHECK約束。
      在每次執行 INSERT 或者 UPDATE 語句的時候校驗數據值。

      4.創建外鍵約束

      1)創建表時創建外鍵約束,其語法格式如下:

      CREATE  TABLE  table_name
           (column_name  data_type  CONSTRAINT constraint_name REFERENCES ref_table   [ ( ref_column_name[,…] ) ] )

       2) 修改表時增加外鍵約束的語法格式為:       

       ALTER TABLE table_name
               ADD  CONSTRAINT constraint_name
                FOREIGN KEY (column_name[,…])
               REFERENCES ref_table
               [ ( ref_column_name[,…] ) ] 

       【例16】在student庫的student表上,增加一個民族字段,并為該字段創建一個外鍵約束,從而保證輸入有效的民族代碼。其程序清單如下:

       ALTER TABLE  student
                 Add native_id char(2);
                 ALTER TABLE  student
                 ADD CONSTRAINT  fk_mzdm  FOREIGN KEY (native_id)   
                 REFERENCES native(native_id);

       FOREIGN KEY 約束的注意事項:
      提供了列級或表級的引用完整性。FOREIGN KEY 子句中指定的列的個數和數據類型必須和 REFERENCES 子句中指定的列的個數和數據類型匹配。
      具有該約束的字段值只能為相關表中引用的字段值或NULL值。
      具有該約束的字段可引用本表中的其他字段,即自引用。
      在一個表上創建外鍵之前,父表必須已經存在,必須為該表的引用列定義UNIQUE約束或PRIMARY KEY約束。
      外鍵約束既可以是列級約束,也可以是表級約束

      5.DROP命令刪除表約束

      1)刪除約束的語法格式為:   

      ALTER TABLE  table_name
             DROP CONSTRAINT    constraint_name
             [KEEP INDEX] [CASCADE]

       【例17】刪除學生表中的fk_class 、ck_csrq的約束,其程序清單如下:

        ALTER TABLE student
            DROP CONSTRAINT fk_class,ck_csrq;

      6.更改約束的狀態

      約束具有兩種狀態:
      激活狀態(ENABLE):在此狀態對表操作,若操作與約束沖突,則操作被取消.
      禁用狀態(DISABLE):在此狀態對表操作,即使操作與約束沖突, 操作仍然會執行.
      創建約束時默認為激活狀態

      1)創建表時禁止約束的語法格式為:

       CREATE TABLE  table_name
             (column_name data_type CONSTRAINT constraint_name  constraint_typ

       【例18】創建emp表,并設置emp_id列為主鍵,但禁用該約束

       CREATE TABLE  emp
             (emp_id number(4) CONSTRAINT pk_ygbh  PRIMARY KEY DISABLE,
              emp_name varchar2(20)
              );

      2)禁止/激活已存在的主鍵或唯一約束的語法格式為:   

      ALTER TABLE  table_name
             [DISABLE] | [ENABLE]  [unique|primary key](column_name) [KEEP INDEX]CASCADE

      【例19】修改emp表,并激活emp_id列的主鍵約束    

       
      ALTER TABLE  emp
                   ENABLE PRIMARY KEY (emp_id)
             ALTER TABLE  emp
                   DISABLE PRIMARY KEY (emp_id)KEEP INDEX

      【例20】修改student表,禁用該表中的外鍵約束fk_class  

        ALTER TABLE  class
                   DISABLE CONSTRAINT pk_cid CASCADE
             ALTER TABLE  student
                  DISABLE CONSTRAINT fk_class    

      注:在禁止唯一約束或主鍵約束時使用CASCADE關鍵字,將連同與該鍵相關的外鍵約束一同禁止。但反之則不成。

      7.查詢約束

      可以通過查詢數據字典視圖 DBA_CONSTRAINTS、ALL_CONSTRAINTS、USER_CONSTRAINTS、DBA_CONS_COLUMNS、USER_CONS_COLUMNS、USER_CONS COLUMNS等獲取表中存在約束信息。

      【例21】查詢 employees表中所有約束的名稱與類型。

      SQL>SELECT constraint _name, constraint_ type, status FROM user _constraints WHERE table_ name='EMPLOYEES';
      posted @ 2020-11-16 00:39  重雪  閱讀(537)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 精品九九人人做人人爱| 嫩草欧美曰韩国产大片| 日韩av毛片福利国产福利| 国产精品一区二区黄色片| 久久精品国产www456c0m| 日韩精品国内国产一区二| 久久久久国精品产熟女久色| 亚洲夂夂婷婷色拍ww47| 久爱www人成免费网站| 双柏县| 国产精品国产精品偷麻豆 | 国产亚洲国产精品二区| 亚洲av无码精品蜜桃| 蜜臀av午夜精品福利| 亚洲 欧洲 自拍 偷拍 首页| 高清免费毛片| 日韩一区二区三区水蜜桃| 亚洲午夜伦费影视在线观看| 国产地址二永久伊甸园| 国产精品一区二区三区日韩| 国产精品成| 亚洲精品一区二区18禁| 欧美视频专区一二在线观看 | 国产精品不卡一区二区视频| 熟妇无码熟妇毛片| 欧美成人www免费全部网站 | 国产高清视频一区二区乱| 亚洲青青草视频在线播放| 亚洲香蕉av一区二区蜜桃| 国产一区二区在线有码| 国产精品爽爽v在线观看无码| 自拍偷亚洲产在线观看| 色婷婷亚洲精品综合影院| 中文字幕乱码一区二区免费| 丝袜美腿亚洲综合第一页| 精品熟女少妇免费久久| 黄色国产精品一区二区三区| 国产不卡在线一区二区| 麦盖提县| 国产精品任我爽爆在线播放6080| 国产99在线 | 亚洲|