數(shù)據(jù)庫學習筆記(一)2017.9.7

SQL教程

DBS(Database System)

  • 傳統(tǒng)的文件處理系統(tǒng)中存儲組織信息的主要弊端
    • 數(shù)據(jù)的冗余和不一致性(data redundancy and inconsistency)
    • 數(shù)據(jù)訪問困難(dificulty in accessing data)
    • 數(shù)據(jù)孤立(data isolation)
    • 完整性問題(integrity problem)
    • 原子性問題(atomicity problem)
    • 并發(fā)訪問異常(concurrent-access anomaly)
    • 安全性問題(security problem)
  • 數(shù)據(jù)庫系統(tǒng)的目標:提供一種可以方便高效地存取數(shù)據(jù)庫信息的途徑

數(shù)據(jù)視圖

數(shù)據(jù)庫系統(tǒng)的一個主要目的是給用戶提供數(shù)據(jù)的抽象視圖,也就是說隱藏關(guān)于數(shù)據(jù)存儲和維護的某些細節(jié)

  • 數(shù)據(jù)抽象

    數(shù)據(jù)視圖
    • 物理層(physical level)
      • 最低層次的抽象
      • 描述了數(shù)據(jù)實際上是怎么存的(比如是都存在一個文件里還是分散在多個文件里)
    • 邏輯層(logical level)
      • 比物理層層次稍高的抽象
      • 描述了數(shù)據(jù)庫中存什么數(shù)據(jù)以及數(shù)據(jù)之間的關(guān)系
      • 邏輯層的用戶不需要去關(guān)系數(shù)據(jù)具體是怎么存的,這稱作物理數(shù)據(jù)獨立性(physical data independence)

        ps: 對于具有物理數(shù)據(jù)獨立性的設(shè)計,即便底層的物理存儲改變了,邏輯層也不需要做任何的修改

    • 視圖層(view level)
      • 最高層次的抽象,只描述整個數(shù)據(jù)庫的某個部分
      • 簡而言之,對于邏輯層的數(shù)據(jù),我們可以通過不同的視圖,以不同的視角以及視野去查看它
  • 實例和模式

類比:模式類比于變量的聲明,實例類比于變量在特定時刻的值

  • 模式: 數(shù)據(jù)庫的總體設(shè)計
    • 數(shù)據(jù)庫的模式限定了數(shù)據(jù)庫中都有哪些表,表中都有哪些字段以及表與表之間的關(guān)系
  • 實例: 特定時刻存儲在數(shù)據(jù)庫中的信息的集合
    • 數(shù)據(jù)庫的一個實例包含了數(shù)據(jù)庫在一個時刻下的所有表的信息
  • 數(shù)據(jù)模型

    • 關(guān)系模型
    • 實體—聯(lián)系模型
    • 基于對象的數(shù)據(jù)模型
    • 半結(jié)構(gòu)化的模型
    • 網(wǎng)狀數(shù)據(jù)模型
    • 層次數(shù)據(jù)模型

關(guān)系型數(shù)據(jù)庫的一些基本術(shù)語

  • relation(關(guān)系)==>表
  • column(列)==>字段(同一字段內(nèi)所有數(shù)據(jù)的數(shù)據(jù)類型一致)
  • row(行)==>對應(yīng)于數(shù)據(jù)庫表中的一行數(shù)據(jù)(對應(yīng)于數(shù)學概念中的元組)
  • SQL(Structured Query Language)==>結(jié)構(gòu)化的查詢語言
  • DDL:Data Define Language(數(shù)據(jù)定義語言)==>執(zhí)行 該類SQL語句會導致表結(jié)構(gòu)的變化
  • DML:Data Manager Language(數(shù)據(jù)操縱(管理)語言)==>執(zhí)行該類SQL語句對表中的數(shù)據(jù)進行增刪改查
  • tuple(元組)==>對應(yīng)于數(shù)據(jù)表中的一行數(shù)據(jù)
  • domain(域)==>字段的取值范圍
  • schema(方案/模式)==>數(shù)據(jù)庫中的Schema,為數(shù)據(jù)庫對象的集合,一個用戶一般對應(yīng)一個schema
  • Cartesian product(笛卡兒積)

    ps: 應(yīng)當避免表與表之間相關(guān)聯(lián)的時候采用全匹配(如果采用笛卡爾積的匹配方式即為全匹配)


