表中容許適當冗餘,譬如,主題帖的回覆數量和最後回覆時間等4. UNION ALL 要比UNION 快不少,因此,若是能夠確認合併的兩個結果集中不包含重複數據且不須要排序時的話,那麼就使用 UNIONALL。>>UNION 和 UNION ALL 關鍵字都是將兩個結果集合併爲一個,但這二者從使用和效率上來講都有所不一樣。>1. 對重複結果的處理:UNION 在進行表連接後會篩選掉重複的記錄,Union All 不會去除重複記錄。>2. 對排序的處理:Union 將會按照字段的順序進行排序;UNION ALL 只是簡單的將兩個結果合併後就返回。
3.請簡述經常使用的索引有哪些種類?
普通索引: 即針對數據庫表建立索引
惟一索引: 與普通索引相似,不一樣的就是:MySQL 數據庫索引列的值必須惟一,但容許有空值
主鍵索引: 它是一種特殊的惟一索引,不容許有空值。通常是在建表的時候同時建立主鍵索引
組合索引: 爲了進一步榨取 MySQL 的效率,就要考慮創建組合索引。即將數據庫表中的多個字段聯合起來做爲一個組合索引。
4.以及在 mysql 數據庫中索引的工做機制是什麼?
數據庫索引,是數據庫管理系統中一個排序的數據結構,以協助快速查詢、更新數據庫表中數據。索引的實現一般使用 B 樹及其變種 B+樹
5.MySQL 的基礎操做命令:
MySQL 是否處於運行狀態:Debian 上運行命令 service mysqlstatus,在 RedHat上運行命令 service mysqld status
開啓或中止 MySQL 服務 :運行命令 service mysqld start 開啓服務;運行命令service mysqld stop 中止服務
Shell 登入 MySQL: 運行命令 mysql -u root -p
列出全部數據庫:運行命令 show databases;
切換到某個數據庫並在上面工做:運行命令 use databasename; 進入名爲databasename 的數據庫
列出某個數據庫內全部表: show tables;
獲取表內全部 Field 對象的名稱和類型 :describe table_name;
6.mysql 的複製原理以及流程。
Mysql 內建的複製功能是構建大型,高性能應用程序的基礎。將 Mysql 的數據分佈到多個系統上去,這種分佈的機制,是經過將 Mysql 的某一臺主機的數據複製到其它主機(slaves)上,並從新執行一遍來實現的。* 複製過程當中一個服務器充當主服務器,而一個或多個其它服務器充當從服務器。php
readbuffersize >是 MySQL 讀入緩衝區大小。對錶進行順序掃描的請求將分配一個讀入緩衝區,MySQL 會爲它分配一段內存緩衝區。readbuffersize 變量控制這一緩衝區的大小。若是對錶的順序掃描請求很是頻繁,而且你認爲頻繁掃描進行得太慢,能夠經過增長該變量值以及內存緩衝區大小提升其性能。
14.若一張表中只有一個字段 VARCHAR(N)類型,utf8 編碼,則 N 最大值爲多少(精確到數量級便可)?
因爲 utf8 的每一個字符最多佔用 3 個字節。而 MySQL 定義行的長度不能超過65535,所以 N 的最大值計算方法爲:(65535-1-2)/3。減去 1 的緣由是實際存儲從第二個字節開始,減去 2 的緣由是由於要在列表長度存儲實際的字符長度,除以 3 是由於utf8 限制:每一個字符最多佔用 3 個字節。服務器
15. [SELECT *] 和[SELECT 所有字段]的 2 種寫法有何優缺點?
前者要解析數據字典,後者不須要
結果輸出順序,前者與建表列順序相同,後者按指定字段順序。
表字段更名,前者不須要修改,後者須要改
後者能夠創建索引進行優化,前者沒法優化
後者的可讀性比前者要高
16.HAVNG 子句 和 WHERE 的異同點?
語法上:where 用表中列名,having 用 select 結果別名
影響結果範圍:where 從表讀出數據的行數,having 返回客戶端的行數
索引:where 可使用索引,having 不能使用索引,只能在臨時結果集操做
where 後面不能使用匯集函數,having 是專門使用匯集函數的。
17.MySQL 當記錄不存在時 insert,當記錄存在時 update,語句怎麼寫?
INSERT INTO table (a,b,c) VALUES (1,2,3) ON DUPLICATE KEYUPDATE c=c+1;微信
18.MySQL 的 insert 和 update 的 select 語句語法
SQL insert into student (stuid,stuname,deptid) select 10,'xzm',3from student where stuid > 8;
update student a inner join student b on b.stuID=10 seta.
stuname=concat(b.stuname, b.stuID) where a.stuID=10 ;
複製代碼