01 - 數(shù)據(jù)庫(kù)和 SQL

數(shù)據(jù)庫(kù)簡(jiǎn)介

數(shù)據(jù)庫(kù)是什么?

  • 數(shù)據(jù)庫(kù)是將大量數(shù)據(jù)保存起來(lái),通過(guò)計(jì)算機(jī)加工而成的可以進(jìn)行高效訪問(wèn)的數(shù)據(jù)集合。
  • 用來(lái)管理數(shù)據(jù)庫(kù)的計(jì)算機(jī)系統(tǒng)稱為數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS)。
  • 通過(guò)使用DBMS,多個(gè)用戶便可安全、簡(jiǎn)單地操作大量數(shù)據(jù)。
  • 數(shù)據(jù)庫(kù)有很多種類,SQL語(yǔ)言是來(lái)操作關(guān)系數(shù)據(jù)庫(kù)。
  • 關(guān)系數(shù)據(jù)庫(kù)通過(guò)關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)(RDBMS)進(jìn)行管理。

數(shù)據(jù)庫(kù)(DB)
數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS)


DBMS 分類

  • 層次數(shù)據(jù)庫(kù)(Hierarchical Database,HDB)

把數(shù)據(jù)通過(guò)層次結(jié)構(gòu)(樹(shù)形結(jié)構(gòu))的方式表現(xiàn)出來(lái)


  • 關(guān)系數(shù)據(jù)庫(kù)(Relational Database,RDB)

采用由行和列組成的二維表來(lái)管理數(shù)據(jù),使用專門的 SQL(Structured Query Language,結(jié)構(gòu)化查詢語(yǔ)言)對(duì)數(shù)據(jù)進(jìn)行操作。

這種類型的 DBMS 稱為關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)(Relational Database Management System,RDBMS)具有代表性的 RDBMS 有如下 5 種:
Oracle Database :甲骨文公司的 RDBMS
SQL Server :微軟公司的 RDBMS
DB2 :IBM 公司的 RDBMS
PostgreSQL :開(kāi)源的 RDBMS
MySQL :開(kāi)源的 RDBMS


  • 面向?qū)ο髷?shù)據(jù)庫(kù)(Object Oriented Database,OODB)

把數(shù)據(jù)以及對(duì)數(shù)據(jù)的操作集合起來(lái)以對(duì)象為單位進(jìn)行管理


  • XML 數(shù)據(jù)庫(kù)(XML Database,XMLDB)

XML{4[eXtensible Markup Language 的縮寫(xiě),一種使用 HTML 那樣的標(biāo)簽來(lái)表現(xiàn)數(shù)據(jù)結(jié)構(gòu)的語(yǔ)言。以 <name>鈴木</name> 這樣的形式來(lái)保存數(shù)據(jù)。]} 作為在網(wǎng)絡(luò)上進(jìn)行交互的數(shù)據(jù)的形式逐漸普及起來(lái)。XML 數(shù)據(jù)庫(kù)可以對(duì) XML 形式的大量數(shù)據(jù)進(jìn)行高速處理。


  • 鍵值存儲(chǔ)系統(tǒng)(Key-Value Store,KVS)

這是一種單純用來(lái)保存查詢所使用的主鍵(Key)和值(Value)的組合的數(shù)據(jù)庫(kù)。


數(shù)據(jù)庫(kù)結(jié)構(gòu)

  • 使用 RDBMS 時(shí),最常見(jiàn)的系統(tǒng)結(jié)構(gòu)就是客戶端 / 服務(wù)器類型(C/S 類型)這種結(jié)構(gòu)。

