MySQL資料庫教學

SQL-99: 綱要定義、基本限制與查詢 (1)
國立聯合大學 資訊管理學系
陳士杰老師
▊ Outlines






Database Languages
SQL資料型態
Data Query Language, DQL (資料查詢語言)
Data Definition Language, DDL (資料定義語言)
Data Manipulation Language, DML (資料處理語言)
Data Control Language, DCL (資料控制語言)
(see Chapter 8, Chapter 9; 實作講義Ch. 5~Ch. 7)
國立聯合大學 資訊管理學系
資料庫系統課程 (陳士杰)
▊ Database Languages

SQL (Structured Query Language, 結構化查詢語言) 是一種標準的
關連式資料庫語言,由IBM於1970年代所研發出來的。


SQL為用來與關連式資料庫系統對話而使用的語言

幾乎目前所有的資料庫管理系統都支援SQL
目前版本為1999年所提出的SQL/99或稱SQL/3,對物件導向DB
與分散式DB有提供支援,並加入了程式設計的功能預存程
式(stored procedure)
國立聯合大學 資訊管理學系
(早期版本:SQL/87或稱SQL/1, SQL/92或稱SQL/2)
資料庫系統課程 (陳士杰)

SQL指令的種類:

資料定義語言 (Data Definition Language, DDL)



資料處理語言 (Data Manipulation Language, DML)



用來從事資料庫的權限控管,如:GRANT, REVOKE, ALTER PASSWORD
資料管理指令 (Data Administration Commands)


用來查詢資料庫中的資料,主要指令是Select
資料控制語言 (Data Control Language, DCL)


用來操作資料庫中的資料 (即:插入(Insert),更新(Update),刪除(Delete))
針對Table內的Data
資料查詢語言 (Data Query Language, DQL)


用來宣告、建立資料庫物件 (即:建立(Create), 刪除(Drop), 更改(Alter))
即:針對Table或View的Schema
用來從事資料庫的稽核與分析
交易控制指令 (Transactional Control Commands)

用來管理資料庫的交易動作
國立聯合大學 資訊管理學系
資料庫系統課程 (陳士杰)
各家的資料庫系統對於絕大多數的國際標準
SQL語法 (ANSI SQL) 皆有支援。然而,在各資
料庫系統中還是留有一些專屬的功能。因
此,了解各家資料庫系統SQL語法與ANSI SQL
之差異點至為重要。
國立聯合大學 資訊管理學系
資料庫系統課程 (陳士杰)
▊ SQL資料型態


ANSI SQL的字串 (Character Strings)

CHAR(n):固定長度字元串 (n為字元個數)

VARCHAR(n):變動長度字元串

BIT(n):固定長度位元串 (n為位元個數)

BIT VARING(n):變動長度位元串
MySQL的字串型態:
國立聯合大學 資訊管理學系
資料庫系統課程 (陳士杰)
何謂列舉型態與集合型態?

列舉型態 ENUM:(多選一)



這種型態的欄位,其存放的值只能是列舉清單中的其中一項。
列舉清單中最多可有65535個項目,也可以有 NULL 值 。
範例:



Field1 ENUM('Am','Pm') DEFAULT ‘Am’
Field2 ENUM(‘經理’,‘工程師’,‘技術員’) DEFAULT ‘工程師’
集合型態 SET:(多選多)


SET 型態欄位可以存放清單中的多個項目。它適合應用於網頁表單
中,選擇多個項目儲存的場合。
範例:


Field1 SET(‘工程師’,‘技術員’,‘專案經理’)。
若Field1這個欄位表示 “職位”,且公司中有一位工程師同時身兼某專案
的專案經理,則在資料庫中插入此工程師之職位時之指令為:
INSERT INTO Field1 VALUES (‘工程師’,‘專案經理’)
國立聯合大學 資訊管理學系
資料庫系統課程 (陳士杰)

ANSI SQL數值串(Numeric Strings)


INT, INTEGER:整數 (4bytes; 0~ 0-4294967295 )
DEC(m,n), DECIMAL(m,n), NUMERIC(m,n):格式化數值 (m:總位數或精確度,
n:小數位數)

SMALLINT:短整數 (2bytes; 0~65535)

FLOAT:浮點數 (4bytes)

REAL:單精度實數 (4bytes)

DOUBLE PRECISION:雙精度實數 (8bytes)
國立聯合大學 資訊管理學系
資料庫系統課程 (陳士杰)

MySQL的數值串型態:
國立聯合大學 資訊管理學系
資料庫系統課程 (陳士杰)

ANSI SQL日期/時間 (Date/Time)資料型態

DATE:一般格式為 YYYY-MM-DD

