01.概念的區分:
mysql是屬于DBMS層次的,sql語句是用于DBMS的語句。
02.sql語句詳細介紹:
SQL的概述Structure Query Language(結構化查詢語言)簡稱SQL,它被美國國家標準局(ANSI)確定為關系型數據庫語言的美國標準,后被國際化標準組織(ISO)采納為關系數據庫語言的國際標準。
數據庫管理系統(DBMS)可以通過SQL管理數據庫(DB);定義和操作數據,維護數據的完整性和安全性。
03.從數據庫開始說起,DB的設計三范式:
舉例說明3NF:
1NF
屬性不可再分,即表中的每個列都不可以再進行拆分。
如下學生信息表(student):
id、name(姓名)、sex_code(性別代號)、sex_desc(性別描述)、contact(聯系方式)
primary key(id)
如果在查詢學生表時經常用到學生的電話號,則應該將聯系方式(contact)這一列分為電話號(phone)和地址(address)兩列,這樣才符合第一范式。
修改使表滿足1NF后:
判斷表是否符合第一范式,列是否可以再分,得看需求,
如果將電話號和地址分開才能滿足查詢等需求時,那之前的表設計就是不滿足1NF的,如果電話號和地址拼接作為一個字段也可以滿足查詢、存儲等需求時,那它就滿足1NF。
2NF
在滿足1NF的前提下,表中不存在部分依賴,非主鍵列要完全依賴于主鍵。(主要是說在聯合主鍵的情況下,非主鍵列不能只依賴于主鍵的一部分)
注:聯合主鍵就是用2個或2個以上的字段組成主鍵。 用這個主鍵包含的字段作為主鍵,這個組合在數據表中是唯一,且加了主鍵索引。
如下學生成績表(score):
stu_id(學生id)、kc_id(課程id)、score(分數)、kc_name(課程名)
primary key(stu_id, kc_id)
表中主鍵為stu_id和kc_id組成的聯合主鍵。滿足1NF;
非主鍵列score完全依賴于主鍵,stu_id和kc_id兩個值才能決定score的值;
而kc_name只依賴于kc_id,與stu_id沒有依賴關系,它不完全依賴于主鍵,只依賴于主鍵的一部分,不符合2NF。
修改使表滿足2NF后:
成績表(score) ? primary key(stu_id)
課程表(kc) ? primary key(kc_id)
將原來的成績表(score)拆分為成績表(score)和課程表(kc),而且兩個表都符合2NF。
3NF:
在滿足2NF的前提下,不存在傳遞依賴。(A -> B, B -> C, A->C)
如下學生信息表(student):
primary key(id)
表中sex_desc依賴于sex_code,而sex_code依賴于id(主鍵),從而推出sex_desc依賴于id(主鍵);sex_desc不直接依賴于主鍵,而是通過依賴于非主鍵列而依賴于主鍵,屬于傳遞依賴,不符合3NF。
修改表使滿足3NF后:
學生表(student) ? primary key(id)
性別代碼表(sexcode) ? primary key(sex_code)
將原來的student表進行拆分后,兩個表都滿足3NF。
04.DB中的數據的數據類型
數據庫的數據類型
整數類型
根據數值取值范圍的不同MySQL 中的整數類型可分為5種,分別是TINYINT、SMALUNT、MEDIUMINT、INT和 BIGINT。
浮點數類型和定點數類型
在MySQL數據庫中使用浮點數和定點數來存儲小數。浮點數的類型有兩種:單精度浮點數類型(FLOAT)和雙精度浮點數類型(DOUBLE)。而定點數類型只有一種即DECIMAL類型。下圖列舉了 MySQL中浮點數和定點數類型所對應的字節大小及其取值范圍:
字符串類型
在MySQL中常用CHAR 和 VARCHAR 表示字符串。兩者不同的是:VARCHAR存儲可變長度的字符串。
當數據為CHAR(M)類型時,不管插入值的長度是實際是多少它所占用的存儲空間都是M個字節;而VARCHAR(M)所對應的數據所占用的字節數為實際長度加1
字符串類型
文本類型用于表示大文本數據,例如,文章內容、評論、詳情等,它的類型分為如下4種:
日期與時間類型
MySQL提供的表示日期和時間的數據類型分別是 :YEAR、DATE、TIME、DATETIME 和 TIMESTAMP。下圖列舉了日期和時間數據類型所對應的字節數、取值范圍、日期格式以及零值:
YEAR類型
YEAR類型用于表示年份,在MySQL中,可以使用以下三種格式指定YEAR類型 的值。
1、使用4位字符串或數字表示,范圍為’1901’—'2155’或1901—2155。例如,輸人 ‘2019’或2019插人到數據庫中的值均為2019。
2、使用兩位字符串表示,范圍為’00’—‘99’。其中,‘00’—'69’范圍的值會被轉換為 2000—2069范圍的YEAR值,‘70’—'99’范圍的值會被轉換為1970—1999范圍的YEAR 值。例如,輸人’19’插人到數據庫中的值為2019。
二進制類型
在MySQL中常用BLOB存儲二進制類型的數據,例如:圖片、PDF文檔等。BLOB類型分為如下四種: