天天看點

MySQL問答整理

1.Mysql中有哪些不同的表格?

  • MyISAM: 基于IASM代碼、可以被壓縮,支援全文搜尋,事務不安全,而且也不支援外鍵。如果事務復原将會造成不完全復原,進而不具備原子性。是以假如忽略事務以及通路并發性的話,并且需要執行大量的SELECT檢索語句的話,MyISAM将是最好的選擇
  • Heap:是MySQL中存取資料最快的表。這是因為他們使用存儲在動态記憶體中的一個散列索引,不過如果MySQL或伺服器崩潰,這些記憶體資料将會丢失
  • Merge:實際上是又一個MyISAM表的集合,合并而成的一個表,主要是為了效率的考慮,不僅僅可以提高速度、搜尋效率、修複效率而且還節省了磁盤空間。
  • InnoDB:事務安全、支援外鍵。如果需要一個事務安全的存儲引擎,建議使用它。如果你的資料執行大量的INSERT或UPDATE,出于性能方面的考慮,同樣應該使用InnoDB表。對于支援事務的InnoDB類型的表來說,影響速度的主要原因是AUTOCOMMIT預設設定是打開的,而且程式沒有顯式調用BEGIN開始事務,導緻每插入一條都自動送出,嚴重影響了速度。可以在執行sql前調用begin,多條sql形成一個事物(即使autocommit打開也可以),将大大提高性能
  • ISAM:簡稱為索引順序通路方法,由IBM開發的,用于在錄音帶等輔助存儲系統上存儲和檢索資料

2.自增ID

一張ID主鍵自增的表,當insert了10條記錄之後,删除了第8、9、10條記錄,再把Mysql重新開機,再insert一條記錄,這條記錄的ID是11還是8 

如表類型是MyISAM:11。因其把自增主鍵ID記錄到檔案中,重新開機ID不會丢失。

如表類型是InnoDB:8。。因其把自增主鍵ID記錄到記憶體中,重新開機會導緻丢失。

3.Heap特點

  • 不允許**BLOB或**TEXT字段
  • 隻允許使用=和<=>操作符來搜尋記錄(不允許<、>、<=或>=)
  • HEAP表不支援AUTO_INCREMENT
  • 索引不可為NULL

4.如何控制Heap的最大值

設定max_heap_table_size

5.MyISAM Static和MyISAM Dynamic差別

在MyISAM Static上的所有字段有固定寬度。動态MyISAM表将具有像TEXT,BLOB等字段,以适應不同長度的資料類型。

MyISAM Static在受損情況下更容易恢複。

6.BLOB和TEXT差別

BLOB是一個二進制對象,可以容納可變數量的資料。有四種類型的BLOB:TINYBLOB,BLOB,MEDIUMBLOB,LONGBLOB

它們隻能在所能容納價值的最大長度上有所不同。

TEXT是一個不區分大小寫的BLOB。四種TEXT類型:TINYTEXT,TEXT,MEDIUMTEXT,LONGTEXT

它們對應于四種BLOB類型,并具有相同的最大長度和存儲要求。

BLOB和TEXT類型之間的唯一差別在于對BLOB值進行排序和比較時區分大小寫,對TEXT值不區分大小寫。

7.Mysql中有哪幾種鎖

  • 表級鎖:開銷小,加鎖快,不會出現死鎖。鎖定粒度大,發生鎖沖突的機率最高,并發量最低
  • 行級鎖:開銷大,加鎖慢,會出現死鎖。鎖力度小,發生鎖沖突的機率小,并發度最高

MyISAM支援表鎖,InnoDB支援表鎖和行鎖,預設為行鎖

8.NOW()和CURRENT_DATE()有什麼差別?

MySQL問答整理

9.Mysql查詢是否區分大小寫?

不區分

10. 在Mysql中ENUM的用法?

CREATE TABLE test4 (  
     id BIGINT UNSIGNED  PRIMARY KEY AUTO_INCREMENT,  
     brand VARCHAR(255) NOT NULL,  
     color ENUM('RED','GREEN','BLUE')
  ) ENGINE = InnoDB;       