TIME:一般格式為 HH:MM:SS

TIMESTAMP:時間戳記,由DATE+TIME+六位以上小數秒數



用以記錄交易進入系統的時間順序
INTERVAL:時間區間
MySQL的日期/時間型態:
國立聯合大學 資訊管理學系
資料庫系統課程 (陳士杰)
供應商(Supplier)
專案供應零件(Project_supp_Component)
專案(Project)
零件(Component)
國立聯合大學 資訊管理學系
資料庫系統課程 (陳士杰)
▊ Data Definition Language, DDL (資料定義語言) - - (1)

DDL主要有CREATE, DROP, ALTER三個指令,並可針對以下三個物
件進行操作:

資料庫 (database)

表格 (Table)

觀點 (View)
國立聯合大學 資訊管理學系
資料庫系統課程 (陳士杰)
建立、刪除資料庫

在進行Create、Drop資料庫的指令操作時,對 “資料庫” 這個
關鍵字有時是用 “Schema” 來表示。


CREATE SCHEMA (DATABASE): 建立一個新的資料庫 (資料庫綱要)

CREATE SCHEMA <資料庫名>; 或 CREATE DATABASE <資料庫名>;

例:CREATE SCHEMA/DATABASE Jacy_Database;
DROP SCHEMA (DATABASE): 刪除一個資料庫 (資料庫綱要)

DROP SCHEMA <資料庫名>; 或 DROP DATABASE <資料庫名>;

例:DROP SCHEMA/DATABASE Jacy_Database;
國立聯合大學 資訊管理學系
資料庫系統課程 (陳士杰)

在MySQL中,



建立一個新的資料庫 (資料庫綱目)

CREATE SCHEMA <資料庫名>

CREATE DATABASE <資料庫名>
刪除一個資料庫 (資料庫綱目)

DROP SCHEMA <資料庫名> [CASCADE/RESTRICT];

DROP DATABASE <資料庫名> [CASCADE/RESTRICT];
資料庫欄位及名稱有分大小寫,SQL指令並無區分。
國立聯合大學 資訊管理學系
資料庫系統課程 (陳士杰)
建立、刪除、更改表格

指定表格
中的欄位
CREATE TABLE: 建立一個新的關聯 (表格)
CREATE TABLE <table name>(

<欄位名 1> <data type> [Null/Not null] [DEFAULT <預設值>],
<欄位名 2> <data type> [Null/Not null] [DEFAULT <預設值>],
⋮
<欄位名 n> <data type> [Null/Not null] [DEFAULT <預設值>],
PRIMARY KEY(<欄位名>),
UNIQUE(<欄位名>),
FOREIGN KEY(<欄位名>) REFERENCES <表格名 欄位名> [ON DELETE…/ON
UPDATE…]
);
括號內最後一行指令不需要逗號!!
國立聯合大學 資訊管理學系
資料庫系統課程 (陳士杰)
對具有特
定用途之
欄位加以
設定

CREATE TABLE Department
(Dname CHAR(10) NOT NULL,
Dno INT NOT NULL,
Dadd CHAR(20),
PRIMARY KEY(Dno)
);

CREATE TABLE Project
(Pname CHAR(10) NOT NULL,
Pno INT NOT NULL,
PRIMARY KEY(Pno)
);
國立聯合大學 資訊管理學系
資料庫系統課程 (陳士杰)

CREATE TABLE Employee_01
( Ssn CHAR(10) NOT NULL,
Emp_id CHAR(10) NOT NULL,
Address VARCHAR(50),
Dept_id INT,
Proj_id INT,
Salary NUMERIC(8,1) NOT NULL DEFAULT 18000,
Primary Key(Ssn)
);
國立聯合大學 資訊管理學系
資料庫系統課程 (陳士杰)

CREATE TABLE Employee_02
( Ssn CHAR(10) NOT NULL,
Emp_id CHAR(10) NOT NULL,
Address VARCHAR(50),
Dept_id INT,
Proj_id INT,
Salary NUMERIC(8,1) NOT NULL DEFAULT 18000,
PRIMARY KEY(Ssn),
UNIQUE(Emp_id),
FOREIGN KEY(Proj_id) REFERENCES Project(Pno),
FOREIGN KEY(Dept_id) REFERENCES Department(Dno) ON Delete CASCADE
);
國立聯合大學 資訊管理學系
資料庫系統課程 (陳士杰)

註:設定外來鍵時,關於ON DELETE與ON UPDATE的處理動作有
以下幾種:





NO ACTION:發生違反完整性限制的操作時,外來鍵內的資料不會有
任何動作
RESTRICT:發生違反完整性限制的操作時,DBMS不允許該操作執行
CASCADE:發生違反參考完整性限制的操作時,外來鍵內的資料連帶
更新或刪除
SET NULL:發生違反參考完整性限制的操作時,外來鍵內的資料設為
空值
SET DEFAULT:發生違反完整性限制的操作時,外來鍵內的資料設為預
設值
國立聯合大學 資訊管理學系
資料庫系統課程 (陳士杰)
國立聯合大學 資訊管理學系
資料庫系統課程 (陳士杰)
國立聯合大學 資訊管理學系
資料庫系統課程 (陳士杰)
國立聯合大學 資訊管理學系
資料庫系統課程 (陳士杰)
國立聯合大學 資訊管理學系
資料庫系統課程 (陳士杰)

關於MySQL資料表格有兩種常用的類型:


MyISAM

為MySQL預設的表格類型 (當ENGINE那一行指令未填寫的話)

成熟、穩定、容易管理。若無特殊需求,應以此類型為主。
InnoDB


支援交易(Transaction)機制、外來鍵(Foreign Key)、當機復原(若檔案系統未遭
受損壞時使用)
MyISAM v.s. InnoDB

若想追求使用空間與執行效率,建議採用MyISAM

若著重交易工作、安全性考量或是可能有多人同時修改資料的情
況,則建議採用InnoDB
國立聯合大學 資訊管理學系
資料庫系統課程 (陳士杰)

在MySQL中,建立一個新的表格:

CREATE TABLE <table name>
( <attribute name 1> <data type> [<(not) null>] [<default value>],
<attribute name 2> <data type> [<(not) null>] [<default value>],
⋮
<attribute name n> <data type> [<(not) null>] [<default value>],
PRIMARY KEY(<attribute name>),
UNIQUE(<attribute name>),
FOREIGN KEY(<attribute name>) REFERENCES <table name(attribute name)>,
FOREIGN KEY(<attribute name>) REFERENCES <table name(attribute name)>
ON DELETE…/ON UPDATE…,
)ENGINE = MyISAM/InnoDB; (此行若不打,則預設為MyISAM格式)

刪除、更改一個表格可採用後面即將介紹的SQL標準語法。
國立聯合大學 資訊管理學系
資料庫系統課程 (陳士杰)

CREATE TABLE Employee_01
( Ssn CHAR(10) NOT NULL,
Emp_id CHAR(10) NOT NULL,
Address VARCHAR(50),
Dept_id INT not null,
Proj_id INT not null,
Salary NUMERIC(8,1) NOT NULL DEFAULT 18000,
Primary Key(Ssn)
);
國立聯合大學 資訊管理學系
資料庫系統課程 (陳士杰)
若表格間有外來鍵存在時之建表順序

假設有三個表:Department, Project, Employee_02。其中:

Employee_02有兩個外來鍵,分別指向Department與Project

建表順序:先建立 “被參考表格” (即:Project, Department),再建立 “參
考表格” (即:Employee_02)

在MySQL中,不論是參考表格,還是被參考表格,只要與外來鍵設定
有關的表格,皆需設定成InnoDB類型的表格。

反之,表格刪除時,先刪除參考表格,再刪除被參考表格。

若有兩個表格互相參考時,可先建立這兩個表格但不設定
外來鍵,待兩表格的所有欄位與主鍵皆設定完成後,再以
更改表格 (Alter Table) 的方式加入兩表格之外來鍵。
國立聯合大學 資訊管理學系
資料庫系統課程 (陳士杰)

CREATE TABLE Department
(Dname CHAR(10) NOT NULL,
Dno INT NOT NULL,
Dadd CHAR(20),
PRIMARY KEY(Dno)
) ENGINE=INNODB;

CREATE TABLE Project
(Pname CHAR(10) NOT NULL,
Pno INT NOT NULL,
PRIMARY KEY(Pno)
) ENGINE=INNODB;
國立聯合大學 資訊管理學系
資料庫系統課程 (陳士杰)

CREATE TABLE Employee_02
( Ssn CHAR(10) NOT NULL,
Emp_id CHAR(10) NOT NULL,
Address VARCHAR(50),
Dept_id INT,
Proj_id INT,
Salary NUMERIC(8,1) NOT NULL DEFAULT 18000,
PRIMARY KEY(Ssn),
UNIQUE(Emp_id),
FOREIGN KEY(Proj_id) REFERENCES Project(Pno),
FOREIGN KEY(Dept_id) REFERENCES Department(Dno) ON Delete CASCADE
) ENGINE=INNODB;
國立聯合大學 資訊管理學系
資料庫系統課程 (陳士杰)

