表中允許適當冗余,譬如,主題帖的回復數量和最后回復時間等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)上,并重新執行一遍來實現的。* 復制過程中一個服務器充當主服務器,而一個或多個其它服務器充當從服務器。
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 ;