說(shuō)明:

  1. 服務(wù)器指的是用來(lái)接收其他程序發(fā)出的請(qǐng)求,并對(duì)該請(qǐng)求進(jìn)行相應(yīng)處理的程序(軟件),或者是安裝了此類程序的設(shè)備(計(jì)算機(jī))。在計(jì)算機(jī)上持續(xù)執(zhí)行處理,并等待接收下一條請(qǐng)求。RDBMS 也是一種服務(wù)器,它能夠從保存在硬盤上的數(shù)據(jù)庫(kù)中讀取數(shù)據(jù)并返回,還可以把數(shù)據(jù)變更為指定內(nèi)容。
  2. 向服務(wù)器發(fā)出請(qǐng)求的程序(軟件),或者是安裝了該程序的設(shè)備(計(jì)算機(jī))稱為客戶端。
  3. 關(guān)系數(shù)據(jù)庫(kù)通過(guò)類似 Excel 工作表那樣的、由行和列組成的二維表來(lái)管理數(shù)據(jù)。用來(lái)管理數(shù)據(jù)的二維表在關(guān)系數(shù)據(jù)庫(kù)中簡(jiǎn)稱為表。
    3-1. 表的列(垂直方向)稱為字段,它代表了保存在表中的數(shù)據(jù)項(xiàng)目
    3-2. 表的行(水平方向)稱為記錄,它相當(dāng)于一條數(shù)據(jù)。關(guān)系數(shù)據(jù)庫(kù)必須以行為單位進(jìn)行數(shù)據(jù)讀寫(xiě)
1-1.png
1-2.png

SQL語(yǔ)句的分類

SQL 用關(guān)鍵字、表名、列名等組合而成的一條語(yǔ)句(SQL 語(yǔ)句)來(lái)描述操作的內(nèi)容。關(guān)鍵字是指那些含義或使用方法已事先定義好的英語(yǔ)單詞,存在包含“對(duì)表進(jìn)行查詢”或者“參考這個(gè)表”等各種意義的關(guān)鍵字。

  • DDL(Data Definition Language,數(shù)據(jù)定義語(yǔ)言)用來(lái)創(chuàng)建或者刪除存儲(chǔ)數(shù)據(jù)用的數(shù)據(jù)庫(kù)以及數(shù)據(jù)庫(kù)中的表等對(duì)象
  1. CREATE:創(chuàng)建數(shù)據(jù)庫(kù)和表等對(duì)象
  2. DROP:刪除數(shù)據(jù)庫(kù)和表等對(duì)象
  3. ALTER:修改數(shù)據(jù)庫(kù)和表等對(duì)象的結(jié)構(gòu)
  • DML(Data Manipulation Language,數(shù)據(jù)操縱語(yǔ)言)用來(lái)查詢或者變更表中的記錄
  1. SELECT:查詢表中的數(shù)據(jù)
  2. INSERT:向表中插入新數(shù)據(jù)
  3. UPDATE:更新表中的數(shù)據(jù)
  4. DELETE:刪除表中的數(shù)據(jù)
  • DCL(Data Control Language,數(shù)據(jù)控制語(yǔ)言)用來(lái)確認(rèn)或者取消對(duì)數(shù)據(jù)庫(kù)中的數(shù)據(jù)進(jìn)行的變更。除此之外,還可以對(duì) RDBMS 的用戶是否有權(quán)限操作數(shù)據(jù)庫(kù)中的對(duì)象(數(shù)據(jù)庫(kù)表等)進(jìn)行設(shè)定。
  1. COMMIT:確認(rèn)對(duì)數(shù)據(jù)庫(kù)中的數(shù)據(jù)進(jìn)行的變更
  2. ROLLBACK:取消對(duì)數(shù)據(jù)庫(kù)中的數(shù)據(jù)進(jìn)行的變更
  3. GRANT:賦予用戶操作權(quán)限
  4. REVOKE:取消用戶的操作權(quán)限

