3.2 3.3 數(shù)據(jù)定義

第三章完整版->有道云筆記

二皆疹、SQL功能

以學(xué)生-課程數(shù)據(jù)庫(kù)為例疏橄,定義一個(gè)學(xué)生-課程模式S-T。包括三個(gè)表:

  • 學(xué)生表:Student(++Sno++,Sname,Ssex,Sage,Sdept)
  • 課程表:Course(++Cno++,Cname,Cpno,Ccredit)
  • 學(xué)生選課表:SC(++Sno,Cno++,Grade)

1.數(shù)據(jù)定義

  • 模式的定義與刪除

要?jiǎng)?chuàng)建模式墙基,需有數(shù)據(jù)庫(kù)管理員權(quán)限软族,或獲得了數(shù)據(jù)庫(kù)管理員授權(quán)的CREATE SCHEMA的權(quán)限刷喜。定義模式實(shí)際上定義了一個(gè)命名空間残制,在這個(gè)空間里可以進(jìn)一步定義該模式包含的數(shù)據(jù)庫(kù)對(duì)象,例如基本表掖疮、視圖初茶、索引等。

    CREATE SCHEMA<模式名> AUTHORIZATION <用戶名>;
     /* 為用戶WANG定義了一個(gè)學(xué)生-課程模式S-T */
     CREATE SCHEMA"S-T" AUTHORIZATION WANG; 
     /* 若沒有指定<模式名>浊闪,則<模式名>隱含為用戶名WANG */
     CREATE SCHEMA AUTHORIZATION WANG; 

創(chuàng)建模式的同時(shí)可以在這個(gè)模式定義中進(jìn)一步創(chuàng)建基本表恼布、視圖、定義授權(quán)搁宾。

    CREATE SCHEMA<模式名> AUTHORIZATION <用戶名> [<表定義子句>|<視圖定義子句>|<授權(quán)定義子句>];
    /* 為用戶ZHANG創(chuàng)建一個(gè)模式TEST折汞,并在其中定義一個(gè)表TAB1 */
    CREATE SCHEMA TEST AUTHORIZATION ZHANG
    CREATE TABLE TAB1(COL1 SMALLINT,
                      COL2 INT,
                      COL3 CHAR(20)
    );

刪除模式,CASCADE(級(jí)聯(lián))和RESTRICT(限制)兩者必選其一盖腿。選擇CASCADE表示刪除模式的同時(shí)把該模式中所有數(shù)據(jù)庫(kù)對(duì)象全部刪除爽待;選擇RESTRICT表示如果該模式中已經(jīng)定義了下屬的數(shù)據(jù)庫(kù)對(duì)象,則拒絕該刪除語句的執(zhí)行翩腐。

    DROP SCHEMA<模式名><CASCADE|RESTRICT>;
    /* 刪除模式ZHANG鸟款,同時(shí),該模式中已經(jīng)定義的表TAB1也被刪除了 */
    DROP SCHEMA ZHANG CASCADE;
  • 基本表的定義茂卦、刪除與修改

定義基本表 CREATE TABLE

    CREATE TABLE<表名>(<列名><數(shù)據(jù)類型>[列級(jí)完整性約束條件]
                       [,<列名><數(shù)據(jù)類型>[列級(jí)完整性約束條件]]
                       ...
                       [,表級(jí)完整性約束條件]);
    /* 建立一個(gè)“學(xué)生”表Student */
    CREATE TABLE Student
      (Sno CHAR(9) PRIMARY KEY, /* 列級(jí)完整性約束條件何什,Sno是主碼 */
      Sname CHAR(20) UNIQUE,    /* Sname取唯一值 */
      Ssex CHAR(2),
      Sage SMALLINT,
      Sdept CHAR(20)
     );
    /* 建立一個(gè)“課程”表Course */
    CREATE TABLE Course
      (Cno CHAR(4) PRIMARY KEY, /* 列級(jí)完整性約束條件,Cno是主碼 */
      Cname CHAR(40) NOT NULL,  /* 列級(jí)完整性約束條件等龙,Cname不能取空值 */
      Cpno CHAR(4),             /* Cpno表示先修課 */
      Ccredit SMALLINT,
      FOREIGN KEY(Cpno) REFERENCE Course(Cno)
      /* 表級(jí)完整性約束條件处渣,Cpno是外碼伶贰,被參照表是Course,被參照列是Cno */
      /* 本例用來說明參照表和被參照表可以是同一個(gè)表 */
     );    
     /* 建立學(xué)生選課表SC */
    CREATE TABLE SC
      (Sno CHAR(9),
      Cno CHAR(4),
      Grade SMALLINT,
      PRIMARY KEY(Sno,Cno),  /* 主碼由兩個(gè)屬性構(gòu)成霍比,必須作為表級(jí)完整性進(jìn)行定義 */
      FOREIGN KEY(Sno) REFERENCE Student(Sno),
            /* 表級(jí)完整性約束條件幕袱,Sno是外碼,被參照表是Student */
      FOREIGN KEY(Cno) REFERENCE Course(Cno)
            /* 表級(jí)完整性約束條件悠瞬,Cno是外碼们豌,被參照表是Course */
     );

