iot mysql 一文了解Mysql

2021-10-18 06:08:35 字數 3189 閱讀 5174

資料庫中的幾個基本術語?

mysql中innodb引擎支援的4種事務隔離級別

mysql中如何使用enum?

mysql中的儲存引擎

mysql中char與varchar的區別?

主鍵和候選鍵的區別?

blob和text的區別?mysql中的鎖

資料庫三正規化

什麼是資料庫?

資料庫其實顧名思義就是儲存資料的倉庫,資料庫可以儲存上億條資料,而資料的**也很多,比如系統的消費記錄,傳送的訊息記錄等文字型別的資料,當然資料也可以是圖形或者**等其他格式的資料。資料庫是按照特定的資料結構來組織,儲存和管理資料的倉庫,實際上資料庫的本質一樣是將資料儲存在磁碟中的本地檔案中,只不過對外提供了api,所以不需要我們編寫運算元據檔案的指令。而關係型資料庫使用最為廣泛的莫過於oracle、mysql以及sql server。我這裡是以mysql作為基礎進行講解。

資料庫中的幾個基本術語資料庫:儲存資料的倉庫,是一些關聯表的集合。

資料表:是資料的矩陣,可以理解為電子**。

資料表中的列:表示乙個屬性,比如使用者名稱。

資料表中的行:表示一行資料,比如使用者表中指定乙個使用者的使用者資訊。

主鍵:乙個資料表只能夠設定乙個主鍵,可以唯一標識一條資料,但是可以多個列組合當成主鍵使用。

innodb引擎支援的4種事務隔離級別

innodb引擎支援的4種事務隔離級別分別是:讀未提交、讀已提交、可重複讀、序列讀。讀未提交:允許髒讀,可以讀取其他session中未提交的髒資料。

讀已提交:不可讀取其他session尚未提交的資料,只有其他session資料已提交才能讀取到,為不重複讀。

可重複讀:該級別下可重複讀,innodb引擎預設採用可重複讀,不允許讀取還未提交的髒資料,但是可能存在innodb獨有的幻讀。

序列讀:該級別下隔離程度最高,事務只能乙個接著乙個序列執行,無法併發執行。每次序列讀都需要獲得表級共享鎖,讀寫操作都會阻塞。

幻讀事務在插入一條已經經過檢查不存在的記錄,但是插入結果是資料已經存在,之前的檢查操作如同幻影。mysql預設採用可重複讀級別,所以只可能出現幻讀的情況。

mysql中如何使用enum?

enum是乙個字串物件,可以通過enum限制欄位的取值範圍。如果插入資料時字段的取值並非可選值之一,則會空串或者null代替使用者想要插入的值。比如使用者性別我們在建表時可以使用enum限制取值範圍只能為男或女,但是插入時是保密,這時候因為不輸入性別的取值範圍,所以性別欄位會儲存成空串或者null。當然其實很不建議在資料庫使用enum限制取值範圍,因為坑其實挺多的,比如enum通過角標取值,但是角標從1開始,因為0留給空串了,再或者在enum中0和"0"是不一樣的,如果將0當做角標去操作由於enum角標從1開始會報錯,如果使用"0"去操作,最後插入的是空串,因為角標0是預留給空串的。所以說在資料庫層次不建議使用enum限制字段取值範圍。

mysql中的儲存引擎

實際上mysql支援的儲存引擎很多,mysql既可以支援ndb和innodb這種事務安全表的儲存引擎,也可以支援myisam、memory、csv、blackhole、federated等非事務安全表的儲存引擎。在mysql中主要有四種儲存引擎:innodb、myisam、memory以及blackhole。

innodb:mysql5.6預設的儲存引擎,支援外來鍵約束和行級鎖。如果資料操作除了插入和查詢之外,還包括很多更新和刪除操作,那麼innodb儲存引擎是比較合適的。innodb除了有效的降低由刪除和更新導致的鎖定,還可以確保事務的完整提交和回滾。myisam:myisam不支援事務、外來鍵,但是優勢是訪問速度快,不過由於表級別的鎖定限制了它在讀寫負載方面的效能,因此它經常應用於唯讀或者以讀為主的資料場景,並且場景需要對事務的完整性、併發性要求不高。