SQL 基本書(shū)寫(xiě)規(guī)則

  • SQL 語(yǔ)句要以分號(hào)(;)結(jié)尾
  • SQL 不區(qū)分關(guān)鍵字的大小寫(xiě)
  • 常數(shù)的書(shū)寫(xiě)方式是固定的
  1. 在 SQL 語(yǔ)句中直接書(shū)寫(xiě)的字符串、日期或者數(shù)字等稱為常數(shù)
  2. SQL 語(yǔ)句中含有字符串的時(shí)候,需要像 'abc' 這樣,使用單引號(hào)(')將字符串括起來(lái),用來(lái)標(biāo)識(shí)這是一個(gè)字符串。
  3. SQL 語(yǔ)句中含有日期的時(shí)候,同樣需要使用單引號(hào)將其括起來(lái)。日期的格式有很多種('26 Jan 2010' 或者 '10/01/26' 等)
  4. 在 SQL 語(yǔ)句中書(shū)寫(xiě)數(shù)字的時(shí)候,不需要使用任何符號(hào)標(biāo)識(shí),直接寫(xiě)成 1000 這樣的數(shù)字即可
  • SQL 語(yǔ)句的單詞之間需使用半角空格或換行符來(lái)進(jìn)行分隔。

代碼清單

創(chuàng)建 Product 表的CREATE TABLE 語(yǔ)句

CREATE TABLE Product
(
    product_id     CHAR(4)      NOT NULL,
    product_name   VARCHAR(100) NOT NULL,
    product_type   VARCHAR(32)  NOT NULL,
    sale_price     INTEGER,
    purchase_price INTEGER,
    regist_date    DATE,
    PRIMARY KEY (product_id)
);

刪除 Product 表

DROP TABLE Product;

添加一列可以存儲(chǔ)100位的可變長(zhǎng)字符串的product_name_pinyin列

-- DB2  PostgreSQL  MySQL
ALTER TABLE Product ADD COLUMN product_name_pinyin VARCHAR(100);

-- Oracle
ALTER TABLE Product ADD (product_name_pinyin VARCHAR2(100));

-- SQL Server
ALTER TABLE Product ADD product_name_pinyin VARCHAR(100);

刪除 product_name_pinyin 列

SQL Server  DB2  PostgreSQL  MySQL
ALTER TABLE Product DROP COLUMN product_name_pinyin;

Oracle
ALTER TABLE Product DROP (product_name_pinyin);

向 Product 表中插入數(shù)據(jù)的 SQL 語(yǔ)句

-- SQL Server  PostgreSQL
-- DML :插入數(shù)據(jù)
BEGIN TRANSACTION;

INSERT INTO Product VALUES ('0001', 'T恤衫', '衣服', 1000, 500, '2009-09-20');
INSERT INTO Product VALUES ('0002', '打孔器', '辦公用品', 500, 320, '2009-09-11');
INSERT INTO Product VALUES ('0003', '運(yùn)動(dòng)T恤', '衣服', 4000, 2800, NULL);
INSERT INTO Product VALUES ('0004', '菜刀', '廚房用具', 3000, 2800, '2009-09-20');
INSERT INTO Product VALUES ('0005', '高壓鍋', '廚房用具', 6800, 5000, '2009-01-15');
INSERT INTO Product VALUES ('0006', '叉子', '廚房用具', 500, NULL, '2009-09-20');
INSERT INTO Product VALUES ('0007', '擦菜板', '廚房用具', 880, 790, '2008-04-28');
INSERT INTO Product VALUES ('0008', '圓珠筆', '辦公用品', 100, NULL,'2009-11-11');

COMMIT;

變更表名

Oracle  PostgreSQL
ALTER TABLE Poduct RENAME TO Product;

DB2
RENAME TABLE Poduct TO Product;

SQL Server
sp_rename 'Poduct', 'Product';

MySQL
RENAME TABLE Poduct to Product;
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • ORA-00001: 違反唯一約束條件 (.) 錯(cuò)誤說(shuō)明:當(dāng)在唯一索引所對(duì)應(yīng)的列上鍵入重復(fù)值時(shí),會(huì)觸發(fā)此異常。 O...
    我想起個(gè)好名字閱讀 5,945評(píng)論 0 9
  • http://www.itpub.net/thread-1393352-1-1.htmlhi,看到你關(guān)于數(shù)據(jù)庫(kù)存儲(chǔ)...
    yahzon閱讀 665評(píng)論 1 0
  • 數(shù)據(jù)庫(kù)概述、數(shù)據(jù)庫(kù)服務(wù)器和客戶端安裝 2.1數(shù)據(jù)庫(kù)概述 學(xué)習(xí)目標(biāo) 1. 能夠說(shuō)出什么是數(shù)據(jù) 2. 能夠說(shuō)出為什...
    Cestine閱讀 889評(píng)論 0 7
  • ORACLE自學(xué)教程 --create tabletestone ( id number, --序號(hào)usernam...
    落葉寂聊閱讀 1,241評(píng)論 0 0
  • 我們夫婦倆年歲大了,毎年需做一次體檢,朋友安排我們?nèi)シ钯t南橋鎮(zhèn)社區(qū)衛(wèi)生服務(wù)中心去做B超,我有點(diǎn)疑惑,我想:“上...
    可燃上海閱讀 1,666評(píng)論 6 14

友情鏈接更多精彩內(nèi)容