㈠ 面試中問到HIBERNATE的緩存機制請問下該怎麼回答
首先說下Hibernate緩存的作用(即為什麼要用緩存機制),然後再具體說說Hibernate中緩存的分類情況,最後可以舉個具體的例子。
㈡ 「春招系列」Mysql面試核心25問(附答案)
篇幅所限本文只寫了MySQL25題,像其他的Redis,SSM框架,演算法,計網等技術棧的面試題後面會持續更新,個人整理的1000餘道面試八股文會放在文末給大家白嫖,最近有面試需要刷題的同學可以直接翻到文末領取。
如果表使用自增主鍵,那麼每次插入新的記錄,記錄就會順序添加到當前索引節點的後續位置,當一頁寫滿,就會自動開辟一個新的頁。如果使用非自增主鍵(如果身份證號或學號等),由於每次插入主鍵的值近似於隨機,因此每次新紀錄都要被插到現有索引頁得中間某個位置, 頻繁的移動、分頁操作造成了大量的碎片,得到了不夠緊湊的索引結構,後續不得不通過OPTIMIZE TABLE(optimize table)來重建表並優化填充頁面。
Server層按順序執行sql的步驟為:
簡單概括:
可以分為服務層和存儲引擎層兩部分,其中:
服務層包括連接器、查詢緩存、分析器、優化器、執行器等 ,涵蓋MySQL的大多數核心服務功能,以及所有的內置函數(如日期、時間、數學和加密函數等),所有跨存儲引擎的功能都在這一層實現,比如存儲過程、觸發器、視圖等。
存儲引擎層負責數據的存儲和提取 。其架構模式是插件式的,支持InnoDB、MyISAM、Memory等多個存儲引擎。現在最常用的存儲引擎是InnoDB,它從MySQL 5.5.5版本開始成為了默認的存儲引擎。
Drop、Delete、Truncate都表示刪除,但是三者有一些差別:
Delete 用來刪除表的全部或者一部分數據行,執行Delete之後,用戶需要提交(commmit)或者回滾(rollback)來執行刪除或者撤銷刪除,會觸發這個表上所有的delete觸發器。
Truncate 刪除表中的所有數據,這個操作不能回滾,也不會觸發這個表上的觸發器,TRUNCATE比Delete更快,佔用的空間更小。
Drop 命令從資料庫中刪除表,所有的數據行,索引和許可權也會被刪除,所有的DML觸發器也不會被觸發,這個命令也不能回滾。
因此,在不再需要一張表的時候,用Drop;在想刪除部分數據行時候,用Delete;在保留表而刪除所有數據的時候用Truncate。
隔離級別臟讀不可重復讀幻影讀 READ-UNCOMMITTED 未提交讀 READ-COMMITTED 提交讀 REPEATABLE-READ 重復讀 SERIALIZABLE 可串列化讀
MySQL InnoDB 存儲引擎的默認支持的隔離級別是 REPEATABLE-READ (可重讀)
這里需要注意的是 :與 SQL 標准不同的地方在於InnoDB 存儲引擎在 REPEATABLE-READ(可重讀)事務隔離級別 下使用的是 Next-Key Lock 鎖 演算法,因此可以避免幻讀的產生,這與其他資料庫系統(如 SQL Server)是不同的。所以 說InnoDB 存儲引擎的默認支持的隔離級別是 REPEATABLE-READ(可重讀) 已經可以完全保證事務的隔離性要 求,即達到了 SQL標準的SERIALIZABLE(可串列化)隔離級別。
因為隔離級別越低,事務請求的鎖越少,所以大部分資料庫系統的隔離級別都是READ-COMMITTED(讀取提交內 容):,但是你要知道的是InnoDB 存儲引擎默認使用 REPEATABLE-READ(可重讀)並不會有任何性能損失 。
InnoDB 存儲引擎在分布式事務 的情況下一般會用到SERIALIZABLE(可串列化)隔離級別。
主要原因:B+樹只要遍歷葉子節點就可以實現整棵樹的遍歷,而且在資料庫中基於范圍的查詢是非常頻繁的,而B樹只能中序遍歷所有節點,效率太低。
文件與資料庫都是需要較大的存儲,也就是說,它們都不可能全部存儲在內存中,故需要存儲到磁碟上。而所謂索引,則為了數據的快速定位與查找,那麼索引的結構組織要盡量減少查找過程中磁碟I/O的存取次數,因此B+樹相比B樹更為合適。資料庫系統巧妙利用了局部性原理與磁碟預讀原理,將一個節點的大小設為等於一個頁,這樣每個節點只需要一次I/O就可以完全載入,而紅黑樹這種結構,高度明顯要深的多,並且由於邏輯上很近的節點(父子)物理上可能很遠,無法利用局部性。
最重要的是,B+樹還有一個最大的好處:方便掃庫。
B樹必須用中序遍歷的方法按序掃庫,而B+樹直接從葉子結點挨個掃一遍就完了,B+樹支持range-query非常方便,而B樹不支持,這是資料庫選用B+樹的最主要原因。
B+樹查找效率更加穩定,B樹有可能在中間節點找到數據,穩定性不夠。
B+tree的磁碟讀寫代價更低:B+tree的內部結點並沒有指向關鍵字具體信息的指針(紅色部分),因此其內部結點相對B 樹更小。如果把所有同一內部結點的關鍵字存放在同一塊盤中,那麼盤塊所能容納的關鍵字數量也越多。一次性讀入內存中的需要查找的關鍵字也就越多,相對來說IO讀寫次數也就降低了;
B+tree的查詢效率更加穩定:由於內部結點並不是最終指向文件內容的結點,而只是葉子結點中關鍵字的索引,所以,任何關鍵字的查找必須走一條從根結點到葉子結點的路。所有關鍵字查詢的路徑長度相同,導致每一個數據的查詢效率相當;
視圖是一種虛擬的表,通常是有一個表或者多個表的行或列的子集,具有和物理表相同的功能 游標是對查詢出來的結果集作為一個單元來有效的處理。一般不使用游標,但是需要逐條處理數據的時候,游標顯得十分重要。
而在 MySQL 中,恢復機制是通過回滾日誌(undo log)實現的,所有事務進行的修改都會先記錄到這個回滾日誌中,然後在對資料庫中的對應行進行寫入。當事務已經被提交之後,就無法再次回滾了。
回滾日誌作用:1)能夠在發生錯誤或者用戶執行 ROLLBACK 時提供回滾相關的信息 2) 在整個系統發生崩潰、資料庫進程直接被殺死後,當用戶再次啟動資料庫進程時,還能夠立刻通過查詢回滾日誌將之前未完成的事務進行回滾,這也就需要回滾日誌必須先於數據持久化到磁碟上,是我們需要先寫日誌後寫資料庫的主要原因。
InnoDB
MyISAM
總結
資料庫並發會帶來臟讀、幻讀、丟棄更改、不可重復讀這四個常見問題,其中:
臟讀 :在第一個修改事務和讀取事務進行的時候,讀取事務讀到的數據為100,這是修改之後的數據,但是之後該事務滿足一致性等特性而做了回滾操作,那麼讀取事務得到的結果就是臟數據了。
幻讀 :一般是T1在某個范圍內進行修改操作(增加或者刪除),而T2讀取該范圍導致讀到的數據是修改之間的了,強調范圍。
丟棄修改 :兩個寫事務T1 T2同時對A=0進行遞增操作,結果T2覆蓋T1,導致最終結果是1 而不是2,事務被覆蓋
不可重復讀 :T2 讀取一個數據,然後T1 對該數據做了修改。如果 T2 再次讀取這個數據,此時讀取的結果和第一次讀取的結果不同。
第一個事務首先讀取var變數為50,接著准備更新為100的時,並未提交,第二個事務已經讀取var為100,此時第一個事務做了回滾。最終第二個事務讀取的var和資料庫的var不一樣。
T1 讀取某個范圍的數據,T2 在這個范圍內插入新的數據,T1 再次讀取這個范圍的數據,此時讀取的結果和和第一次讀取的結果不同。
T1 和 T2 兩個事務都對一個數據進行修改,T1 先修改,T2 隨後修改,T2 的修改覆蓋了 T1 的修改。例如:事務1讀取某表中的數據A=50,事務2也讀取A=50,事務1修改A=A+50,事務2也修改A=A+50,最終結果A=100,事務1的修改被丟失。
T2 讀取一個數據,T1 對該數據做了修改。如果 T2 再次讀取這個數據,此時讀取的結果和第一次讀取的結果不同。
悲觀鎖,先獲取鎖,再進行業務操作,一般就是利用類似 SELECT … FOR UPDATE 這樣的語句,對數據加鎖,避免其他事務意外修改數據。當資料庫執行SELECT … FOR UPDATE時會獲取被select中的數據行的行鎖,select for update獲取的行鎖會在當前事務結束時自動釋放,因此必須在事務中使用。
樂觀鎖,先進行業務操作,只在最後實際更新數據時進行檢查數據是否被更新過。Java 並發包中的 AtomicFieldUpdater 類似,也是利用 CAS 機制,並不會對數據加鎖,而是通過對比數據的時間戳或者版本號,來實現樂觀鎖需要的版本判斷。
分庫與分表的目的在於,減小資料庫的單庫單表負擔,提高查詢性能,縮短查詢時間。
通過分表 ,可以減少資料庫的單表負擔,將壓力分散到不同的表上,同時因為不同的表上的數據量少了,起到提高查詢性能,縮短查詢時間的作用,此外,可以很大的緩解表鎖的問題。分表策略可以歸納為垂直拆分和水平拆分:
水平分表 :取模分表就屬於隨機分表,而時間維度分表則屬於連續分表。如何設計好垂直拆分,我的建議:將不常用的欄位單獨拆分到另外一張擴展表. 將大文本的欄位單獨拆分到另外一張擴展表, 將不經常修改的欄位放在同一張表中,將經常改變的欄位放在另一張表中。對於海量用戶場景,可以考慮取模分表,數據相對比較均勻,不容易出現熱點和並發訪問的瓶頸。
庫內分表 ,僅僅是解決了單表數據過大的問題,但並沒有把單表的數據分散到不同的物理機上,因此並不能減輕 MySQL 伺服器的壓力,仍然存在同一個物理機上的資源競爭和瓶頸,包括 CPU、內存、磁碟 IO、網路帶寬等。
分庫與分表帶來的分布式困境與應對之策 數據遷移與擴容問題----一般做法是通過程序先讀出數據,然後按照指定的分表策略再將數據寫入到各個分表中。分頁與排序問題----需要在不同的分表中將數據進行排序並返回,並將不同分表返回的結果集進行匯總和再次排序,最後再返回給用戶。
不可重復讀的重點是修改,幻讀的重點在於新增或者刪除。
視圖是虛擬的表,與包含數據的表不一樣,視圖只包含使用時動態檢索數據的查詢;不包含任何列或數據。使用視圖可以簡化復雜的 sql 操作,隱藏具體的細節,保護數據;視圖創建後,可以使用與表相同的方式利用它們。
視圖不能被索引,也不能有關聯的觸發器或默認值,如果視圖本身內有order by 則對視圖再次order by將被覆蓋。
創建視圖:create view xxx as xxxx
對於某些視圖比如未使用聯結子查詢分組聚集函數Distinct Union等,是可以對其更新的,對視圖的更新將對基表進行更新;但是視圖主要用於簡化檢索,保護數據,並不用於更新,而且大部分視圖都不可以更新。
B+tree的磁碟讀寫代價更低,B+tree的查詢效率更加穩定 資料庫索引採用B+樹而不是B樹的主要原因:B+樹只要遍歷葉子節點就可以實現整棵樹的遍歷,而且在資料庫中基於范圍的查詢是非常頻繁的,而B樹只能中序遍歷所有節點,效率太低。
B+樹的特點
在最頻繁使用的、用以縮小查詢范圍的欄位,需要排序的欄位上建立索引。不宜:1)對於查詢中很少涉及的列或者重復值比較多的列 2)對於一些特殊的數據類型,不宜建立索引,比如文本欄位(text)等。
如果一個索引包含(或者說覆蓋)所有需要查詢的欄位的值,我們就稱 之為「覆蓋索引」。
我們知道在InnoDB存儲引 擎中,如果不是主鍵索引,葉子節點存儲的是主鍵+列值。最終還是要「回表」,也就是要通過主鍵再查找一次,這樣就 會比較慢。覆蓋索引就是把要查詢出的列和索引是對應的,不做回表操作!
舉例 :
學號姓名性別年齡系別專業 20020612李輝男20計算機軟體開發 20060613張明男18計算機軟體開發 20060614王小玉女19物理力學 20060615李淑華女17生物動物學 20060616趙靜男21化學食品化學 20060617趙靜女20生物植物學
主鍵為候選鍵的子集,候選鍵為超鍵的子集,而外鍵的確定是相對於主鍵的。
㈢ 資料庫存儲過程有哪些,面試題
資料庫存儲過程有哪些
/*
系統存儲過程很多,有些常用,有些不常用
常用:
sp_attach_db  附加資料庫到一個伺服器中
sp_columns  返回在當前環境中列的信息
sp_databases  列出當前系統中的資料庫
sp_configure  顯示或修改當前伺服器的全局配置
sp_depends  顯示資料庫對象的依賴信息
sp_executesql   執行動態的T-SQL語句
sp_help  報告有關資料庫對象的信息
sp_helpdb   返回指定資料庫或全部資料庫的信息
sp_helptext  顯示規則、默認值、存儲過程、觸發器、視圖等的未加密的文本定義信息
sp_indexes  返回指定遠程表的索引信息
sp_lock  返回有關鎖的信息
sp_password  增加或者修改指定login的口令
sp_rename  更改用戶創建的資料庫對象名稱
sp_renamedb  更改資料庫名稱
sp_spaceused   顯示資料庫的空間使用情況
sp_tables  返回在當前環境中可以被查詢的對象的列表
sp_who  提供當前用戶和進程的信息
不常用:
sp_addlinkedserver  創建一個允許執行分布式查詢的鏈接伺服器
sp_addlinkedsrvlogin  在本地伺服器和遠程伺服器之間創建login帳戶的映射關系
sp_addlogin  創建一個新的login帳戶
sp_add_agent_parameter  在代理文件中增加一個參數
sp_add_agent_profile  為復制代理增加一個代理文件
sp_add_alert   創建一個警報
sp_add_category   在伺服器上,增加一種作業、警報或者操作員的特定分類
sp_add_data_file_recover_suspect_db 當資料庫復原不能完成時,向文件組增加一個數據文件
sp_add_file_recover_suspect_db  對於復原有問題的資料庫增加一個文件
sp_add_job  增加一個sql server agent可以執行的作業
sp_add_jobschele  為作業創建調度
sp_add_jobserver  把指定的作業增加到指定伺服器上
sp_add_jobstep  在作業中增加一步或一個操作
sp_add_log_file_recover_suspect_db  當資料庫復原不能完成時,向文件組增加一個日誌文件
sp_add_notification  為警報創建一個通知
sp_add_operator  為警報或者作業創建一個操作員
sp_add_targetservergroup  增加指定的伺服器組
sp_add_targetsvrgrp_member  在指定的目標伺服器組增加一個目標伺服器
sp_addalias  在資料庫中為login帳戶增加一個別名
sp_addapprole  在資料庫中增加一個特殊的應用程序角色
sp_addarticle  創建文章,並把該文章添加到出版物中
sp_adddistpublisher  創建一個使用本地分布伺服器的出版伺服器
sp_adddistributiondb  在分布伺服器上創建一個新的distribution資料庫
sp_adddistributor  增加一個分布伺服器
sp_addextendedproc  在系統中增加一個擴展存儲過程
sp_addgroup  在當前資料庫中增加一個組
sp_addmergearticle  為一個已有的合並出版物創建一個文章
sp_addmergefilter  為了連接另外一個表,創建一個合並過濾器
sp_addmergepublication  創建一個新的合並出版物
sp_addmergepullsubscription  增加一個拉回類型的訂閱物
sp_addmergepullsubscription_agent  在訂閱伺服器上,為合並拉回訂閱物創建一個代理
sp_addmergesubscription  創建一個推出或者拉回類型的訂閱物
sp_addmessage  在系統中增加一個新的錯誤消息
sp_addpublicaton  創建一個快照復制或者事務復制出版物
sp_addpublicaton_snapshot  創建一個快照代理
sp_addpullsusscription  在當前訂閱伺服器的資料庫中增加一個拉回或者匿名訂閱物
sp_addpullsusscription_agent  在訂閱伺服器的資料庫中增加一個新的代理
sp_addremotelogin 在本地伺服器上增加一個遠程login帳戶,允許執行遠程存儲過程調用
sp_addrole  在當前資料庫中增加一個角色
sp_addrolemember  為當前資料庫中的一個角色增加一個安全性帳戶
sp_addserver  添加一個遠程或者本地伺服器
sp_addsrvrolemember  為固定的伺服器角色增加一個成員
sp_addsubscriber  增加一個新的訂閱伺服器
sp_addsubscriber_schele  為分布代理和合並代理增加一個調度
sp_addsubscription  訂閱文章並且設置訂閱伺服器的狀態
sp_addsynctrigers  在訂閱伺服器上創建一個立即修改觸發器
sp_addtabletocontents  在合並跟蹤表中插入一個參考
sp_addtype  創建一個用戶定義的數據類型
sp_admpdevice  增加一個備份設備
sp_adser  在當前資料庫中為一個新用戶增加一個安全性帳戶
sp_altermessage  修改錯誤信息的狀態
sp_addly_job_to_targets  把作業應用到一個或者多個目標伺服器
sp_approlepassword  在當前資料庫中改變應用程序角色的口令
sp_aarticle_validation  為指定的文章初始化確認請求
sp_aarticlecolumn  指定在文章中使用的列
sp_aarticlefilter  創建一個用於水平過濾數據的過濾器
sp_articleview  當表被過濾時,為文章創建一個同步化對象
sp_attach_single_file_db  在當前伺服器中,附加一個只有一個數據文件的資料庫
sp_aautostats  對於一個指定的索引或統計,自動顯示update statistics的狀態
sp_bindefault  把默認值綁定到列或用戶定義的數據類型上
sp_bindrule  把規則綁定到列或用戶定義的數據類型上
sp_bindsession  綁定或解除綁定與實例中的其它事務的連接
sp_browsereplcmds  在分布資料庫中返回一種可讀格式的結果集
sp_catalogs  返回指定連接伺服器中的系統目錄列表,在本地伺服器中等價於資料庫列表
sp_certify_removable  確認在可移動介質上用於分布的資料庫是否正確配置
sp_change_agent_parameter  修改復制代理配置使用的參數
sp_change_agent_profile   修改復制代理配置使用的配置參數
sp_change_users_login  修改login與當前資料庫中用戶之間的關系
sp_changearticle  改變文章的屬性
sp_changedbowner  改變當前資料庫的所有者
sp_changedistpublisher  改變分布出版伺服器的屬性
sp_changedistributor_password  改變分布伺服器的口令
sp_changedistributor_property  改變分布伺服器的屬性
sp_changedistribtutiondb  改變分布資料庫的屬性
sp_changegroup  改變安全性帳戶所屬的角色
sp_changemergearticle  改變合並文章的屬性
sp_changemergefilter  改變一些合並過濾器的屬性
sp_changemergepublication  改變合並出版物的屬性
sp_changemergepullsubscription  改變合並拉回出版物的屬性
sp_changemergesubscription  改變合並的推出或者拉回出版物的屬性
sp_changeobjectowner  改變對象的所有者
sp_changepublication  改變出版物的屬性
sp_changesubscriber  改變用於訂閱伺服器的選項
sp_changesubscriber_schele  改變用於分布式代理和事務代理的訂閱伺服器的調度
sp_changesubstatus  改變訂閱伺服器的狀態
sp_column_privileges  返回列的許可權信息
sp_column_privileges_ex  返回在鏈接伺服器上指定表的列的許可權信息
sp_columns_ex  返回在鏈接伺服器上列的信息
sp_create_removable  創建一個可移動介質資料庫
sp_createstats  創建單列的統計信息
sp_cursor  用於請求定位更新
sp_cursor_list  報告當前打開的伺服器游標屬性
sp_cursorclose  關閉和釋放游標
sp_cursorfetch   從游標中取出數據行
sp_cursoropen   定義與游標和游標選項相關聯的 SQL 語句,然後填充游標
sp_cursoroption  用於設置各種游標選項
sp_cycle_errorlog  關閉錯誤日誌文件重新開始錯誤記錄
sp_datatype_info  返回當前環境支持的數據類型信息
sp_dbfixedrolepermission  顯示每一個固定資料庫角色的許可
sp_dboption   顯示或修改資料庫選項
sp_dbremove   刪除資料庫和與該資料庫相關的所有文件
sp_defaultdb    設置登錄帳戶的默認資料庫
sp_defaultlanguage    設置登錄帳戶的默認語言
sp_delete_alert   刪除警報
sp_delete_backuphistory   刪除備份和恢復的歷史信息
sp_delete_category   刪除指定類型的作業、警報和操作員
sp_delete_job  刪除一個作業
sp_delete_jobschele   刪除作業的調度
sp_delete_jobserver   刪除指定的目標伺服器
sp_delete_jobstep   從作業中刪除指定的作業步驟
sp_delete_notfication   刪除發送給某個操作員的所有通知
sp_delete_operator   刪除操作員
sp_delete_targetserver   從可以使用的目標伺服器列表中刪除指定的伺服器
sp_delete_targetservergroup   刪除指定的目標伺服器組
sp_delete_targetsvrgrp_member   從目標伺服器組中刪除一個目標伺服器
sp_deletemergeconflictrow   刪除沖突表中的記錄行
sp_denylogin  防止window用戶或群組連接到 sql server
sp_describe_cursor  報告伺服器游標的屬性
sp_describe_cursor_columns   報告在伺服器游標的結果集中列的屬性
sp_describe_cursor_tables  報告伺服器游標參考的基表信息
sp_detach_db  分享伺服器中的資料庫
sp_drop_agentparameger  刪除配置文件中的一個或者多個參數
sp_drop_profile  刪除配置文件
sp_dropalias  刪除一個帳戶的別名
sp_dropapprole  刪除當前資料庫中的應用程序角色
sp_droparticle  從出版物中刪除一篇文章
sp_dropdevice  刪除資料庫或者備份設備
sp_dropdistpublisher  刪除出版伺服器
sp_dropdistributiondb   刪除分布資料庫
sp_dropdistributor   刪除分布伺服器
sp_dropdropextendedproc  刪除一個擴展存儲過程
sp_dropgroup  從當前資料庫中刪除角色
sp_droplinkedsrvlogin  刪除一個本地伺服器和連接伺服器的映射帳戶
sp_droplogin   刪除一個登錄帳戶
sp_dropmergearticle  從合並出版物中刪除一篇文章
sp_dropmergefilter  刪除一個合並過濾器
sp_dropmergepublication   刪除一個合並出版物和與其相關的快照復制
sp_dropmergepullsubscription  刪除一個合並拉回訂購物
sp_dropmergesubscription  刪除一個訂閱物
sp_dropmessage  刪除一個消息
sp_droppublication  刪除出版物和與其相關的文章
sp_droppullsubscription  刪除當前訂閱伺服器資料庫中的訂閱物
sp_dropremotelogin  刪除一個遠程登錄帳戶
sp_droprole  從當前資料庫中刪除一個角色
sp_droprolemember  從當前資料庫中的一個角色中刪除一個安全性帳戶
sp_dropserver  刪除一個遠程或者連接伺服器列表中的伺服器
sp_dropsrvrolemember  從一個固定的伺服器角色中刪除一個帳戶
sp_dropsubscriber  刪除一個訂閱伺服器
sp_dropsubscription  刪除訂閱物
sp_droptype   刪除一種用戶定義的數據類型
sp_dropuser   從當前資料庫中刪除一個用戶
sp_dropdropwebtask  刪除以前版本定義的web任務
sp_dsninfo  從一個與當前伺服器相關的分布伺服器返回ODBC和OLE DB數據源的信息
sp_mpparamcmd  返回存儲在分布資料庫中的參數化命令的詳細信息
sp_enumcodepages   返回一個字元集和代碼頁的列表
sp_enumcustomresovers  返回所有可用的定製解決方案表表
sp_enumdsn  返回所有可用的odbc和ole db數據源列表
sp_enumfullsubscribers  返回訂閱伺服器的列表
sp_expired_subscription_cleanup  周期性地檢查訂閱物的狀態是否失效
sp_fkeys  返回當前環境的外鍵信息
sp_foreignkeys  返回參照連接伺服器的表的主鍵的外鍵
sp_fulltext_catalog  創建和刪除全文本目錄
sp_fulltext_column   指定某一個列是否參加全文本索引
sp_fulltext_database   從當前資料庫中初始化全文本索引
sp_fulltext_service  改變Microsoft Search Service屬性
sp_fulltext_table    標記用於全文本索引的表
sp_generatefilters    在外鍵表上創建一個過濾器
sp_get_distributor    確定一個分布伺服器是否安裝在某個伺服器上
sp_getbindtoken    創建一個綁定的連接文本
sp_getmergedeletype    返回合並刪除的類型
sp_grant_publication_access   在出版物的訪問列表中增加一個用戶
sp_grantdbaccess   在當前資料庫中增加一個安全性帳戶
sp_grantlogin   允許Windows用戶或群組連接到 SQL Server
sp_help_agent_default  檢索作為參數傳送的代理類型的默認配置的標識號
sp_help_agent_parameter    返回代理配置的所有參數
sp_help_agent_profile   返回指定代理的配置
sp_help_alert  報告有關警報的信息
sp_help_category   提供有關作業、警報、操作員的指定種類的信息
sp_help_downloadlist   列出有關作業的信息
sp_help_fulltext_catalogs   返回有關全文本索引表的信息
sp_help_fulltext_columns   返回標記全文本索引的列信息
sp_help_fulltext_columns_cursor   使用游標檢索標記為全文本的索引列
sp_help_fulltext_tables   返回標記為全文本索引的表
sp_help_fulltext_tables_cursor   使用游標返回標記為全文本索引的表
sp_help_job   返回有關作業的信息
sp_help_jobhistory   提供有關作業的歷史信息
sp_help_jobschele   返回作業的調度信息
sp_help_jobserver   返回給定作業的伺服器信息
sp_help_jobstep   返回作業的步驟信息
sp_help_operator    返回有關操作員的信息
sp_help_publication_access  返回可以訪問指定出版物的帳戶列表
sp_help_targetserver   列出全部目標伺服器
sp_help_targetservergroup    列出指定伺服器組中的全部目標伺服器
sp_helparticle  顯示有關文章的信息
sp_helpconstraint  返回有關約束的類型、名稱等信息
sp_helpdbfixedrole   返回固定的伺服器角色的列表
sp_helpdevice    返回有關資料庫文件的信息
sp_helpdistpublisher   返回充當分布伺服器的出版伺服器的屬性
sp_helpdistributiondb   返回分布資料庫的屬性信息
sp_helpdistributor   列出分布伺服器、分布資料庫、工作目錄等信息
sp_helpextendproc  顯示當前定義的擴展存儲過程信息
sp_helpfile   返回與當前資料庫相關的物理文件信息
sp_helpfilegroup  返回與當前資料庫相關的文件組信息
sp_helpgroup  返回當前資料庫中的角色信息
sp_helpindex   返回有關表的索引信息
sp_helplanguage  返回有關語言的信息
sp_helplinkedsrvlogin  返回鏈接伺服器中映射的帳戶信息
sp_helplogins  返回有關login和與其相關的資料庫用戶信息
sp_helpmergearticle  返回有關合並文章的信息
sp_helpmergearticleconflicts  返回有關沖突的出版物中的文章信息
sp_helpmergeconflictrows  返回在指定沖突表中的行
sp_helpmergefilter  返回有關合並過濾器的信息
sp_helpmergepublication  返回有關合並出版物的信息
sp_helpmergepullsubscription  返回有關拉回訂閱物的信息
sp_helpmergesubscription    返回有關推出訂閱物的信息
sp_help_notification    報告對於給定操作員的警報信息
sp_helppublication   返回有關出版物的信息
sp_helprole  返回當前資料庫中的角色信息
sp_helprolemember  返回當前資料庫中角色成員的信息
sp_helprotect    返回有關用戶許可的信息
sp_helpserver    顯示特定遠程或者復制伺服器的信息
sp_helpsort    顯示系統的排列順序和字元集的信息
sp_helpsrvrole    顯示系統中的固定伺服器角色列表
sp_helpsrvrolemember   顯示系統中的固定伺服器角色成員的信息
sp_helpsubscrberinfo  顯示有關訂閱伺服器的信息
sp_helpsubscription  顯示有特定出版物等有關的訂閱物信息
sp_helpsubscription_properties  檢索安全性信息
sp_helptrigger  顯示觸發器的類型
sp_helpuser  顯示當前資料庫中的用戶、Windows NT用戶和組、角色等信息
sp_indexoption  為用戶定義的索引設置選項
sp_link_publication  設置立即修改訂閱伺服器的同步化觸發器使用的配置和安全性信息
sp_linkedservers  返回在本地伺服器上定義的鏈接伺服器的列表
sp_makewebtask  創建一個執行html文檔的任務
sp_manage_jobs_by_login  刪除或者重新指定屬於login的作業
sp_mergemmyupdate  製作用於合並復制的修改備份
sp_mergesubscription_cleanup  刪除元數據
sp_monitor  顯示系統的統計信息
sp_msx_defect  從多個伺服器操作中刪除當前伺服器
sp_msx_enlist   增加當前伺服器到可用的目標伺服器列表中
sp_pkeys  返回某個表的主鍵信息
sp_post_msx_operation  插入一些目標伺服器可以執行的信息
sp_primarykeys   返回主鍵列的信息
sp_processmail   使用擴展存儲過程修改郵件信息
sp_procoption   設置或者顯示過程選項
sp_publication_validation   初始化文章校驗請求
sp_purge_jobhistory   刪除作業的歷史記錄
sp_recompile   使存儲過程和觸發器在下一次運行時重新編譯
sp_refreshsubscriptions  在拉回出版物中增加訂閱物到文章中
sp_refreshview  刷新指定視圖的元數據
sp_reinitmergepullsubscription   標記一個合並拉回訂閱
sp_reiniteergesubscription   標記一個合並訂閱
sp_reinitpullsubscription   標記一個事務訂閱或者匿名訂閱
sp_reinitsubscription   重新初始化訂閱
sp_remoteoption   顯示或者修改遠程登錄帳戶的選項
sp_remove_job_from_targets  從給定的目標伺服器中刪除指定的作業
sp_removedbreplication   從資料庫中刪除所有的復制對象
sp_replcounters  返回復制的統計信息
sp_repldone  修改伺服器做的分布事務的統計信息
sp_replflush  處理文章的高速緩沖存儲區
sp_replication_agent_checkup  檢查每一個分布資料庫
sp_replicationdboption   在當前資料庫中設置復制資料庫的選項
sp_replsetoriginator   用於在事務復制中檢測循環登錄
sp_replshowcmds  返回標記復制的事務命令
sp_repltrans   返回在出版資料庫事務日誌中的所有事務的結果集
sp_resetstatus   重新設置異常資料庫的形態
sp_resync_targetserver  重新同步所有的多伺服器作業
sp_revoke_publication_access   從出版資料庫的訪問列表中刪除login帳戶
sp_revokedbaccess   從當前資料庫中刪除安全性帳戶
sp_revokelogin   刪除系統的login帳戶
sp_script_synctran_commands   生成一個可以用於立即修改訂閱物的腳本
*/
㈣ 程序員面試必備PHP基礎面試題 – 第十一天
一、兩張表 city表和province表。分別為城市與省份的關系表。
  表名:city
  id City Provinceid
  1 廣州 1
  2 深圳 1
  3 惠州 1
  4 長沙 2
  5 武漢 3
  ………. 廣州
  表名稱:province:
  id Province
  1 廣東
  2 湖南
  3 湖北
  ………. 
  1、寫一條sql語句關系兩個表,實現:顯示城市的基本信息。顯示欄位:城市id ,城市名, 所屬省份 。
  如:
  Id(城市id) Cityname(城市名) Privence(所屬省份) 
2、如果要統計每個省份有多少個城市,請用group by 查詢出來。顯示欄位:省份id ,省份名,包含多少個城市。
二、主鍵 和外鍵表示什麼?一般用於做什麼?
主鍵:能夠唯一表示數據表中的每個記錄的欄位或者欄位的組合就稱為主鍵。一個主鍵是唯一識別一個表的每一行記錄,但這只是其作用的一療分,主鍵的主要作用是將記錄和存放在其他表中的數據進行關聯,在這一點上,主鍵是不同表中各記錄間的簡單指針,主鍵約整就是確定表中的每一條記錄,主鍵不能是空值,唯一約束是用於指定一個或多個列的組合值具有唯一性,以防止在列中輸入重復的值,所以,主鍵的值對用戶而言是沒有什麼意義,並且和它賦予的值也沒有什麼特別聯系。
  外鍵:若有兩個表A,B,C是A的主鍵,而B中也有C欄位,則C就是表B的外鍵,外鍵約束主要用來維護兩個表之間數據的一致性。A為基本表,B為信息表。
  在資料庫中,常常不只是一個表,這些表之間也不是相互獨立的,不同的表之間需要建立一種關系,才能將它們的數據相互溝通,而在這個溝通過程中,就需要表中有一個欄位作為標志,不同的記錄對應的欄位取值不能相同,也不能是空白的,通過這個欄位中不同的值可以區別各條記錄,就像我們區別不同的人,每個人都有名字,但它卻不能作為主鍵,因為人名很容易出現重復,而身份證號是每個人都不同的,所以可以根據它來區別不同的人,資料庫的表中作為主鍵的段段就要像人的身份證號一樣,必須是每個記錄的值都不同,這才能根據
  主鍵的值來確定不同的記錄。 
關系:外鍵一定是另外某個表的主鍵。
三、select now(),Date_ADD(now(),INTERVAL 14 day),Date_SUB(now(),INTERVAL 3 Day) from table; 會獲得什麼內容,請寫出來。
  會獲得三條數據:
  第一條:當前時間;
  第二條:當前時間加上14天;
  第三條:當前時間減去3天。 
   四、您所知道的MYSQL 資料庫備份,還原方式有哪幾種?   
  備份:
  一,搭建主從架構,master-slave,通過binlog文件同步復制主庫的數據,也可以直接通過binlog文件恢復數據。
  二,通過系統計劃任務執行mysqlmp做周期性全備份。
  三,物理備份,直接拷貝數據文件、參數文件、日誌文件。
  還原:
  一.通過mysql操作工具,如phpmyadmin,sqlyog等導入備份過的資料庫文件。
  二.將物理備份的文件拷貝到mysql的data目錄下 
   五、內容管理系統中,表message有如下欄位   
  id 文章id
  title 文章標題
  content 文章內容
  category_id 文章分類id
  hits 點擊量
  創建上表,寫出MySQL語句 
   六、同樣上述內容管理系統:表comment記錄用戶回復內容,欄位如下   
  comment_id 回復id
  id 文章id,關聯message表中的id
  comment_content 回復內容
  現通過查詢資料庫需要得到以下格式的文章標題列表,並按照回復數量排序,回復最高的排在最前面
  文章id 文章標題 點擊量 回復數量
  用一個SQL語句完成上述查詢,如果文章沒有回復則回復數量顯示0 
   七、內容管理系統,表category保存分類信息,欄位如下   
  category_id int(4) not null auto_increment;
  category_name varchar(40) not null;
  用戶輸入文章時,通過選擇下拉菜單選定文章分類
  寫出如何實現這個下拉菜單 
八、PHP文件操作
1、內容管理系統:用戶提交內容後,系統生成靜態HTML頁面;寫出實現的基本思路
2、簡單描述用戶修改發布內容的實現流程和基本思路
1)當用戶提交後生成一個由url地址MD5後的文件的編譯頁面,用文件處理file函數生成一個模板合成頁,判斷模板編譯頁是否有,模板頁無或者編譯頁的創建時間戳小於模板頁的修改時間都會從新生成編譯頁面,編譯後的頁面會調用對應資料庫的值顯示在頁面中,通過對內存數據的讀取釋放,顯示出我們看到的靜態數據,然後用file文件將其保存起來生成靜態的頁面
2)當用戶修改了發布內容都會修改數據相關的內容,並通過編譯頁面更新靜態數據並用文件的方式緩存起來,當用戶查看時將不做任何資料庫查找,直接調用該緩存文件即可
㈤ java面試題中一般資料庫會問什麼內容(資料庫常問的面試題)
資料庫基礎(面試常見題)
一、資料庫基礎
1.數據抽象:物理抽象、概念抽象、視圖級抽象,內模式、模式高芹神、外模式
2.SQL語言包括數據定義、數據操縱(Data),數據控制(DataControl)
數據定義:CreateTable,AlterTable,DropTable,Craete/DropIndex等
數據操縱:Select,insert,update,delete,數據控制:grant,revoke
3.SQL常用命令:
CREATETABLEStudent(
IDNUMBERPRIMARYKEY,NAMEVARCHAR2(50)NOTNULL);//建表
CREATEVIEWview_nameAS
Select*FROMTable_name;//建視圖
CreateUNIQUEINDEXindex_nameONTableName(col_name);//建索引
INSERTINTOtablename{column1,column2,}values(exp1,exp2,);//插入
INSERTINTOViewname{column1,column2,}values(exp1,exp2,);//插入視圖實際影響表
UPDATEtablenameSETname=』zang3』condition;//更新數據
;//刪除
GRANT(Select,delete,)ON(對象)TOUSER_NAME[WITHGRANTOPTION];//授權
REVOKE(許可權表)ON(對象)FROMUSER_NAME[WITHREVOKEOPTION]//撤權
列出工作人員及其領導的名字:首渣
SelectE.NAME,S.NAMEFROMEMPLOYEEES
WHEREE.SUPERName=S.Name
4.視圖:
5.完整性約束:實體完整性、參照完整性、用戶定義完整性戚虧
㈥ 資料庫面試題:
- create database aaa; 
- create table users(id int NOT NULL AUTO_INCREMENT, - user_name char(10),money char(10),add_time datetime 
PRIMARY KEY (`id`))ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
3.insert into users values(2,'a1','a11',current_date),(3,'a1','a11',current_date),(4,'a1','a11',current_date),(5,'a1','a11',current_date),(6,'a1','a11',current_date),(7,'a1','a11',current_date),(8,'a1','a11',current_date),(9,'a1','a11',current_date),(10,'a1','a11',current_date),(11,'a1','a11',current_date);
4.參考第二步
5.參考第三步
6.select a.username,a.money,b.email,b.user_phone,b.weigh from users a,user_info b
where a.id=b.id and a.id=XXX(你指定的);
7.mysqlmp -uroot -p aaa > /tmp/aaa.sql (需要輸入密碼)
我用的是mysql上的寫法
㈦ 15個 MySQL 基礎面試題,DBA 們准備好了嗎
問題1:你如何確定 MySQL 是否處於運行狀態?
答案: 在Debian 上運行命令 service mysql status,然後看輸出即可。 
在 RedHat 或者 centos 上運行命令 service mysqld status,然後看看輸出即可。
問題2:如何開啟或停止 MySQL 服務?
答案:運行命令 service mysqld start 開啟服務; 
運行命令 service mysqld stop 停止服務。
問題3:如何通過 Shell 登入 MySQL?
答案:運行命令 mysql -u用戶名 -p登陸密碼
問題4:如何列出所有資料庫?
答案:運行命令 show databases;
問題5: 如何切換到某個資料庫並在上面工作?
答案:(1)運行命令 use database_name; 
(2)進入名為 database_name 的資料庫。
問題6:如何列出某個資料庫內所有表?
答案:在當前資料庫運行命令 show tables;
問題7:如何獲取表內所有 Field 對象的名稱和類型?
答案:運行命令 describe 表名; 
簡寫為desc 表名;
問題8:如何刪除表?
答案:運行命令 drop table 表名;
問題9:如何刪除資料庫?
答案:運行命令 drop database 資料庫名;
問題10:如何查看錶內所有數據?
答案:運行命令 select * from 表名;
問題11:如何從表(比如 oc_users )中獲取一個 field 對象(比如 uid)的所有數據?
答案:運行命令 select uid from oc_users;
問題12:假設你有一個名為 『xyz』 的表,它存在多個欄位,如 『createtime』和 『engine』, 
名為 engine 的欄位由 『Memoty』 和 『MyIsam』 兩種數值組成。 
如何只列出 『createtime』 和 『engine』 這兩列,並且 engine 的值為 『MyIsam』?
答案:運行命令 select create_time, engine from xyz where engine = 「MyIsam」 ;
問題13:如何列出表 『xrt』 內 name 域值為 『tecmint』,web_address 域值為 『tecmint.com』 的所有數據?
答案:運行命令 select * from xrt where name = 「tecmint」 and web_address = 「tecmint.com」 ;
問題14:如何列出表 『xrt』 內 name 域值不為 『tecmint』,web_address 域值為 『tecmint.com』 的所有數據?
答案:運行命令 select * from xrt where name != 「tecmint」 and web_address = 「tecmint.com」;
問題15:如何知道表內行數?
答案:運行命令 select count(*) from 表名;
㈧ SQL資料庫面試題 急急急
a)select pname as '商品名',avg(qty) as 平均銷售量 from s,p,m where m.city='上海' and s.mno=m.mno and p.pno=s.pno,select p.Pno,p.pname,sum(s.qty)
from s left join p on s.pno=p.pno left join m on p.Mno=m.Mno
where m.city='上海市'
group by p.Pno,p.pname,p.city,p.color
b)、先刪除Sale表的外鍵PNO,再刪除gds表。
c)聯系:視圖(view)是在基本表之上建立的表,它的結構(即所定義的列)和內容(即所有數據行)都來自基本表,它依據基本表存在而存在。一個視圖可以對應一個基本表,也可以對應多個基本表。視圖是基本表的抽象和在邏輯意義上建立的新關系
區別:1、視圖是已經編譯好的sql語句。而表不是 
2、視圖沒有實際的物理記錄。而表有。 
3、表是內容,視圖是窗口 
4、表只用物理空間而視圖不佔用物理空間,視圖只是邏輯概念的存在,表可以及時四對它進行修改,但視圖只能有創建的語句來修改 
5、表是內模式,視圖是外模式 
6、視圖是查看數據表的一種方法,可以查詢數據表中某些欄位構成的數據,只是一些SQL語句的集合。從安全的角度說,視圖可以不給用戶接觸數據表,從而不知道表結構。 
7、表屬於全局模式中的表,是實表;視圖屬於局部模式的表,是虛表。 
8、視圖的建立和刪除隻影響視圖本身,不影響對應的基本表。
㈨ Oracle資料庫的面試題目及答案
Oracle資料庫的面試題目及答案
基礎題目:
  
  
1. 比較truncate和 命令
解答:兩者都可以用來刪除表中所有的記錄。區別在於:truncate是DDL操作,它移動HWK,不需要 rollback segment .
而Delete是DML操作, 需要rollback segment 且花費較長時間.
【相同點
truncate和不帶where子句的, 以及drop都會刪除表內的數據
不同點:
1. truncate和 只姿轎刪除數據不刪除表的結構(定跡談肆義)
drop語句將刪除表的結構被依賴的約束(constrain),觸發器(trigger),索引(index); 依賴於該表的.存儲過程/函數將保留,
但是變為invalid狀態.
2.語句是dml,這個操作會放到rollback segement中,事務提交之後才生效;如果有相應的trigger,執行的時候將被觸發.
truncate,drop是ddl, 操作立即生效,原數據不放到rollback segment中,不能回滾. 操作不觸發trigger.
3.語句不影響表所佔用的extent, 高水線(high watermark)保持原位置不動
顯然drop語句將表所佔用的空間全部釋放
truncate 語句預設情況下見空間釋放到 minextents個 extent,除非使侍渣用reuse storage; truncate會將高水線復位(回到最開始).
4.速度,一般來說: drop>; truncate >;
5.安全性:小心使用drop 和truncate,尤其沒有備份的時候.否則哭都來不及
使用上,想刪除部分數據行用,注意帶上where子句. 回滾段要足夠大.
想刪除表,當然用drop
想保留表而將所有數據刪除. 如果和事務無關,用truncate即可. 如果和事務有關,或者想觸發trigger,還是用.
如果是整理表內部的碎片,可以用truncate跟上reuse stroage,再重新導入/插入數據
】
2.Oracle中,需要在查詢語句中把空值(NULL)輸出為0,如何處理?
答案:nvl(欄位,0).
nvl( ) 函數
從兩個表達式返回一個非 null 值。
語法
NVL(eExpression1, eExpression2)
參數
eExpression1, eExpression2
如果 eExpression1 的計算結果為 null 值,則 NVL( ) 返回 eExpression2。如果 eExpression1 的計算結果不是 null 值,
則返回 eExpression1。eExpression1 和 eExpression2 可以是任意一種數據類型。如果 eExpression1 與 eExpression2
的結果皆為 null 值,則 NVL( ) 返回 .NULL.。
返回值類型
字元型、日期型、日期時間型、數值型、貨幣型、邏輯型或 null 值
說明
在不支持 null 值或 null 值無關緊要的情況下,可以使用 NVL( ) 來移去計算或操作中的 null 值。
select nvl(a.name,空得) as name from student a join school b on a.ID=b.ID
注意:兩個參數得類型要匹配
3.Oracle中char和varchar2數據類型有什麼區別?有數據」test」分別存放到10)和varchar2(10)類型的欄位中,
其存儲長度及類型有何區別?
答案:
區別: 1).CHAR的長度是固定的,而VARCHAR2的長度是可以變化的, 比如,存儲字元串「test",對於CHAR (10),
 
  