DROP TABLE: 刪除一個關聯 (表格)
DROP TABLE <表格名>;

例:


DROP TABLE Employee_01;
有外來鍵之表格在刪除時,先刪除參考表格,再刪除被參考
表格。
國立聯合大學 資訊管理學系
資料庫系統課程 (陳士杰)

ALTER TABLE: 更改表格中之某欄位的基本定義與限制。包括:
增加欄位、刪除欄位、修改欄位定義或條件等。
ALTER TABLE <表格名> ADD/DROP/ALTER

最重要的幾種用法:


新增欄位:

ALTER TABLE <表格名> ADD <欄位名> <資料型態> [<(not) null> <預設值>]

例:ALTER TABLE Employee_02 ADD SEX CHAR(1);
修改欄位:

ALTER TABLE <表格名> ALTER <欄位名> <資料型態> <(not) null> <預設值>

例:ALTER TABLE Employee_02 ALTER Salary DROP DEFAULT;
國立聯合大學 資訊管理學系
資料庫系統課程 (陳士杰)


刪除欄位:

ALTER TABLE <表格名> DROP <欄位名>

例:ALTER TABLE Employee_02 DROP Address;
新增主鍵、唯一鍵、外來鍵:

ALTER TABLE <表格名> ADD PRIMARY KRY <欄位名>;

ALTER TABLE <表格名> ADD UNIQUE <欄位名>;

ALTER TABLE <表格名> ADD FOREIGN KRY <欄位名> REFERENCES <被參考表格
名> (<欄位名>)
國立聯合大學 資訊管理學系
資料庫系統課程 (陳士杰)
練習範例

請建立slide 9的四個表格。
國立聯合大學 資訊管理學系
資料庫系統課程 (陳士杰)
▊ Data Manipulation Language, DML (資料處理語言)

DML是針對關聯中的資料部份從事處理,包含Insert, Update,
Delete指令。

INSERT: 插入一筆新的紀錄到關聯中。

DELETE:根據WHERE條件刪除關聯中的紀錄。

UPDATE: 根據WHERE條件更改關聯中的屬性值。
國立聯合大學 資訊管理學系
資料庫系統課程 (陳士杰)

INSERT: 插入一筆新的紀錄到關聯中。
INSERT INTO <table name>[(attribute1, attribute2,…)] VALUES (…)
 例:假設現有一關聯表格EMPLOYEE(Ssn,

FName, LName, Bdate, Add, Tel, Salary)
INSERT INTO EMPLOYEE(Ssn, FName, LName, Salary) VALUES (‘F111111111’, ‘Jacy’, ‘Chen’, ‘100’);
//此例為插入部份欄位資料

INSERT INTO EMPLOYEE VALUES (‘F111111111’, ‘Jacy’, ‘Chen’, 1977-01-01, ‘Taipei’, NULL, ‘100’);
//此例為插入全部欄位資料
 若多個表格間有外來鍵時,先插入
“被參考表格” 的資料,再插入
“參考表格” 的資料
國立聯合大學 資訊管理學系
資料庫系統課程 (陳士杰)

DELETE:根據WHERE條件刪除關聯中的紀錄。
DELETE FROM <table name> WHERE <condition>

例:假設現有一關聯表格EMPLOYEE(Ssn, FName, LName, Bdate, Add, Tel, Salary)

DELETE FROM EMPLOYEE WHERE BDate < 1975-02-02;

DELETE FROM EMPLOYEE WHERE Ssn = ‘A1234567’;

DELETE FROM EMPLOYEE;
國立聯合大學 資訊管理學系
資料庫系統課程 (陳士杰)

UPDATE: 根據WHERE條件更改關聯中的屬性值。
UPDATE <table name> SET <attribute name>=<new value> WHERE <condition>

例:假設現有一關聯表格EMPLOYEE(Ssn, FName, LName, Bdate, Add, Tel, Salary)

UPDATE EMPLOYEE
SET Tel = ‘12365649’, Salary = ‘200’
WHERE Ssn = ‘A9876543’;
國立聯合大學 資訊管理學系
資料庫系統課程 (陳士杰)
練習範例

請將為slide 9所建立的四個空表格插入其應有的資料。
國立聯合大學 資訊管理學系
資料庫系統課程 (陳士杰)
 建立表格的建議步驟
1.
廢除表格。若不知所欲建立的表格是否已存在於DB中,先
執行此步驟,以免原表格已存在而產生錯誤。
2.
建立表格。
3.
建立個體完整性限制與定義域完整性限制。
4.
建立參考完整性限制。
5.
插入資料。
國立聯合大學 資訊管理學系
資料庫系統課程 (陳士杰)