01: MySql简介
MySQL其他篇
目錄:
參考網站
- 1.1 數據庫介紹
- 1.2 視圖
- 1.3 觸發器
- 1.4 事物
1.1 數據庫介紹?????返回頂部
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.2 視圖?????返回頂部
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.3 觸發器?????返回頂部
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.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提交命令就行
?
轉載于:https://www.cnblogs.com/xiaonq/p/8398103.html
總結
以上是生活随笔為你收集整理的01: MySql简介的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Monkey 详解
- 下一篇: Codeforces 918D/917B