『壹』 什麼是資料庫對象
什麼是資料庫對象
資料庫對象是資料庫的組成部分,常見的有以下幾種:
1 表(Table )
資料庫中的表與我們日常生活中使用的表格類似,它也是由行(Row) 和列(Column)組成的。列由同類的信息組成,每列又稱為一個欄位,每列的標題稱為欄位名。行包括了若干列信息項。一行數據稱為一個或一條記錄,它表達有一定意義的信息組合。一個資料庫表由一條或多條記錄組成,沒有記錄的表稱為空表。每個表中通常都有一個主關鍵字,用於惟一地確定一條記錄。
2 索引(Index)
索引是根據指定的資料庫表列建立起來的順序。它提供了快速訪問數據的途徑,並且可監督表的數據,使其索引所指向的列中的數據不重復。
3 視圖(View)
視圖看上去同表似乎一模一樣,具有一組命名的欄位和數據項,但它其實是一個虛擬的表,在資料庫中並不實際存。在視圖是由查詢資料庫表產生的,它限制了用戶能看到和修改的數據。由此可見,視圖可以用來控制用戶對數據的訪問,並能簡化數據的顯示,即通過視圖只顯示那些需要的數據信息。
4 圖表(Diagram)
圖表其實就是資料庫表之間的關系示意圖。利用它可以編輯表與表之間的關系。
5 預設值(Default)
預設值是當在表中創建列或插入數據時,對沒有指定其具體值的列或列數據項賦予事先設定好的值。
6 規則(Rule)
規則是對資料庫表中數據信息的限制。它限定的是表的列。
7 觸發器(Trigger)
觸發器是一個用戶定義的sql事務命令的集合。當對一個表進行插入、更改、刪除時,這組命令就會自動執行。
8 存儲過程(Stored Procere)
存儲過程是為完成特定的功能而匯集在一起的一組SQL 程序語句,經編譯後存儲在資料庫中的SQL 程序。
9 用戶(User)
所謂用戶就是有許可權訪問資料庫的人。
『貳』 MySQL(2)資料庫對象與應用
庫建立好之後基本不動,和我們接觸最頻繁的是表. 建表就是聲明欄位的過程!
選擇合適的類型[速度快 減少硬碟佔用]
存儲空間,還是存儲范圍有區別?
答案: 兩者本質完全一樣 ,只是在一些特殊情況下兩者顯示有區別(只是在顯示的時候補全0的位數不一樣)
實驗
*zerofill 零填充(本欄位同時即自動帶有unsigned屬性,因為負數不能零填充)
如 數字2在固定寬度4時 零填充 即為0002
M值是一個整數(固定寬度值),只有在欄位有零填充zerofill屬性時 規定M值才有意義!
M值只是 顯示效果 ,不會影響實際數據值!
如M值為1,實際值255,一樣會顯示255
列可以聲明默認值(推薦聲明)
因為null無法和別的值比較
null = 0 返回null
null <> 0 返回null
null只能用is或is not比較 null is null當然對的。
例子:
【浮點型】有誤差,不穩定!定點數更精確。
實際測試數據
Float(M,D)
M精度(總位數,不包含點) 精度值M 影響 存儲的 值的范圍.
D標度(小數位) 小數點後有幾位(mysql比較特殊,mssql/oracle都不能指定)
testcolumn float(5,2) unsigned; 范圍0到999.99
float(5,2)的范圍-999.99到999.99
給float(5,2)這樣的欄位插入值在進位時有一些規矩:暫時沒搞清楚,不是簡單的四捨五入
插入值688.826實際是688.83 末尾6 進位
插入值688.825實際是688.83 末尾5 進位
插入值688.824實際是688.82 末尾4 捨去
插入值688.005實際是688.00
插入值688.015實際是688.01 末尾5 5前面是1 捨去
插入值688.025實際是688.02 末尾5 5前面是2 捨去
插入值688.035實際是688.03 末尾5 5前面是3 捨去
插入值688.045實際是688.04 末尾5 5前面是4 捨去
一般使用tinyint、char(1)、enum類型。
varchar(M)
M代表寬度 即可容納的【字元數】 (並不是位元組數) varchar佔用的位元組數與編碼有關:
utf-8 一個漢字3位元組英文字母1位元組
對於utf8mb4號稱佔用4位元組但是並不絕對(在utf8可以覆蓋到的范圍則仍然佔用3位元組)
utf8mb4最有優勢的應用場景:存儲emoji表情
例子:
性能太差,不推薦
MySQL在5.6.4版本之後,TimeStamp和DateTime支持到微妙
一個例子:
以如下這張表為例
show privileges 命令可以查看全部許可權
查詢時從user->db->table_pirv->columns_pirv依次驗證,如果通過則執行查詢。
本課程涉及建表SQL
場景1:歌單按時間排序
場景2:統計雲音樂創建歌單的用戶
場景3-1:統計雲音樂創建歌單的用戶列表和每人創建歌單的數量。
場景3-2:統計雲音樂創建歌單的用戶列表和每人創建歌單的數量,並且只顯示歌單數量排序大於等於2的用戶
SQL進階語法-like
場景4:查詢一個月內創建歌單(從第6行開始顯示10條記錄)
場景5:對於未錄入歌曲的歌單(trackcount = null),輸出結果時歌曲數返回0.
連接的作用是用一個SQL語句把多個表中相互關聯的數據查出來
場景6:查詢收藏「老男孩」歌單的用戶列表
子查詢:內層查詢的結果作為外層的比較條件。一般子查詢都可以轉換成連接,推薦使用連接。
場景7:查詢出沒有用戶收藏的歌單
場景8:老闆想看創建和收藏歌單的所有用戶,查詢play_list和play_fav兩表中所有的userid
實例還是上節中的那些表
場景1:查詢每張專輯總的點播次數和每首歌的平均點播次數。
場景2:查詢全部歌曲中的最大的播放次數和最小的播放次數。
場景2續:查詢播放次數最多的歌曲
count(*) 和 count(1) 基本一樣,沒有明顯的性能差異。
count(*) 和 count(song_name) 差別在於 count(song_name) 會除去song_name is null的情況
場景3:顯示每張專輯的歌曲列表
實例:查詢一個月內userid為1,3,5的用戶創建的歌單
學生表:
用於更正成績的觸發器:
『叄』 資料庫(mysql)關鍵知識
Mysql是目前互聯網使用最廣的關系資料庫,關系資料庫的本質是將問題分解為多個分類然後通過關系來查詢。 一個經典的問題是用戶借書,三張表,一個用戶,一個書,一個借書的關系表。當需要查詢某個用戶借書情況或者是書被那些人借了,就用關系查詢來實現。
關系資料庫範式
來自英文Normal form,簡稱NF。要想設計—個好的關系,必須使關系滿足一定的約束條件,滿足這些規范的資料庫是簡潔的、結構明晰的,同時,不會發生插入(insert)、刪除(delete)和更新(update)操作異常。總共有六種範式:第一範式(1NF)、第二範式(2NF)、 第三範式 (3NF)、巴斯-科德範式(BCNF)、 第四範式 (4NF)和 第五範式 (5NF,又稱完美範式)。
1NF是指資料庫表的每一列都是不可分割的原子數據項。2NF必須滿足1NF,要求資料庫表中的每行記錄必須可以被唯一地區分。3NF在2NF基礎上,任何非主 屬性 不依賴於其它非主屬性(在2NF基礎上消除傳遞依賴)。BCNF是在3NF基礎上,任何非主屬性不能對主鍵子集依賴(在3NF基礎上消除對主碼子集的依賴), 滿足BCNF不再會有任何由於函數依賴導致的異常,但是我們還可能會遇到由於多值依賴導致的異常。4NF的定義很簡單:已經是BC範式,並且不包含多值依賴關系。5NF處理的是無損連接問題,這個範式基本沒有實際意義,因為無損連接很少出現,而且難以察覺。而域鍵範式試圖定義一個終極範式,該範式考慮所有的依賴和約束類型,但是實用價值也是最小的,只存在理論研究中。
Catalog和Schema
是資料庫對象命名空間中的層次,主要用來解決命名沖突的問題。從概念上說,一個資料庫系統包含多個Catalog,每個Catalog又包含多個Schema,而每個Schema又包含多個資料庫對象(表、視圖、欄位等)。但是Mysql的資料庫名就是Schema,不支持Catalog。
Mysql的資料庫引擎主要有兩種MyISAM和InnoDB,MyISAM支持全文檢索,InnoDB支持事務。
SQL中的通配符『%』代表任意字元出現任意次數。『_』代表任意字元出現一次。SQL與正則表達式結合查詢一般用在WHERE table_name REGEXP '^12.34'。子查詢是從里到外執行。
資料庫聯結(join)涉及到外鍵,外鍵是指一個表的列是另一個表的主鍵,那麼它就是外鍵。笛卡爾積聯結(不指定聯結條件時)生成的記錄條目是單純的第一個表的行乘以第二個表的列數。用得最多的是等值聯結也叫內部聯結。
高級聯結還有自連接,是指查詢中的兩張表是同一張表,它通常作為外部語句用來代替從相同表中檢索數據時使用的子查詢。自然聯結使每個列只返回一次。外部聯結是指聯結包含了那些在相關表中沒有關聯行的行。例如列出所有產品及其訂購數量,包括沒有人訂購的產品。LEFT OUTER JOIN指選擇左邊表的所有行。
組合查詢是指採用UNION等將兩個查詢結果取並集。
視圖是查看存儲在別處的數據的一種工具,它本身並不包含數據,因此表的數據修改了,視圖返回的數據也將隨之修改,因此如果使用了復雜或嵌套視圖會對性能有較大的影響。視圖的作用之一是隱藏復雜的SQL通常會涉及到聯結查詢。
存儲過程類似於批處理,包含了一條或多條SQL語句。語法:
CREATE PROCEDURE name()
BEGIN
SQL
END
-------------------------
CALL name()//來調用存儲過程
游標有DECLARE定義,游標與存儲過程是綁定的,存儲過程處理完成,游標就會消失。游標被打開後可以使用FETCH語句訪問每一行。
觸發器是在某個時間發生時自動執行某條SQL語句。語法:
CREATE TRIGGER name AFTER INSERT ON talbe_name FOR EACH ROW
事務處理可以維護資料庫的完整性,保證批量的操作要麼完全執行,要麼完全不執行。包括事務、回退、提交、保留點幾個關鍵術語。ROLLBACK只能在一個事務處理內使用。他不能回退CREATE和DROP操作。使用COMMIT保證事務提交。復雜的事務處理需要部分提交或回退,因此我們需要使用保留點SAVEPOINT。可以使用ROLLBACK TO savepoint_name。保留點越多越好。保留點在事務執行完成後自動釋放。
『肆』 MySQL備份資料庫時需要備份的對象有哪些
資料庫備份對象包含數據,表結構,創建存儲過程,日誌等。
1、 mysqlmp命令備份數據
在MySQL中提供了命令行導出資料庫數據以及文件的一種方便的工具mysqlmp,我們可以通過命令行直接實現資料庫內容的導出mp,首先我們簡單了解一下mysqlmp命令用法:
#MySQLmp常用
mysqlmp -u root -p --databases 資料庫1 資料庫2 > xxx.sql
2、 mysqlmp常用操作實例
2.1備份全部資料庫的數據和結構
mysqlmp -uroot -p123456 -A > /data/mysqlDump/mydb.sql
2.2備份全部資料庫的結構(加 -d 參數)
mysqlmp -uroot -p123456 -A -d > /data/mysqlDump/mydb.sql
2.3 備份全部資料庫的數據(加 -t 參數)
mysqlmp -uroot -p123456 -A -t > /data/mysqlDump/mydb.sql
2.4 備份單個資料庫的數據和結構(,資料庫名mydb)
mysqlmp -uroot-p123456 mydb > /data/mysqlDump/mydb.sql
2.5 備份單個資料庫的結構
mysqlmp -uroot -p123456 mydb -d > /data/mysqlDump/mydb.sql
2.6 備份單個資料庫的數據
mysqlmp -uroot -p123456 mydb -t > /data/mysqlDump/mydb.sql2
2.7 備份多個表的數據和結構(數據,結構的單獨備份方法與上同)
mysqlmp -uroot -p123456 mydb t1 t2 > /data/mysqlDump/mydb.sql
2.8 一次備份多個資料庫
mysqlmp -uroot -p123456 --databases db1 db2 > /data/mysqlDump/mydb.sql