數(shù)據(jù)類型:在SQL中域的概念用數(shù)據(jù)類型來實(shí)現(xiàn)。定義表的各個(gè)屬性時(shí)需要指明其數(shù)據(jù)類型及長(zhǎng)度浅妆。

模式與表:每一個(gè)基本表都屬于某一個(gè)模式望迎,一個(gè)模式包含多個(gè)基本表。定義基本表時(shí)有三種方法定義它所屬的模式凌外。

    /* 1.在表中明顯地給出模式名 */
    CREATE TABLE "S-T".Student(...);/* Student所屬的模式是S-T */
    /* 2.在創(chuàng)建模式語句中同時(shí)創(chuàng)建表 */
    /* 為用戶ZHANG創(chuàng)建一個(gè)模式TEST辩尊,并在其中定義一個(gè)表TAB1 */
    CREATE SCHEMA TEST AUTHORIZATION ZHANG
    CREATE TABLE TAB1(COL1 SMALLINT,
                      COL2 INT,
                      COL3 CHAR(20)
    );
    /* 3.設(shè)置所屬的模式,這樣在創(chuàng)建表時(shí)表名中不必給出模式名康辑,系統(tǒng)根據(jù)搜索路徑確定模式 */
    SHOW search_path;                /* 顯示當(dāng)前搜索路徑 */
    /* 搜索路徑默認(rèn)為$user,PUBLIC摄欲,表示首先搜索與用戶名相同的模式名,如果不存在疮薇,則使用PUBLIC模式 */
    /* 數(shù)據(jù)庫(kù)管理員可以設(shè)置搜索路徑來建立S-T.Student基本表 */
    SET search_path TO "S-T",PUBLIC; /* 設(shè)置搜索路徑 */
    CREATE TABLE Student(...);       /* 定義基本表 */
    

修改基本表 ALTER TABLE

    ALTER TABLE <表名>
    [ADD [COLUMN] <新列名><數(shù)據(jù)類型> [完整性約束]]
    [ADD<表級(jí)完整性約束>]
    [DROP [COLUMN]<列名> [CASCADE|RESTRICT]]
    [DROP CONSTRAINT<完整性約束名> [RESTRICT|CASCADE]]
    [ALTER COLUMN <列名><數(shù)據(jù)類型>];
    
    /* 向Student表增加“入學(xué)時(shí)間”列胸墙,其數(shù)據(jù)類型為日期型 */
    ALTER TABLE Student ADD S_entrance DATE; /* 新增加的列一律為空值 */
    /* 將年齡的數(shù)據(jù)類型改為整數(shù) */
    ALTER TABLE Student ALTER COLUMN Sage INT;
    /* 增加課程名稱必須取唯一值的約束條件 */
    ALTER TABLE Course ADD UNIQUE(Cname);
    

刪除基本表 DROP TABLE

    DROP TABLE <表名> [RESTRICT|CASCADE];
    /* 刪除Student表 */
    DROP TABLE Student CASCADE;

