本文目錄一覽:
- 1、MySQL(2)數據庫對象與應用
- 2、數據庫(mysql)關鍵知識
- 3、mysql數據類型
- 4、MySQL備份數據庫時需要備份的對象有哪些?
- 5、什麼是數據庫對象
- 6、mysql數據庫schema是什麼
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、實現數據共享:數據共享包含所有用戶可同時存取數據庫中的數據,也包括用戶可以用各種方式通過接口使用數據庫,並提供數據共享。
2、減少數據的冗餘度:同文件系統相比,由於數據庫實現了數據共享,從而避免了用戶各自建立應用文件。減少了大量重複數據,減少了數據冗餘,維護了數據的一致性。
3、保持數據的獨立性:數據的獨立性包括邏輯獨立性(數據庫中數據庫的邏輯結構和應用程序相互獨立)和物理獨立性(數據物理結構的變化不影響數據的邏輯結構)。
4、數據實現集中控制:文件管理方式中,數據處於一種分散的狀態,不同的用戶或同一用戶在不同處理中其文件之間毫無關係。利用數據庫可對數據進行集中控制和管理,並通過數據模型表示各種數據的組織以及數據間的聯繫。
MySQL備份數據庫時需要備份的對象有哪些?
數據庫備份對象包含數據,表結構,創建存儲過程,日誌等。
1、 mysqldump命令備份數據
在MySQL中提供了命令行導出數據庫數據以及文件的一種方便的工具mysqldump,我們可以通過命令行直接實現數據庫內容的導出dump,首先我們簡單了解一下mysqldump命令用法:
#MySQLdump常用
mysqldump -u root -p –databases 數據庫1 數據庫2 xxx.sql
2、 mysqldump常用操作實例
2.1備份全部數據庫的數據和結構
mysqldump -uroot -p123456 -A /data/mysqlDump/mydb.sql
2.2備份全部數據庫的結構(加 -d 參數)
mysqldump -uroot -p123456 -A -d /data/mysqlDump/mydb.sql
2.3 備份全部數據庫的數據(加 -t 參數)
mysqldump -uroot -p123456 -A -t /data/mysqlDump/mydb.sql
2.4 備份單個數據庫的數據和結構(,數據庫名mydb)
mysqldump -uroot-p123456 mydb /data/mysqlDump/mydb.sql
2.5 備份單個數據庫的結構
mysqldump -uroot -p123456 mydb -d /data/mysqlDump/mydb.sql
2.6 備份單個數據庫的數據
mysqldump -uroot -p123456 mydb -t /data/mysqlDump/mydb.sql2
2.7 備份多個表的數據和結構(數據,結構的單獨備份方法與上同)
mysqldump -uroot -p123456 mydb t1 t2 /data/mysqlDump/mydb.sql
2.8 一次備份多個數據庫
mysqldump -uroot -p123456 –databases db1 db2 /data/mysqlDump/mydb.sql
什麼是數據庫對象
什麼是數據庫對象
數據庫對象是數據庫的組成部分,常見的有以下幾種:
1 表(Table )
數據庫中的表與我們日常生活中使用的表格類似,它也是由行(Row) 和列(Column)組成的。列由同類的信息組成,每列又稱為一個字段,每列的標題稱為字段名。行包括了若干列信息項。一行數據稱為一個或一條記錄,它表達有一定意義的信息組合。一個數據庫表由一條或多條記錄組成,沒有記錄的表稱為空表。每個表中通常都有一個主關鍵字,用於惟一地確定一條記錄。
2 索引(Index)
索引是根據指定的數據庫表列建立起來的順序。它提供了快速訪問數據的途徑,並且可監督表的數據,使其索引所指向的列中的數據不重複。
3 視圖(View)
視圖看上去同表似乎一模一樣,具有一組命名的字段和數據項,但它其實是一個虛擬的表,在數據庫中並不實際存。在視圖是由查詢數據庫表產生的,它限制了用戶能看到和修改的數據。由此可見,視圖可以用來控制用戶對數據的訪問,並能簡化數據的顯示,即通過視圖只顯示那些需要的數據信息。
4 圖表(Diagram)
圖表其實就是數據庫表之間的關係示意圖。利用它可以編輯表與表之間的關係。
5 缺省值(Default)
缺省值是當在表中創建列或插入數據時,對沒有指定其具體值的列或列數據項賦予事先設定好的值。
6 規則(Rule)
規則是對數據庫表中數據信息的限制。它限定的是表的列。
7 觸發器(Trigger)
觸發器是一個用戶定義的SQL事務命令的集合。當對一個表進行插入、更改、刪除時,這組命令就會自動執行。
8 存儲過程(Stored Procedure)
存儲過程是為完成特定的功能而彙集在一起的一組SQL 程序語句,經編譯後存儲在數據庫中的SQL 程序。
9 用戶(User)
所謂用戶就是有權限訪問數據庫的人。
mysql數據庫schema是什麼
schema在數據庫中表示的是數據庫對象集合,它包含了各種對像,比如:表,視圖,存儲過程,索引等等。
一般情況下一個用戶對應一個集合,為了區分不同的集合就需要給不同的集合起名字。用戶的schema名就相當於用戶名,並作為該用戶缺省schema。
所以說,schema集合看上去像用戶名。例如,當訪問一個數據表時,如果該表沒有指明屬於哪個schema,系統就會自動的加上缺省的schema。
擴展資料
Schema的創建在不同的數據庫中要創建的Schema方法是不一樣的,但是它們有一個共同的特點就是都支持CREATE SCHEMA語句。
在MySQL數據庫中,可以通過CREATE SCHEMA語句來創建一個數據庫Oracle Database在Oracle中,由於數據庫用戶已經創建了一個模式,所以,CREATE SCHEMA語句創建的是一個schema,它允許將schema同表和視圖關聯起來,並在這些多個事務中發出多個SQL語句。
SQL Server在SQL Server中,CREATE SCHEMA會按照名稱來創建一個模式,與MySQL不同,CREATE SCHEMA語句創建了一個單獨定義到數據庫的模式。和Oracle數據庫也有不同,它實際上創建了一個模式,而且一旦創建了模式,就可以往模式中添加用戶和對象。
原創文章,作者:RCYX,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/132746.html