數(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ō)明:
- 服務(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)容。
- 向服務(wù)器發(fā)出請(qǐng)求的程序(軟件),或者是安裝了該程序的設(shè)備(計(jì)算機(jī))稱為客戶端。
- 關(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ě)


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ì)象
- CREATE:創(chuàng)建數(shù)據(jù)庫(kù)和表等對(duì)象
- DROP:刪除數(shù)據(jù)庫(kù)和表等對(duì)象
- ALTER:修改數(shù)據(jù)庫(kù)和表等對(duì)象的結(jié)構(gòu)
- DML(Data Manipulation Language,數(shù)據(jù)操縱語(yǔ)言)用來(lái)查詢或者變更表中的記錄
- SELECT:查詢表中的數(shù)據(jù)
- INSERT:向表中插入新數(shù)據(jù)
- UPDATE:更新表中的數(shù)據(jù)
- 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è)定。
- COMMIT:確認(rèn)對(duì)數(shù)據(jù)庫(kù)中的數(shù)據(jù)進(jìn)行的變更
- ROLLBACK:取消對(duì)數(shù)據(jù)庫(kù)中的數(shù)據(jù)進(jìn)行的變更
- GRANT:賦予用戶操作權(quán)限
- REVOKE:取消用戶的操作權(quán)限
SQL 基本書(shū)寫(xiě)規(guī)則
- SQL 語(yǔ)句要以分號(hào)(;)結(jié)尾
- SQL 不區(qū)分關(guān)鍵字的大小寫(xiě)
- 常數(shù)的書(shū)寫(xiě)方式是固定的
- 在 SQL 語(yǔ)句中直接書(shū)寫(xiě)的字符串、日期或者數(shù)字等稱為常數(shù)
- SQL 語(yǔ)句中含有字符串的時(shí)候,需要像 'abc' 這樣,使用單引號(hào)(')將字符串括起來(lái),用來(lái)標(biāo)識(shí)這是一個(gè)字符串。
- SQL 語(yǔ)句中含有日期的時(shí)候,同樣需要使用單引號(hào)將其括起來(lái)。日期的格式有很多種('26 Jan 2010' 或者 '10/01/26' 等)
- 在 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;