CASCADE(級(jí)聯(lián))和RESTRICT(限制),前者刪除時(shí)按咒,相關(guān)依賴對(duì)象如視圖都將被一起刪除迟隅,后者若存在依賴該表的對(duì)象則基本表不能被刪除。

  • 索引的創(chuàng)建與刪除

建立索引 CREATE INDEX

    CREATE [UNIQUE] [CLUSTER] INDEX<索引名>
    ON <表名>(<列名>[次序][,<列名>[<次序>]]...);
    
    /* Student表按學(xué)號(hào)升序建立唯一索引 */
    CREATE UNIQUE INDEX Stusno ON Student(Sno);  
    /* Course表按課程號(hào)升序建立唯一索引 */
    CREATE UNIQUE INDEX Coucno ON Course(Cno);
    /* SC表按學(xué)號(hào)升序励七、課程號(hào)降序建立唯一索引 */
    CREATE UNIQUE INDEX SCno ON SC(Sno ASC,Cno DESC);

次序可選 ASC-升序(默認(rèn)) DESC-降序智袭,UNIQUE表明此索引的每一個(gè)索引值只對(duì)應(yīng)唯一的數(shù)據(jù)記錄,CLUSTER表示要建立的索引是聚簇索引。

修改索引

    ALTER INDEX <舊索引名> RENAME TO <新索引名>;
    /* 將SC表的SCno索引名改為SCSno */
    ALTER INDEX SCno RENAME TO SCSno;

刪除索引

    DROP INDEX <索引名>;
    /* 刪除Student表的Stusname索引 */
    DROP INDEX Stusname;
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末掠抬,一起剝皮案震驚了整個(gè)濱河市吼野,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌两波,老刑警劉巖瞳步,帶你破解...
    沈念sama閱讀 219,039評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異雨女,居然都是意外死亡谚攒,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門氛堕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來馏臭,“玉大人,你說我怎么就攤上這事±ㄈ澹” “怎么了绕沈?”我有些...
    開封第一講書人閱讀 165,417評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)帮寻。 經(jīng)常有香客問我乍狐,道長(zhǎng),這世上最難降的妖魔是什么固逗? 我笑而不...
    開封第一講書人閱讀 58,868評(píng)論 1 295
  • 正文 為了忘掉前任浅蚪,我火速辦了婚禮,結(jié)果婚禮上烫罩,老公的妹妹穿的比我還像新娘惜傲。我一直安慰自己,他們只是感情好贝攒,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,892評(píng)論 6 392
  • 文/花漫 我一把揭開白布盗誊。 她就那樣靜靜地躺著,像睡著了一般隘弊。 火紅的嫁衣襯著肌膚如雪哈踱。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,692評(píng)論 1 305
  • 那天梨熙,我揣著相機(jī)與錄音开镣,去河邊找鬼。 笑死串结,一個(gè)胖子當(dāng)著我的面吹牛哑子,可吹牛的內(nèi)容都是我干的舅列。 我是一名探鬼主播肌割,決...
    沈念sama閱讀 40,416評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼帐要!你這毒婦竟也來了把敞?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,326評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤榨惠,失蹤者是張志新(化名)和其女友劉穎奋早,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體赠橙,經(jīng)...
    沈念sama閱讀 45,782評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡耽装,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,957評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了期揪。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片掉奄。...
    茶點(diǎn)故事閱讀 40,102評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖凤薛,靈堂內(nèi)的尸體忽然破棺而出姓建,到底是詐尸還是另有隱情诞仓,我是刑警寧澤,帶...
    沈念sama閱讀 35,790評(píng)論 5 346
  • 正文 年R本政府宣布速兔,位于F島的核電站墅拭,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏涣狗。R本人自食惡果不足惜谍婉,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,442評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望镀钓。 院中可真熱鬧屡萤,春花似錦、人聲如沸掸宛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽唧瘾。三九已至措译,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間饰序,已是汗流浹背领虹。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留求豫,地道東北人塌衰。 一個(gè)月前我還...
    沈念sama閱讀 48,332評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像蝠嘉,于是被迫代替她去往敵國(guó)和親最疆。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,044評(píng)論 2 355