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()有什麼差別?
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支援的四種事務隔離級别名稱,以及逐級之間的差別
- 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