SQL基礎-第1章 資料庫和SQL
阿新 • • 發佈:2021-11-19
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語句再次建立所需的表