memory:在記憶體中儲存所有資料,memory訪問資料非常快,因為它的資料是存放在記憶體中的,並且預設使用hash索引,但是一旦服務關閉,表中的資料就會丟失。

blackhole:黑洞儲存引擎,只接收但卻並不儲存資料。對這種引擎的表的查詢常常返回乙個空集。可以應用於主從複製中的分發主庫。

mysql中char與varchar的區別?char:定長,一般用於固定長度的資料儲存。比如手機號。訪問效率高。儲存容量最多為255個字元數。

varchar:不定長,可以節省空間。varchar需要在資料之前使用一到兩個位元組儲存資料長度。最多情況下可以儲存65532個字元數。

主鍵、超鍵和候選鍵的區別?主鍵:主鍵剛才其實已經講過了,乙個資料表只能夠設定乙個主鍵,可以唯一標識一條資料,但是可以多個列組合當成主鍵使用。

超鍵:能唯一標識資料表的都可以作為超鍵。

候選鍵:不含有多餘屬性的超鍵,也就是候選鍵去掉任何乙個屬性都不再屬於超鍵。

我們舉個簡單的例子助於理解:

學生表中每個學生都有學號,性別,年齡,姓名,專業。顯而易見的學號是作為主鍵存在的,在學生表中是不允許重複的,,,,這些組合都可以唯一標識乙個學生的存在,所以這些組合都可以成為超鍵,但是,這兩個組合去掉姓名或者性別只留下乙個學號一樣可以標識乙個學生的存在,所以這兩個組合不是候選鍵。

mysql中的鎖

mysql鎖機制其實相對其他資料庫更為簡單,myisam儲存引擎以及memory儲存引擎支援表級鎖,innodb儲存引擎支援行級鎖和表級鎖,但是預設情況下是採用行級鎖,也就是我們常說的共享鎖和互斥鎖。從鎖的角度來說,表級鎖適合查詢為主,行級鎖更適合有大量按索引條件併發更新資料。當然最重要的是一定要防止出現死鎖現象。

資料庫三正規化第一正規化:屬性不可分割。

第二正規化:每個資料表必須擁有主鍵,並且唯一標識整個資料表。

第三正規化:消除資料冗餘,資訊只在乙個資料表儲存,不能儲存在多張資料表。然後通過外來鍵進行關聯。

blob和text的區別?text:text是非二進位制字串,並且需要指定字符集,並按照該字符集進行校驗和排序。只能儲存純文字,可以看作是varchar在長度不足時的擴充套件。

blob:blob儲存的是二進位制資料,因此無需字符集校驗,blob除了儲存文字資訊外,由於二進位制儲存格式,所以還可以儲存等資訊,blob可以看作是varbinary在長度不足時的擴充套件。

相同點都不允許有預設值。

儲存或檢索資料不刪除尾部空格。

索引在blob或者text上必須執行索引字首的長度。

不同點text大小寫不敏感,而blob排序和比較以大小寫敏感的方式執行。

text是非二進位制字串,blob儲存的是二進位制資料。

text需要指定字符集,blob無需字符集校驗。

一文了解Flink State Backends

當我們使用flink進行流式計算時,通常會產生各種形式的中間結果,我們稱之為state。有狀態產生,就必然涉及到狀態的儲存,那麼flink中定義了哪些形式的狀態儲存呢,下面一一給大家介紹一下。顧名思義,memorystatebackend狀態後端是將狀態資料以object的形式存放於j a heap...

一文了解Perl語言

perl,一種功能豐富的計算機程式語言,執行在超過100種計算機平台上,適用廣泛,從大型機到便攜裝置,從快速原型建立到大規模可擴充套件開發。1 perl最初的設計者為拉里 沃爾 larry wall 於1987年12月18日發表。現在的版本為perl 6,於2015年12月25日更新。perl借取了...

一文了解Perl語言

perl,一種功能豐富的計算機程式語言,執行在超過100種計算機平台上,適用廣泛,從大型機到便攜裝置,從快速原型建立到大規模可擴充套件開發。1 perl最初的設計者為拉里 沃爾 larry wall 於1987年12月18日發表。現在的版本為perl 6,於2015年12月25日更新。perl借取了...