讀書筆記: 數據庫與MySql(1)

MySql5.6從零開始學這本書比較基礎,也是博主很早以前看過的一本書。《高性能mysql》和《MySQL性能調優與架構設計》則偏向底層原理與實踐優化,需要有一定的數據庫基礎。這幾本都是非常經典的數據庫方面的書籍。 從本章開始,博主將結合這幾本書進行介紹,順便通過這次整理讓自己也回顧一遍數據庫與MySql知識。

MySql是由瑞典一家公司MySql AB開發和維護的,後來被Oracle收購。MySql5.6於2013年發佈,後來又推出了5.7和8.0版本。


1. 基本介紹

MySql安裝這裏就不介紹了(MySql5.7免安裝版設置參考),安裝好之後可以通過可視化工具來對數據庫進行相關操作,可視化工具可使用Navicat,SQLyog或者Mysql WorkBench。

1.1 SQL語言

對數據庫進行查詢和修改操作的語言叫SQL(Structured Query Language),即結構化查詢語言。它包含四個部分:
DDL,數據定義語言,如DROP、CREATE、ALTER語句。
DML,數據操作語言,如INSERT、UPDATE、DELETE語句。
DQL,數據查詢語言,SELECT語句。
DCL,數據控制語言,如GRANT、REVOKE、COMMIT、ROLLBACK語句。

1.2 存儲引擎

MySql中主要使用的存儲引擎是InnoDB和MyISAM,從5.5.5版本之後,InnoDB作爲默認的存儲引擎。
InnoDB支持事務安全,支持外鍵,支持行級加鎖,而這些都是MyISAM不支持的。

1.3 常用的SQL

(1)查看錶結構

查看錶基本結構:

DESCRIBE/DESC tableName;

查看錶詳細結構:

SHOW CREATE TABLE tableName;

(2)修改表結構

修改表名:

ALTER TABLE <舊錶名> RENAME [TO] <新表名>; 

修改字段結構:

ALTER TABLE <表名> MODIFY <字段名> <數據類型>  [約束條件]

修改字段名:

ALTER TABLE <表名> CHANGE <舊字段名> <新字段名> <新數據類型>

添加字段:

ALTER TABLE <表名> ADD <新字段名> <數據類型> [約束條件] [FIRST | AFTER 已存在字段名]

刪除字段:

ALTER TABLE <表名> DROP <字段名> 

1.4 MySql數據類型

MySql支持多種數據類型,主要有數值類型、日期/時間類型和字符串類型,如下所示:

(1) 數值類型:包括整數類型TINYINT(1字節)、SMALLINT(2字節)、MEDIUMINT(3字節)、INT(4字節)、BIGINT(8字節)。浮點數類型FLOAT和DOUBLE。定點小數類型DECIMAL

(2) 日期/時間類型:包括YEAR、TIME、DATE、DATETIMETIMESTAMP

(3) 字符串類型:包括CHAR、VARCHAR、BINARY、VARBINARY、BLOBTEXT、ENUM和SET等。

在建表過程中指定整數數據類型時一般後面會有一個數字,這個數字是顯示的寬度,與數據類型本身的取值範圍是無關的。如INT(11),INT佔據四個字節,帶符號情況下取值範圍是-2147483647~2147483647,11表示顯示11位寬度,不足時默認補上空格(也可以指定填充字符)。超過顯示寬度時只要不超過允許的取值範圍則是正常顯示。

DATETIME與TIMESTAMP

對於日期/時間格式,常用的類型是DATETIME和TIMESTAMP。兩種類型的顯示格式相同,都是YYYY-MM-DD HH:MM:SS。不同點在於對時區的處理,表示的時間範圍和佔用存儲空間上,二者對比如下:
在這裏插入圖片描述
另外注意一點,在5.6之後的版本中datetime類型可以指定默認當前系統時間,並可以在更新時自動設置當前時間。設置方式如下:

CREATE TABLE `example` (
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新時間'
)

如果不指定的話,則默認爲null,而timestamp類型不指定情況下,也會默認使用此種約束條件。

從佔用存儲空間和時區的國際化處理方面來看,建議優先使用timestamp類型(另外還有種說法,timestamp的索引速度更快)。

浮點數和定點數

浮點數FLOAT和DOUBLE類型容易產生誤差,而且在進行數學計算時容易出問題,因此在對精度有要求或者涉及數值比較和計算時,最好使用定點數DECIMAL類型。

字符串類型

字符串類型中常用的VARCHAR,BLOB和TEXT類型都是變長類型。

(1)VARCHAR在聲明時必須指定字符串長度(注意是字符長度不是字節長度)。
VARCHAR的存儲空間爲0-65535個字節,當字符串長度超過255字節時,需要2個字節來存儲字符串的實際長度,也就是說,最多隻有65533個字節用於存儲字符串。在gbk編碼下,一個字符最多佔2個字節,最大長度不能超過32766個字符。在utf8編碼下一個字符最多佔3個字節,最大長度不能超過21845個字符。

(2)TEXT和BLOB
TEXT和BLOB都用於存放大容量信息。TEXT存儲非二進制字符串,如文章內容、評論等,BLOB存儲的是二進制字符串,主要用於存放圖片、音頻信息等。BLOB列沒有字符集, TEXT列有字符集。

1.5 連接查詢

連接是關係型數據庫模型的主要特點,連接查詢是關係數據中的最主要的查詢,主要包括內連接、外連接。

內連接查詢

在內連接查詢中,只有滿足條件的記錄才能出現在結果關係中。
內連接查詢的寫法有兩種,一種是使用where子句(select … from … where),一種是使用on子句(select … from … inner join … on)。使用where子句定義連接條件比較簡單明瞭,而後一種寫法,即INNER JOIN語法是ANSI SQL的標準規範,推薦使用。

如果在一個連接查詢中,涉及到的兩個邏輯表都是同一個物理表,這種查詢稱爲自連接查詢。自連接是一種特殊的內連接。

外連接查詢

外連接分爲左外連接和右外連接。LEFT JOIN包括左表中的所有記錄和右表中符合連接條件的記錄。RIGHT JOIN包括右表中的所有記錄和左表中符合連接條件的記錄。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章