1、MySQL數據庫四種特性,不包括()
A.原子性
B.事務性
C.一致性
D.隔離性
解釋:事物的四種特性ACID,即:原子性、一致性、隔離性、持久性
2、MySQL報錯error 1062 的意思是()
A.連接數據庫失敗,沒有連接數據庫的權限
B.字段值重複,入庫失敗
C.未定義用戶對數據表的訪問權限
D.刪除數據庫文件失敗
解釋:error 1062是最容易遇到的錯誤,即主鍵衝突引起的從庫複製中斷
3、MySQL主從架構如下:
主庫 從庫
192.169.1.1 192.168.1.2
需要在從庫上採用mysqldump備份並記錄主庫binlog、Position點,需要加哪個參數(不考慮其他參數) ()
A.--master-date
B.--single-transaction
C.--dump-slave
D.--opt
解釋:如果在從庫備份並記錄主庫位點,需要加--dump-slave參數,一般添加新從庫時使用,但需要注意此參數會引起備份的從庫複製斷開。
4、以下哪個不能有效減小從庫延遲時間()
A.主庫進行update操作時where後條件沒有索引,添加索引
B.主庫有大事物,增加緩存,異步寫入數據庫,減少直接對db的大量寫入
C.主庫併發更新寫入頻繁,從庫設置innodb_flush_log_at_trx_commit=1及sync_binlog=1
D.數據庫中存在大量myisam表,修改表結構為innodb存儲引擎的表
解釋:主庫併發更新寫入頻繁,從庫設置這兩個參數0、0或者2、0;
innodb_flush_log_at_trx_commit=0 每秒將log_buffer刷新到logfile,並且將日誌同步刷新到磁盤。該模式下,在事務提交的時候,不會主動觸發寫入磁盤的操作;
innodb_flush_log_at_trx_commit=1 每次commit將log_buffer刷新到logfile,並且將日誌同步刷新到磁盤;
innodb_flush_log_at_trx_commit=2 每次commit將刷新到log_buffer,但是flush(刷到磁盤)操作並不會同時進行,每秒將日誌刷新到磁盤;
sync_binlog=0 像操作系統刷其他文件的機制一樣,MySQL不會同步到磁盤中去而是依賴操作系統來刷新binary log。
sync_binlog=1 MySQL在每寫N次二進制日誌binary log時,會使用fdatasync()函數將它的寫二進制日誌binary log同步到磁盤中去。如果啟用了autocommit,那麼每一個語句statement就會有一次寫操作;否則每個事務對應一個寫操作。
5、表test(a int,b int,time date)涉及以下3條sql:
select * from test where a=1 and b=1;
select * from test where b=1;
select * from test where b=1 order by time desc;
只建一個索引,如何建最優()
A.idx_ab(a,b)
B.idx_ba(b,a)
C.idx_abtime(a,b,time)
D.idx_btime(b,time)
解釋:在有order by排序時,排序字段必須要有索引,第一條sql創建idx_ab(a,b)最優,但是第二條sql用不到,而idx_ba(b,a)索引排序用不到,綜上idx_btime(b,time)最優
6、MySQL中InnoDB引擎的行鎖是通過加在什麼上完成(或稱實現)的:()
A.數據塊
B.索引值
解釋:索引值,行級鎖鎖的是這條記錄
7、關於MySQL權限說法正確的是()
A.管理權限(如super, process, file等)不能夠指定某個數據庫,on後面必須跟 *.*
B.如需要truncate權限只需授予drop權限
C.super權限允許用戶終止任何查詢,但不允許修改全局變量的set語句
D.建立一個用戶時,需要單獨授予usage連接權限
解釋:truncate權限需要create和drop權限;super權限允許用戶終止任何查詢;修改全局變量的SET語句建立一個用戶,就會自動授予其usage權限(默認授予),無需再單獨授予。
8、關於select count(*)和select count(1)以及select count(column)區別,說法錯誤的是()
A.如果表沒有主鍵, 那麼count(1)比count(*)快
B.如果表有主鍵,那主鍵作為count的條件時候count(主鍵)最快
C.如果表沒有主鍵,只有一個column的話,那count(column)最快
D.count(*)跟count(1)的結果一樣,都包括對NULL的統計,而count(column)是不包括NULL的統計
解釋:如果表沒有主鍵,只有一個column的話,那count(*)最快
9、使用SQL語句進行分組檢索時,為了去掉不滿足條件的分組,應當()
A.使用WHERE子句
B.在GROUP BY後面使用HAVING子句
C.先使用WHERE子句,再使用HAVING子句
D.先使用HAVING子句,再使用WHERE子句
解釋:GROUP BY HAVING分組後過濾固定格式
10、關於SQL優化,以下說明哪個是錯誤的()
A.類似分頁功能的SQL,建議先用主鍵關聯,然後返回結果集,效率會高很多
B.通常情況下,join的性能比較差,建議改造成子查詢寫法
C.多表聯接查詢時,關聯字段類型儘量一致,並且都要有索引
D.儘可能不使用TEXT/BLOB類型,確實需要的話,建議拆分到子表中,不要和主表放在一起,避免SELECT* 的時候讀性能太差
解釋:具體SQL具體分析,不一定join就比子查詢快
11、Linux操作系統下,關於MySQL大寫小問題正確的是()
A.column(包括別名)、index、storedroutine和event names的大小寫敏感
B.database、table(包括別名)的大小寫敏感性可以通過系統參數“lower_case_table_names”來配置,等於1時大小寫敏感
C.trigger、identifiers(標識符)的大小寫敏感性受lower_case_table_names參數影響
D.數據敏感性:校對字符集(Collation)可通過show collation查看,其中“_ci”代表case-insensitive大小寫不敏感,“_cs”代表case-sensitive大小寫敏感,“_bin”的大小寫敏感依賴於character的二進制編碼
解釋:column(包括別名)、index、storedroutine和event names不區分大小寫;lower_case_table_names = 1 表名存儲在磁盤是小寫的,但是比較的時候是不區分大小寫;.trigger、identifiers(標識符)的大小寫敏感性不受lower_case_table_names參數影響
12、MySQL delete from table where後哪項操作不會釋放磁盤物理空間()
A.optimize table tablename;
B.alter table tablename add column ;
C.alter table tablename engine=innodb;
D.rename table tablename to tablename_new;
解釋:前3個都會in-place數據,重新插入數據,從而達到釋放碎片的目的,第四個只是修改元數據
13、MySQL在RR事物隔離級別下,更新條件為索引字段,並非唯一索引(包括主鍵索引)時,會通過Next-Key Lock解決幻讀問題。以下哪項不會加此鎖()
A.Inser into…
B.Select… from… for update;
C.Update…from… where
D.Insert into T select … from S where…;
解釋:Inser into…只加行級鎖,RR隔離級別通過MVCC避免
14、MySQLSleep線程過多,以下操作不正確的是()
A.設置interactive_timeout參數,減小wait_timeout等待超時時間
B.php程序不要使用長連接,java程序調整連接池
C.打開mysql慢查詢
D.檢查應用連接情況,增加連接數
解釋:Sleep線程過多,主要是程序沒有發送請求,可以縮短空閒超時時間,也可以從程序端配置間隔探活,而增加連接數不會從根本達到優化效果
15、表結構如下:
CREATE TABLE `test` (
`id`int(11) NOT NULL AUTO_INCREMENT,
`uid`int(11) DEFAULT NULL,
`name`char(20) DEFAULT '0' NOT NULL,
`phone` int(11) DEFAULT NULL,
`email`varchar(20) DEFAULT NULL,
PRIMARYKEY (`id`),
KEY`idx_name` (`name`(5)),
KEY`idx_phone` (`phone`),
KEY`idx_email` (`email`)
) ENGINE=InnoDB AUTO_INCREMENT=35 DEFAULTCHARSET=utf8;
請問idx_name、idx_phone及idx_email索引長度分別是多少 ()
A.15,4,62
B.15,5,63
C.16,4,62
D.16,5,63
解釋:utf8佔3個字節,NULL佔一個字節,not null不佔用字節,int固定佔用4個字節,變長字段需要記錄長度佔用2個字節
idx_name(`name`(5)) 雖然name(5)只對前5個字符加索引 5*3 總共15;
idx_phone(`phone`) int固定4個字節,NULL佔一個字節,總共5;
idx_email (`email`) varchar(20) *3,NULL佔一個字節,變長字段需要記錄長度佔用2個字節,總共63
閱讀更多 im程序猿 的文章