一,數據庫介紹
1. 什么是數據庫?
1. 數據庫(Database)是按照數據結構來組織、存儲和管理數據的倉庫,每個數據庫都有一個或多個不同的API(接口)用於創建,
訪問,管理,搜索和復制所保存的數據
2. 我們也可以將數據存儲在文件中,但是在文件中讀寫數據速度相對較慢。所以,現在我們使用關系型數據庫管理系統
(RDBMS)來存儲和管理的大數據量
3. 所謂的關系型數據庫,是建立在關系模型基礎上的數據庫,借助於集合代數等數學概念和方法來處理數據庫中的數據
4.RDBMS即關系數據庫管理系統(Relational Database Management System)的特點:
1)數據以表格的形式出現
2)每行為各種記錄名稱
3)每列為記錄名稱所對應的數據域
4)許多的行和列組成一張表單
5)若干的表單組成database
2. RDBMS 術語
1. 數據庫: 數據庫是一些關聯表的集合。
2. 數據表: 表是數據的矩陣。在一個數據庫中的表看起來像一個簡單的電子表格
3. 列: 一列(數據元素) 包含了相同的數據, 例如郵政編碼的數據。
4. 行: 一行(=元組,或記錄)是一組相關的數據,例如一條用戶訂閱的數據。
5. 冗余: 存儲兩倍數據,冗余可以使系統速度更快
1)查詢時可能經常需要在多個表之間進行連接查詢;而進行連接操作會降低查詢速度
2)學生的信息存儲在student表中,院系信息存儲在department表中,如果要查詢一個學生所在系的名
稱,必須從student表中查找學生所在院系的編號,然后根據這個編號去department查找系的名稱
3)如果經常需要進行這個操作時,連接查詢會浪費很多的時間,因此可以在student表中增加一個冗余
字段dept_name,該字段用來存儲學生所在院系的名稱(這樣就不用每次都進行連接操作了)
6. 主鍵: 主鍵是唯一的。一個數據表中只能包含一個主鍵。你可以使用主鍵來查詢數據
7. 外鍵: 外鍵用於關聯兩個表(兩個表通過都有的一個字段連接起來了)
8. 復合鍵: 復合鍵(組合鍵)將多個列作為一個索引鍵,一般用於復合索引
9. 索引: 使用索引可快速訪問數據庫表中的特定信息。索引是對數據庫表中一列或多列的值進行排序的一種結構。類似於書籍的目錄。
1) 當某個字段設置為索引后,就會將此字段中所有值對應自己的md5
2) 當從數據庫查詢時可以通過二分法等算法快速查找到這個條目
10. 參照完整性: 參照的完整性要求關系中不允許引用不存在的實體
3. Mysql數據庫特點
1. Mysql是最流行的關系型數據庫管理系統,在WEB應用方面MySQL是最好的RDBMS(Relational Database
Management System:關系數據庫管理系統)應用軟件之一
2. 由瑞典MySQL AB公司開發,目前屬於Oracle公司
3. MySQL是一種關聯數據庫管理系統,關聯數據庫將數據保存在不同的表中,而不是將所有數據放在一個大
倉庫內,這樣就增加了速度並提高了靈活性
1) Mysql是開源的,所以你不需要支付額外的費用
2) Mysql支持大型的數據庫。可以處理擁有上千萬條記錄的大型數據庫
3) MySQL使用標准的SQL數據語言形式
4) Mysql對PHP有很好的支持,PHP是目前最流行的Web開發語言
5) MySQL支持大型數據庫,支持5000萬條記錄的數據倉庫,32位系統表文件最大可支持4GB,64位系統支持最大的表文件為8TB
6) Mysql是可以定制的,采用了GPL協議,你可以修改源碼來開發自己的Mysql系統
4. 主鍵、外鍵、索引比較
1. 主鍵與外鍵區別
1. 主鍵是能確定一條記錄的唯一標識,比如,一條記錄包括身份正號,姓名,年齡。
身份證號是唯一能確定你這個人的,其他都可能有重復,所以,身份證號是主鍵。
2. 外鍵用於與另一張表的關聯。是能確定另一張表記錄的字段,用於保持數據的一致性。
比如,A表中的一個字段,是B表的主鍵,那他就可以是A表的外鍵
2. 主鍵與唯一索引區別
1. 主鍵是一種約束,唯一索引是一種索引,兩者在本質上是不同的。
2. 主鍵創建后一定包含一個唯一性索引,唯一性索引並不一定就是主鍵。
3. 唯一性索引列允許空值,而主鍵列不允許為空值。
4. 主鍵可以被其他表引用為外鍵,而唯一索引不能。
5. 一個表最多只能創建一個主鍵,但可以創建多個唯一索引。
6. 主鍵更適合那些不容易更改的唯一標識,如自動遞增列、身份證號等。
二,視圖
1. 什么是視圖
1)視圖是一個虛擬表(非真實存在),其本質是【根據SQL語句獲取動態的數據集,並為其命名】
2)用戶使用時只需使用視圖【名稱】即可獲取結果集,並可以將其當作表來使用
3)視圖通常用在對某個結果查詢的非常頻繁,那么就可以使用視圖虛擬出一張表,將這個查詢結果放到這個視
中,以后我們僅僅對這個視圖就行查詢是對上面結果的查詢
4)如果原表數據改變那么視圖中的值也會隨着改變,視圖中的數據修改也會影響原表中數據
5)一下幾種情況視圖中數據無法改變:
a. 視圖中的列不在原表中(比如視圖中查詢時取得別名列:商品平均價格)
b. 視圖中的那個數據對應原表中多個數據時也無法修改
2、為什么要有視圖
1)可以簡化查詢
2)可以進行權限限制(將一部分列放到視圖中讓其他人操作)
3)大數據分表時可以用到
3、視圖例子
1)比如現在我們有一張商品表,表中有許多字段,現在我們需要經常查詢商品價格和名稱這兩個字段
2)並且我們只想顯示這個表中價格大於100的所有商品
3)那么我們就可以創建一個視圖good_price,然后將需要查的指定信息存儲到這個視圖中
#1 創建視圖good_price
create view good_price as select name,price from goods where price > 100;
#2 修改視圖
alter view good_price as select name,price from goods where price >300;
#3 刪除視圖
drop view good_price;
三,觸發器
1、什么是觸發器
1)對某個表進行【增/刪/改】操作的前后如果希望觸發某個特定的行為時,可以使用觸發器
2)觸發器用於定制用戶對表的行進行【增/刪/改】前后的行為
3)觸發器只能對永久表使用,不能對臨時表 創建
4)MySQL對同一表相同觸發時間的相同觸發事件,只能定義一個觸發器
2、創建觸發器使用語法
1. 創建觸發器基本語法
Create trigger 觸發器名
{before | after} #insert,update,delete之前還是之后觸發
{insert | update | delete} #觸發的事件是什么
On 表明 for each row 要出發的SQL語句:
2. 觸發器使用舉例
說明:創建一個觸發器t1每次向data表中插入一條數據后就計算一下插入后的新表中數據條目數放到total表
Create trigger t1 #創建觸發器名稱是:t1
after #在下面插入語句insert之后執行這個觸發器
insert #指定只有當執行insert語句才會觸發
on data for each row #指定是對表data執行每行都會執行觸發器update操作
update total set count=char_length(NEW.name) #指定觸發的事件即執行這條SQL語句
3、刪除觸發器
DROP TRIGGER t1;
4、使用觸發器
觸發器無法由用戶直接調用,而是由於對表的【增/刪/改】操作被動引發的
四,事務
1.事務的定義 (作用是可以撤銷begin后面執行的命令)
1)MySQL 事務主要用於處理操作量大,復雜度高的數據。
2)在人員管理系統中,你刪除一個人員,你即需要刪除人員的基本資料,也要刪除和該人員相關的信息,如信箱,文章等等
3)這樣,這些數據庫操作語句就構成一個事務!
4)在MySQL中只有使用了Innodb數據庫引擎的數據庫或表才支持事務
5)事務處理可以用來維護數據庫的完整性,保證成批的SQL語句要么全部執行,要么全部不執行
6)事務用來管理insert,update,delete語句
2、事務是必須滿足4個條件
1、原子性:一組事務,要么成功;要么撤回
2、穩定性 : 有非法數據(外鍵約束之類),事務撤回
3、隔離性:事務獨立運行。一個事務處理后的結果,影響了其他事務,那么其他事務會撤回
4、可靠性:軟、硬件崩潰后,InnoDB數據表驅動會利用日志文件重構修改。可靠性和高速度不可兼得,
innodb_flush_log_at_trx_commit選項 決定什么時候吧事務保存到日志里。
3、使用事務手動撤銷對MySQL的操作
mysql> begin; #開始一個事務
mysql> insert into student(name,age,register_data) values("wangwu",99,"2016-06-20"); #執行一條命令
mysql>rollback; #回滾 , 這樣數據是不會寫入的
mysql> commit; #執行commit后命令執行結果是正真的寫入硬盤了(rollback也無法撤回)
注:當然如果上面的數據沒問題,就輸入commit提交命令就行