mysql试题错误记录字段_MySQL这三道常见的面试题,你有被问过吗?
據(jù)群友面試反饋,整理了3道MySQL面試題,對(duì)很多人可能是小菜一碟,對(duì)這些熟悉,有更好的理解的話,可以留言補(bǔ)充,不斷完善我們的題庫(kù)。MySQL查詢(xún)字段區(qū)不區(qū)分大小寫(xiě)?
MySQL innodb的事務(wù)與日志的實(shí)現(xiàn)方式
MySQL binlog的幾種日志錄入格式以及區(qū)別
MySQL查詢(xún)字段區(qū)不區(qū)分大小寫(xiě)?
答案是不區(qū)分
如何解決需要區(qū)分英文大小寫(xiě)的場(chǎng)景
例如登錄用戶(hù)為admin,此時(shí)填寫(xiě)ADMIN也能登錄,如果用戶(hù)名需要區(qū)分大小寫(xiě),你的做法是什么?
解決方案一
MySQL默認(rèn)的字符檢索策略:utf8_general_ci,表示不區(qū)分大小寫(xiě)。
可以使用utf8_general_cs,表示區(qū)分大小寫(xiě),也可以使用utf8_bin,表示二進(jìn)制比較,同樣也區(qū)分大小寫(xiě) 。注意:在Mysql5.6.10版本中,不支持utf8_genral_cs
創(chuàng)建表時(shí),直接設(shè)置表的collate屬性為utf8_general_cs或者utf8_bin;如果已經(jīng)創(chuàng)建表,則直接修改字段的Collation屬性為utf8_general_cs或者utf8_bin。
-- 創(chuàng)建表:
CREATE TABLE testt(
id INT PRIMARY KEY,
name VARCHAR(32) NOT NULL
) ENGINE = INNODB COLLATE =utf8_bin;
-- 修改表結(jié)構(gòu)的Collation屬性
ALTER TABLE TABLENAME MODIFY COLUMN COLUMNNAME VARCHAR(50) BINARY CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL;
解決方案二
直接修改sql語(yǔ)句,在要查詢(xún)的字段前面加上binary關(guān)鍵字
-- 在每一個(gè)條件前加上binary關(guān)鍵字
select * from user where binary username = 'admin' and binary password = 'admin';
-- 將參數(shù)以binary('')包圍
select * from user where username like binary('admin') and password like binary('admin');
MySQL innodb的事務(wù)與日志的實(shí)現(xiàn)方式
有多少種日志錯(cuò)誤日志:記錄出錯(cuò)信息,也記錄一些警告信息或者正確的信息。
查詢(xún)?nèi)罩?#xff1a;記錄所有對(duì)數(shù)據(jù)庫(kù)請(qǐng)求的信息,不論這些請(qǐng)求是否得到了正確的執(zhí)行。
慢查詢(xún)?nèi)罩?#xff1a;設(shè)置一個(gè)閾值,將運(yùn)行時(shí)間超過(guò)該值的所有SQL語(yǔ)句都記錄到慢查詢(xún)的日志文件中。
二進(jìn)制日志:記錄對(duì)數(shù)據(jù)庫(kù)執(zhí)行更改的所有操作。
中繼日志:中繼日志也是二進(jìn)制日志,用來(lái)給slave 庫(kù)恢復(fù)
事務(wù)日志:重做日志redo和回滾日志undo
事物的4種隔離級(jí)別讀未提交(RU)
讀已提交(RC)
可重復(fù)讀(RR)
串行
事務(wù)是如何通過(guò)日志來(lái)實(shí)現(xiàn)的,說(shuō)得越深入越好
事務(wù)日志是通過(guò)redo和innodb的存儲(chǔ)引擎日志緩沖(Innodb log buffer)來(lái)實(shí)現(xiàn)的,當(dāng)開(kāi)始一個(gè)事務(wù)的時(shí)候,會(huì)記錄該事務(wù)的lsn(log sequence number)號(hào);
當(dāng)事務(wù)執(zhí)行時(shí),會(huì)往InnoDB存儲(chǔ)引擎的日志的日志緩存里面插入事務(wù)日志;
當(dāng)事務(wù)提交時(shí),必須將存儲(chǔ)引擎的日志緩沖寫(xiě)入磁盤(pán)(通過(guò)innodb_flush_log_at_trx_commit來(lái)控制),也就是寫(xiě)數(shù)據(jù)前,需要先寫(xiě)日志。這種方式稱(chēng)為“預(yù)寫(xiě)日志方式”
MySQL binlog的幾種日志錄入格式以及區(qū)別
Statement:每一條會(huì)修改數(shù)據(jù)的sql都會(huì)記錄在binlog中。
優(yōu)點(diǎn):不需要記錄每一行的變化,減少了binlog日志量,節(jié)約了IO,提高性能。
相比row能節(jié)約多少性能 與日志量,這個(gè)取決于應(yīng)用的SQL情況,正常同一條記錄修改或者插入row格式所產(chǎn)生的日志量還小于Statement產(chǎn)生的日志量,但是考慮到如果帶條件的update操作,以及整表刪除,alter表等操作,ROW格式會(huì)產(chǎn)生大量日志,因此在考慮是否使用ROW格式日志時(shí)應(yīng)該根據(jù)應(yīng)用的實(shí)際情況,其所 產(chǎn)生的日志量會(huì)增加多少,以及帶來(lái)的IO性能問(wèn)題。
缺點(diǎn):由于記錄的只是執(zhí)行語(yǔ)句,為了這些語(yǔ)句能在slave上正確運(yùn)行,因此還必須記錄每條語(yǔ)句在執(zhí)行的時(shí)候的一些相關(guān)信息,以保證所有語(yǔ)句能在slave得到和在master端執(zhí)行時(shí)候相同的結(jié)果。
另外mysql 的復(fù)制,像一些特定函數(shù)功能,slave可與master上要保持一致會(huì)有很多相關(guān)問(wèn)題(如sleep()函數(shù), last_insert_id(),以及user-defined functions(udf)會(huì)出現(xiàn)問(wèn)題).
使用以下函數(shù)的語(yǔ)句也無(wú)法被復(fù)制:LOAD_FILE()
UUID()
USER()
FOUND_ROWS()
SYSDATE() (除非啟動(dòng)時(shí)啟用了 --sysdate-is-now 選項(xiàng)
同時(shí)在INSERT …SELECT 會(huì)產(chǎn)生比 RBR 更多的行級(jí)鎖
Row:不記錄sql語(yǔ)句上下文相關(guān)信息,僅保存哪條記錄被修改。
優(yōu)點(diǎn):binlog中可以不記錄執(zhí)行的sql語(yǔ)句的上下文相關(guān)的信息,僅需要記錄那一條記錄被修改成什么了。
所以rowlevel的日志內(nèi)容會(huì)非常清楚的記錄下 每一行數(shù)據(jù)修改的細(xì)節(jié)。而且不會(huì)出現(xiàn)某些特定情況下的存儲(chǔ)過(guò)程,或function,以及trigger的調(diào)用和觸發(fā)無(wú)法被正確復(fù)制的問(wèn)題
缺點(diǎn):所有的執(zhí)行的語(yǔ)句當(dāng)記錄到日志中的時(shí)候,都將以每行記錄的修改來(lái)記錄,這樣可能會(huì)產(chǎn)生大量的日志內(nèi)容。
比如一條update語(yǔ)句,修改多條記錄,則binlog中每一條修改都會(huì)有記錄,這樣造成binlog日志量會(huì)很大,特別是當(dāng)執(zhí)行alter table之類(lèi)的語(yǔ)句的時(shí)候,由于表結(jié)構(gòu)修改,每條記錄都發(fā)生改變,那么該表每一條記錄都會(huì)記錄到日志中。
Mixedlevel: 以上兩種level的混合使用。
一般的語(yǔ)句修改使用statment格式保存binlog,如一些函數(shù),statement無(wú)法完成主從復(fù)制的操作,則采用row格式保存binlog,MySQL會(huì)根據(jù)執(zhí)行的每一條具體的sql語(yǔ)句來(lái)區(qū)分對(duì)待記錄的日志形式,也就是在Statement和Row之間選擇一種。
新版本的MySQL中對(duì)row level模式也被做了優(yōu)化,并不是所有的修改都會(huì)以row level來(lái)記錄,像遇到表結(jié)構(gòu)變更的時(shí)候就會(huì)以statement模式來(lái)記錄。至于update或者delete等修改數(shù)據(jù)的語(yǔ)句,還是會(huì)記錄所有行的變更。
總結(jié)
以上是生活随笔為你收集整理的mysql试题错误记录字段_MySQL这三道常见的面试题,你有被问过吗?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 防范ARP网关欺骗, ip mac双向绑
- 下一篇: java mysql防重复提交_防止数据