分類安裝發展順序分為:網狀型資料庫層次型資料庫關係型資料庫面向對象資料庫主流:關係型資料庫關係型資料庫事務transaction: 多個操作被當作一個整體對待• ACID: A :原子性 C :一致性 I :隔離性 D:持久性實體Entity:• 客觀存在並可以相互區分的客觀事物或抽象事件稱為實體。... ...
分類
安裝發展順序分為:
- 網狀型資料庫
- 層次型資料庫
- 關係型資料庫
- 面向對象資料庫
主流:關係型資料庫
關係型資料庫
事務transaction:
多個操作被當作一個整體對待
• ACID:
A :原子性
C :一致性
I :隔離性
D:持久性
實體Entity:
• 客觀存在並可以相互區分的客觀事物或抽象事件稱為實體。
屬性:
• 實體所具有的特征或性質
聯繫:
• 聯繫是數據之間的關聯集合,是客觀存在的應用語義鏈
聯繫的類型
• 一對一聯繫(1:1)
• 一對多聯繫(1:n)
• 多對多聯繫(m:n)
數據三要素
• 數據結構
• 數據的操作
• 數據的約束條件
約束:constraint
表中的數據要遵守的限制
• 主鍵:一個或多個欄位的組合,填入的數據必須能在本表中唯一標識本行;必須提供數據,即NOT NULL,一個表只能有一個
• 惟一鍵:一個或多個欄位的組合,填入的數據必須能在本表中唯一標識本行;允許為NULL,一個表可以存在多個
• 外鍵:一個表中的某欄位可填入的數據取決於另一個表的主鍵或唯一鍵已有的數據
• 檢查:欄位值在一定範圍內
索引:
• 將表中的一個或多個欄位中的數據複製一份另存,並且此些需要按特定次序排序存儲
關係型資料庫的常見組件
• 資料庫:database
• 表:table
行:row
列:column
• 索引:index
• 視圖:view
• 用戶:user
• 許可權:privilege
• 存儲過程:procedure,無返回值
• 存儲函數:function,有返回值
• 觸發器:trigger
• 事件調度器:event scheduler,任務計劃
資料庫對象
• 資料庫的組件(對象):
資料庫、表、索引、視圖、用戶、存儲過程、函數、觸發器、事件調度器等
• 命名規則:
必須以字母開頭
可包括數字和三個特殊字元(# _ $)
不要使用MySQL的保留字
同一database(Schema)下的對象不能同名
數據類型
MySql支持多種列類型:
• 數值類型
• 日期/時間類型
• 字元串(字元)類型
選擇正確的數據類型對於獲得高性能至關重要,三大原則:
• 更小的通常更好,儘量使用可正確存儲數據的最小數據類型
• 簡單就好,簡單數據類型的操作通常需要更少的CPU周期
• 儘量避免NULL,包含為NULL的列,對MySQL更難優化
修飾符
所有類型:
• NULL 數據列可包含NULL值
• NOT NULL 數據列不允許包含NULL值
• DEFAULT 預設值
• PRIMARY KEY 主鍵
• UNIQUE KEY 唯一鍵
• CHARACTER SET name 指定一個字元集
數值型:
• AUTO_INCREMENT 自動遞增,適用於整數類型
• UNSIGNED 無符號
SQL語句分類
• DDL: Data Defination Language 數據定義語言
CREATE,DROP,ALTER
• DML: Data Manipulation Language 數據操縱語言
INSERT,DELETE,UPDATE,SELECT
• DCL:Data Control Language 數據控制語言
GRANT,REVOKE,COMMIT,ROLLBACK
• DQL:Data Query Language 數據查詢語言
SELECT
DML語句
DML: INSERT, DELETE, UPDATE(增刪改)
INSERT:
• 一次插入一行或多行數據
UPDATE:
• 註意:一定要有限制條件,否則將修改所有行的指定欄位
• 限制條件:
WHERE
LIMIT
DELETE:
• 註意:一定要有限制條件,否則將清空表中的所有數據
• 限制條件:
WHERE
LIMIT
多表查詢
• 交叉連接:笛卡爾乘積
• 內連接:
等值連接:讓表之間的欄位以“等值”建立連接關係;
不等值連接
自然連接:去掉重覆列的等值連接
自連接
• 外連接:
左外連接:
FROM tb1 LEFT JOIN tb2 ON tb1.col=tb2.col
右外連接
FROM tb1 RIGHT JOIN tb2 ON tb1.col=tb2.col
子查詢:
• 在查詢語句嵌套著查詢語句,性能較差
• 基於某語句的查詢結果再次進行的查詢
視圖
視圖:VIEW,虛表,保存有實表的查詢結果
創建方法:
CREATE VIEW view_name [(column_list)]
AS select_statement
[WITH [CASCADED | LOCAL] CHECK OPTION]
查看視圖定義:
SHOW CREATE VIEW view_name
刪除視圖:
DROP VIEW [IF EXISTS]
view_name [, view_name] ...
[RESTRICT | CASCADE]
視圖中的數據事實上存儲於“基表”中,因此,其修改操作也會針對基表實現;
其修改操作受基表限制
函數
系統函數和自定義函數
自定義函數 (user-defined function UDF)
保存在mysql.proc表中
創建UDF:
CREATE [AGGREGATE] FUNCTION function_name(parameter_name
type,[parameter_name type,...])
RETURNS {STRING|INTEGER|REAL}
runtime_body
說明:
• 參數可以有多個,也可以沒有參數
• 必須有且只有一個返回值
查看函數列表:
SHOW FUNCTION STATUS;
查看函數定義:
SHOW CREATE FUNCTION function_name
刪除UDF:
DROP FUNCTION function_name
調用自定義函數語法:
SELECT function_name(parameter_value,...)
存儲過程
存儲過程保存在mysql.proc表中
創建存儲過程:
CREATE PROCEDURE sp_name ([ proc_parameter [,proc_parameter ...]])
• 其中:proc_parameter : [IN|OUT|INOUT] parameter_name type
routime_body
• 其中IN表示輸入參數,OUT表示輸出參數,INOUT表示既可以輸入也可以輸出;
param_name表示參數名稱;type表示參數的類型
查看存儲過程列表:
SHOW PROCEDURE STATUS
查看存儲過程定義:
SHOW CREATE PROCEDURE sp_name
調用存儲過程:
CALL sp_name ([ proc_parameter [,proc_parameter ...]])
CALL sp_name說明:當無參時,可以省略"()",當有參數時,不可省略"()”
存儲過程修改:
• ALTER語句修改存儲過程只能修改存儲過程的註釋等無關緊要的東西,不能修改
• 存儲過程體,所以要修改存儲過程,方法就是刪除重建
刪除存儲過程:
DROP PROCEDURE [IF EXISTS] sp_name
存儲過程優勢:
• 存儲過程把經常使用的SQL語句或業務邏輯封裝起來,預編譯保存在資料庫中,
• 當需要時從資料庫中直接調用,省去了編譯的過程
• 提高了運行速度
• 同時降低網路數據傳輸量
存儲過程與自定義函數的區別:
• 存儲過程實現的過程要複雜一些,而函數的針對性較強
• 存儲過程可以有多個返回值,而自定義函數只有一個返回值
• 存儲過程一般獨立的來執行,而函數往往是作為其他SQL語句的一部分來使用
流程式控制制
存儲過程和函數中可以使用流程式控制制來控制語句的執行
流程式控制制:
• IF:用來進行條件判斷。根據是否滿足條件,執行不同語句
• CASE:用來進行條件判斷,可實現比IF語句更複雜的條件判斷
• LOOP:重覆執行特定的語句,實現一個簡單的迴圈
• LEAVE:用於跳出迴圈控制
• ITERATE:跳出本次迴圈,然後直接進入下一次迴圈
• REPEAT:有條件控制的迴圈語句。當滿足特定條件時,就會跳出迴圈語句
• WHILE:有條件控制的迴圈語句
觸發器
觸發器的執行不是由程式調用,也不是由手工啟動,而是由事件來觸發、激活從而實現執行
創建觸發器:
CREATE
[DEFINER = { user | CURRENT_USER }]
TRIGGER trigger_name
trigger_time trigger_event
ON tbl_name FOR EACH ROW
trigger_body說明:
• trigger_name:觸發器的名稱
• trigger_time:{ BEFORE | AFTER },表示在事件之前或之後觸發
• trigger_event::{ INSERT |UPDATE | DELETE },觸發的具體事件
• tbl_name:該觸發器作用在表名
查看觸發器:
SHOW TRIGGERS
刪除觸發器:
DROP TRIGGER trigger_name;
Mysql客戶端
mysql客戶端可用選項:
-A, --no-auto-rehash 禁止補全
-u, --user= 用戶名,預設為root
-h, --host= 伺服器主機,預設為localhost
-p, --passowrd= 用戶密碼,建議使用-p,預設為空密碼
-P, --port= 伺服器埠
-S, --socket= 指定連接socket文件路徑
-D, --database= 指定預設資料庫
-C, –compress 啟用壓縮
-e “SQL“ 執行SQL命令
-V, –version 顯示版本
-v –verbose 顯示詳細信息
--print-defaults 獲取程式預設使用的配置
DML語言 (增刪改)
DML:INSERT(增加),DELETE(刪除),UPDATE(修改)
//預設是直接修改物理數據的,無法撤回
為了防止修改表的時候一不小心全改了,我們要加一個安全機制
cd /etc/my.cnf.d/
vim /mysql-clients.cnf
在mysql項加上safe-updates
加上後,我們在更改的時候不加where語句是不能運行的
//也可用 mysql -U
//直接定義別名就可
待續…