1. 程式人生 > 其它 >SQL基礎-第1章 資料庫和SQL

SQL基礎-第1章 資料庫和SQL

1-1 資料庫是什麼

我們身邊的資料庫

像這樣將大量資料儲存起來,通過計算機加工而成的可以進行高效訪問的資料集合稱為資料庫(Database, DB)。將姓名、住址、電話號碼、郵箱地址、愛好和家庭構成等資料儲存到資料庫中,就可以隨時迅速獲
取想要的資訊了。

用來管理資料庫的計算機系統稱為資料庫管理系統(Database Management System, DBMS)

為什麼DBMS那麼重要

  • 多人共享資料
  • 提供操作大量資料所需的格式
  • 實現讀寫自動化不需要程式設計能力
  • 應對突發事故

DBMS的種類

  • 層次資料庫(Hierarchical Database, HDB)
  • 關係資料庫(Relational Database, RDB)
    • Oracle Database:甲骨文公司的RDBMS
    • SQL Server:微軟公司的RDBMS
    • DB2:IBM公司的RDBMS
    • PostgreSQL: 開源的RDBMS
    • MySQL:開源的RDBMS
  • 面向物件資料庫(Object Oriented Database, OODB)
  • XML資料庫(XML Database, XMLDB)
  • 鍵值儲存系統(Key-Value Store, KVS)

1-2 資料庫的結構

RDBMS的常見系統結構

表的結構


關係資料庫以行為單位讀寫資料,一個單元格中只能輸入一個數據

1-3 SQL概要

標準SQL

國際標準化組織(ISO)為 SQL 制定了相應的標準,以此為基準的SQL 稱為標準 SQL

SQL語句及其種類

  • DDL(Data Definition Language,資料定義語言)用來建立或者刪除儲存資料用的資料庫以及資料庫中的表等物件。
    • CREATE: 建立資料庫和表等物件
    • DROP: 刪除資料庫和表等物件
    • ALTER: 修改資料庫和表等物件的結構
  • DML(Data Manipulation Language,資料操縱語言)用來查詢或者變更表中的記錄。 DML 包含以下幾種指令。
    • SELECT:查詢表中的資料
    • INSERT:向表中插入新資料
    • UPDATE:更新表中的資料
    • DELETE:刪除表中的資料
  • DCL(Data Control Language,資料控制語言)用來確認或者取消對資料庫中的資料進行的變更。除此之外,還可以對 RDBMS 的使用者是否有許可權操作資料庫中的物件(資料庫表等)進行設定。 DCL 包含以下幾種指令。
    • COMMIT: 確認對資料庫中的資料進行的變更
    • ROLLBACK: 取消對資料庫中的資料進行的變更
    • GRANT: 賦予使用者操作許可權
    • REVOKE: 取消使用者的操作許可權

SQL的基本書寫規則

  • SQL語句要以分號( ;)結尾
  • SQL語句不區分大小寫
  • 常數的書寫方式是固定的
    • 字串和日期常數需要使用單引號(')括起來。
    • 數字常數無需加註單引號(直接書寫數字即可)。
  • 單詞需要用半形空格或者換行來分隔

1-4 表的建立

表的內容的建立

資料庫的建立(CREATE-DATABASE語句)

CREATE DATABASE <資料庫名稱>;

表的建立(CREATE-TABLE語句)

CREATE TABLE <表名>(
<列名1> <資料型別> <該列所需約束>,
<列名2> <資料型別> <該列所需約束>,
<列名3> <資料型別> <該列所需約束>,
<列名4> <資料型別> <該列所需約束>,
...

<該表的約束1>,<該表的約束2>, ...);
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));

命名規則

  • 只能使用半形英文字母、數字、下劃線(_)作為資料庫、表和列的名稱
  • 名稱必須以半形英文字母開頭
  • 名稱不能重複

資料型別的指定

  • INTEGER型:用來指定儲存整數的列的資料型別(數字型),不能儲存小數。
  • CHAR型(CHARACTER):是用來指定儲存字串的列的資料型別(字元型)
  • VARCHAR型:同 CHAR 型別一樣, VARCHAR 型也是用來指定儲存字串的列的資料型別(字串型別),也可以通過括號內的數字來指定字串的長度(最大長度)
  • DATE型:用來指定儲存日期(年月日)的列的資料型別(日期型)。

約束的設定

約束是除了資料型別之外,對列中儲存的資料進行限制或者追加條件的功能

1-5 表的刪除和更新

表的刪除(DROP-TABLE語句)

DROP TABLE <表名>;
DROP TABLE Product;

刪除了的表是無法恢復的。

表定義的更新(ALTER-TABLE語句)

ALTER TABLE <表名> ADD COLUMN <列的定義>;
<!--新增一列可以儲存100位的可變長字串的product_name_pinyin列-->
ALTER TABLE Product ADD COLUMN product_name_pinyin VARCHAR(100);
<!--刪除列的ALTER TABLE語句-->
ALTER TABLE <表名> DROP COLUMN <列名>;

表定義變更之後無法恢復。

向Product表中插入資料

-- DML :插入資料
START 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', '運動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;

變更表名

RENAME TABLE Poduct to Product;

練習題

CREATE TABLE `Addressbook` (
`regist_no` int NOT NULL PRIMARY KEY COMMENT '註冊編號',
`name` VARCHAR(128) NOT NULL COMMENT '姓名',
`address` VARCHAR(256) NOT NULL COMMENT '住址',
`tel_no` CHAR(10)  COMMENT '電話號碼 ',
`mail_address` CHAR(20) COMMENT '郵箱地址'
)DEFAULT CHARSET=utf8;


ALTER TABLE `Addressbook` ADD COLUMN postal_code int(8) NOT NULL;

DROP TABLE `Addressbook`;

刪除後的表無法使用命令進行恢復。使用CREATE TABLE語句再次建立所需的表