11.MySQL優勢?

  • Mysql是開源軟體,随時可用,無需付費。
  • Mysql是便攜式的
  • 帶有指令提示符的GUI。
  • 使用Mysql查詢浏覽器支援管理

12.如何區分FLOAT和DOUBLE

  • 浮點數以8位精度存儲在FLOAT中,并且有四個位元組。
  • 浮點數存儲在DOUBLE中,精度為18位,有八個位元組。

13.區分CHAR_LENGTH和LENGTH?

CHAR_LENGTH是字元數,而LENGTH是位元組數。Latin字元的這兩個資料是相同的,但是對于Unicode和其他編碼,它們是不同的。

14.InnoDB支援的四種事務隔離級别名稱,以及逐級之間的差別

MySQL問答整理
  • read uncommited :讀到未送出資料
  • read committed:髒讀,不可重複讀
  • repeatable read:可重讀(預設)
  • serializable :串行事物

髒讀 :一個事務讀取到另一事務未送出的更新資料 不可重複讀 : 在同一事務中,多次讀取同一資料傳回的結果有所不同, 換句話說, 後續讀取可以讀到另一事務已送出的更新資料. 相反, “可重複讀”在同一事務中多次讀取資料時, 能夠保證所讀資料一樣, 也就是後續讀取不能讀到另一事務已送出的更新資料。

幻讀 :一個事務讀到另一個事務已送出的insert資料 

15.列的字元串類型

  • SET
  • BLOB
  • ENUM
  • CHAR
  • TEXT
  • VARCHAR

16.federated表是什麼?

允許通路位于其他伺服器資料庫上的表。

17.如果一個表有一列定義為TIMESTAMP,将發生什麼?

每當行被更改時,時間戳字段将擷取目前時間戳。

18.列設定為AUTO INCREMENT時,如果在表中達到最大值,會發生什麼情況?

停止遞增,任何進一步的插入都将産生錯誤,因為密鑰已被使用。

19.怎樣才能找出最後一次插入時配置設定了哪個自動增量?

LAST_INSERT_ID()将傳回由Auto_increment配置設定的最後一個值,并且不需要指定表名稱

20.怎麼看到為表格定義的所有索引?

SHOW INDEX FROM <tablename>;

21.如何在Unix和Mysql時間戳之間進行轉換

  • UNIX_TIMESTAMP是從Mysql時間戳轉換為Unix時間戳的指令
  • FROM_UNIXTIME是從Unix時間戳轉換為Mysql時間戳的指令

舉例:

select UNIX_TIMESTAMP('2018-09-22 17:43:16') /* 1537609396 */
select FROM_UNIXTIME(1537609396)             /*2018-09-22 17:43:16 */      

22.如何在mysql中運作批處理模式

把你想要運作的指令放在一個檔案中,然後告訴mysql從檔案讀取它的輸入

shell> mysql < batch-file      

23.Mysql表中允許有多少個TRIGGERS?

在Mysql表中允許有六個觸發器,如下:

  • BEFORE INSERT
  • AFTER INSERT
  • BEFORE UPDATE
  • AFTER UPDATE
  • BEFORE DELETE
  • AFTER DELETE

24.MYSQL支援事務嗎?

  • 在 MySQL 中隻有使用了 Innodb 資料庫引擎的資料庫或表才支援事務。
  • 事務處理可以用來維護資料庫的完整性,保證成批的 SQL 語句要麼全部執行,要麼全部不執行。
  • 事務用來管理 insert,update,delete 語句

25.MYSQL資料表在什麼情況下容易損壞

伺服器突然斷電導緻資料檔案損壞。

強制關機,沒有先關閉mysql 服務等。

26.mysql有關權限的表都有哪幾個

Mysql伺服器通過權限表來控制使用者對資料庫的通路,權限表存放在mysql資料庫裡,由mysql_install_db腳本初始化。這些權限表分别user,db,table_priv,columns_priv和host。

參考

https://zhuanlan.zhihu.com/p/44627083