DDL (數(shù)據(jù)定義語言)
數(shù)據(jù)庫模式定義語言DDL(Data Definition Language),是用于描述數(shù)據(jù)庫中要存儲的現(xiàn)實世界實體的語言。一個數(shù)據(jù)庫模式包含該數(shù)據(jù)庫中所有實體的描述定義。

  • 執(zhí)行此類語句會導致數(shù)據(jù)庫結(jié)構(gòu)的變化
  • create(創(chuàng)建一個表)
-- 下面的語句創(chuàng)建了一個用戶表,以id為主鍵,并添加了username和age字段
CREATE TABLE User(
    id INT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(20) DEFAULT "",
    age INT DEFAULT 18
);
CREATE UNIQUE INDEX User_id_uindex ON User (id);
  • alter(修改表的結(jié)構(gòu))
-- 下面的語句修改了user表的id屬性
ALTER TABLE user MODIFY id INT(11) unsigned NOT NULL AUTO_INCREMENT;
  • drop(刪除一張表)
-- 下面的語句刪除了為user表
DROP TABLE demo.user;
  • rename(用于對一張表的名字進行重命名)
    • Oracle數(shù)據(jù)庫將其劃分到DDL
    • SQL server數(shù)據(jù)庫將其歸到DML
-- 下面的語句將user表的表名改成new_user
rename table user to new_user
  • truncate(截斷==>用于刪除數(shù)據(jù)表中的所有數(shù)據(jù),但是保留表結(jié)構(gòu),不同公司的數(shù)據(jù)庫實現(xiàn)的機制不同)

DML
數(shù)據(jù)操縱語言(Data Manipulation Language, DML)SQL語言中,負責對數(shù)據(jù)庫對象運行數(shù)據(jù)訪問工作的指令集,以INSERT、UPDATE、DELETE三種指令為核心,分別代表插入、更新與刪除,是開發(fā)以數(shù)據(jù)為中心的應(yīng)用程序必定會使用到的指令,因此有很多開發(fā)人員都把加上SQL的SELECT語句的四大指令以“CRUD”來稱呼。

  • 此類語句對數(shù)據(jù)進行增刪改查(CRUD)
  • insert
-- 下面的語句往user用戶表中插入一條記錄
INSERT into user(username, age) VALUES('Robbin', 18)
-- 下面的語句修改了user表中username為Robbin的表項(元組)的數(shù)據(jù)
UPDATE user SET username = 'Robbin2', age = 17 WHERE username = 'Robbin'
-- 下面的語句刪除user表中username為Robbin2的表項(元組)
DROP FROM user WHERE username = 'Robbin2'
  • select
    • DB2將select歸到DML
    • Oracle將select單獨劃為一類(因為select操作只是對數(shù)據(jù)庫進行查詢操作,沒有實質(zhì)改變數(shù)據(jù)庫中的數(shù)據(jù))
-- 下面的語句查詢user表中的所有數(shù)據(jù)
SELECT * FROM user

DML和DDL的區(qū)別

  • DML語句支持回滾,采用事務(wù),可以保證數(shù)據(jù)的一致性;而DDL語句采用隱式commit,是不支持回滾的(一旦執(zhí)行就不可撤回)
  • 四種SQL語句

Key(鍵/碼)

  • superkey(超碼)==>一個或多個字段的集合,可唯一標識一行數(shù)據(jù)
  • candidate keys(候選碼)==>最小的超碼(即本集合為超碼,且集合內(nèi)除本身外的任何子集都不能作為超碼)
  • Primary key(主碼/主鍵)==>從候選碼中選取一個作為主碼(主鍵),可以由多個字段組成
  • Primary attribute(主屬性)==>包含于某個候選碼的屬性
  • Non-Prime attribute(非主屬性)==>不包含于某個候選碼的屬性

Note:

  • 數(shù)據(jù)表中字段的個數(shù)是有限的
  • 屬性在元組中是無序的(但是設(shè)計的時候一般把主鍵放在前面)
  • 設(shè)計字段的時候要保證字段的原子性
  • NULL==>空值表示不確定的值,不代表0,也不代表空串
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,363評論 6 532
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,497評論 3 416
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,305評論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,962評論 1 311
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,727評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,193評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,257評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,411評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,945評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,777評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,978評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,519評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,216評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,642評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,878評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,657評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,960評論 2 373

推薦閱讀更多精彩內(nèi)容