25期 MySQL三道常見的面試題

2022-09-19 03:30:13 字數 2333 閱讀 4041

mysql查詢字段區不區分大小寫?

答案:不區分。

如何解決需要區分英文大小寫的場景

解決方案一

mysql預設的字元檢索策略:utf8_general_ci,表示不區分大小寫。

可以使用utf8_general_cs,表示區分大小寫,也可以使用utf8_bin,表示二進位制比較,同樣也區分大小寫 。

注意:在mysql5.6.10版本中,不支援utf8_genral_cs

建立表時,直接設定表的collate屬性為utf8_general_cs或者utf8_bin;如果已經建立表,則直接修改欄位的collation屬性為utf8_general_cs或者utf8_bin。

解決方案二

直接修改sql語句,在要查詢的字段前面加上binary關鍵字。

-- 在每乙個條件前加上binary關鍵字

select * from user where binary username = 'admin' and binary password = 'admin';

-- 將引數以binary('')包圍

select * from user where username like binary('admin') and password like binary('admin');

mysql innodb的事務與日誌的實現方式

有多少種日誌

事務的4種隔離級別

事務是如何通過日誌來實現的?

事務日誌是通過redo log和innodb的儲存引擎日誌緩衝(innodb log buffer)來實現的,當開始乙個事務的時候,會記錄該事務的lsn(log sequence number)號;

當事務執行時,會往innodb儲存引擎的日誌的日誌快取裡面插入事務日誌;

當事務提交時,必須將儲存引擎的日誌緩衝寫入磁碟(通過innodb_flush_log_at_trx_commit來控制),也就是寫資料前,需要先寫日誌。這種方式稱為「預寫日誌方式」。

mysql binlog的幾種日誌錄入格式以及區別

statement:每一條會修改資料的sql都會記錄在binlog中。

優點:不需要記錄每一行的變化,減少了binlog日誌量,節約了io,提高效能。

相比row能節約多少效能 與日誌量,這個取決於應用的sql情況,正常同一條記錄修改或者插入row格式所產生的日誌量還小於statement產生的日誌量,但是考慮到如果帶條件的update操作,以及整表刪除,alter表等操作,row格式會產生大量日誌,因此在考慮是否使用row格式日誌時應該根據應用的實際情況,其所 產生的日誌量會增加多少,以及帶來的io效能問題。

缺點:由於記錄的只是執行語句,為了這些語句能在sl**e上正確執行,因此還必須記錄每條語句在執行的時候的一些相關資訊,以保證所有語句能在sl**e得到和在master端執行時候相同的結果。

另外mysql 的複製,像一些特定函式功能,sl**e可與master上要保持一致會有很多相關問題(如sleep()函式, last_insert_id(),以及user-defined functions(udf)會出現問題)。

使用以下函式的語句也無法被複製:

同時在insert …select 會產生比 rbr 更多的行級鎖。

所以row模式的日誌內容會非常清楚的記錄下 每一行資料修改的細節。而且不會出現某些特定情況下的儲存過程,或function,以及trigger的呼叫和觸發無法被正確複製的問題

缺點:所有的執行的語句當記錄到日誌中的時候,都將以每行記錄的修改來記錄,這樣可能會產生大量的日誌內容。

比如一條update語句,修改多條記錄,則binlog中每一條修改都會有記錄,這樣造成binlog日誌量會很大,特別是當執行alter table之類的語句的時候,由於表結構修改,每條記錄都發生改變,那麼該錶每一條記錄都會記錄到日誌中。

mixed: 以上兩種level的混合使用。

一般的語句修改使用statment格式儲存binlog,如一些函式,statement無法完成主從複製的操作,則採用row格式儲存binlog,mysql會根據執行的每一條具體的sql語句來區分對待記錄的日誌形式,也就是在statement和row之間選擇一種。

新版本的mysql中對row模式也做了優化,並不是所有的修改都會以row來記錄,像遇到表結構變更的時候就會以statement模式來記錄。至於update或者delete等修改資料的語句,還是會記錄所有行的變更。

吃水不忘挖井人:

10道MySQL常見面試題

1 mysql索引種類 1.普通索引 2.唯一索引 3.主鍵索引 4.組合索引 5.全文索引 2 索引在什麼情況下遵循最左字首的規則?最左字首原理的一部分,索引index1 a,b,c 只會走a a,b a,b,c 三種型別的查詢,其實這裡說的有一點問題,a,c也走,但是只走a欄位索引,不會走c欄位...

mysql有點 常見的MySQL面試點(三)

1.如何減少資料庫連線數?當資料庫連線數過多時,通過show processlist 檢視連線狀態,id等資訊,使用kill connection id中斷連線。2.mysql是怎麼保證資料不丟失的?只要保證redolog和binlog持久化磁碟,就能保證mysql資料不丟失,redolog用於宕機...

分享三道面試的演算法題

第一道 b 在北京有n個工區,形成乙個環狀,bytebus是往返在各個工區的通勤車,按工區的順序行駛,其中第 i 個工區有汽油 gas i 公升。你有一輛油箱容量無限的的bytebus,從第 i 個工區開往第 i 1 個工區需要消耗汽油 cost i 公升。你從其中的乙個工區出發,開始時油箱為空。如...