資料庫知識點
是否瞭解記憶體資料庫。
顧名思義就是將資料放在記憶體中直接操作的資料庫。
相對於磁碟(傳統的資料庫管理系統把所有資料都放在磁碟上進行管理,所以稱做磁碟資料庫)
記憶體的資料讀寫速度要高出幾個數量級,因此記憶體資料庫的最大特點就是效能好,速度快。
由於記憶體在系統中是稀缺的資源,因此記憶體資料庫的容量大小受實體記憶體的限制,而記憶體資料庫也會被要求根據靈活的策略與磁碟資料庫進行資料同步。安全性的問題可以說是記憶體資料庫最大的硬傷。
因為記憶體本身有掉電丟失的天然缺陷。因此我們在使用記憶體資料庫的時候,
通常需要,提前對記憶體上的資料採取一些保護機制,比如備份,記錄日誌,熱備或叢集,與磁碟資料庫同步等方式。
記憶體資料庫做為優秀記憶體資料庫完全可以單獨使用,並做好容災以及擴充等。電信行業普遍在用。
1、觸發器的作用。
答:觸發器是一中特殊的預存程序,主要是通過事件來觸發而被執行的。它可以強化約束,來維護資料的完整性和一致性,
可以追蹤資料庫內的操作從而不允許未經許可的更新和變化。可以聯級運算。如,某表上的觸發器上包含對另一個表的資料操作,而該操作又會導致該表觸發器被觸發。
2、什麼是預存程序。用什麼來調用。
答:預存程序是一個先行編譯的SQL語句,優點是允許模組化的設計,就是說只需建立一次,以後在該程式中就可以調用多次。
如果某次操作需要執行多次SQL,使用預存程序比單純SQL語句執行要快。可以用一個命令對象來調用預存程序。
3、索引的作用。和它的優點缺點是什麼。
答:索引就一種特殊的查詢表,資料庫的搜尋引擎可以利用它加速對資料的檢索。它很類似與現實生活中書的目錄,不需要查詢整本書內容就可以找到想要的資料。
索引可以是唯一的,建立索引允許指定單個列或者是多個列。缺點是它減慢了資料錄入的速度,同時也增加了資料庫的尺寸大小。
4、什麼是記憶體流失。
答:一般我們所說的記憶體流失指的是堆記憶體的泄漏。堆記憶體是程式從堆中為其分配的,大小任意的,使用完後要顯示釋放記憶體。
當應用程式用關鍵字new等建立對象時,就從堆中為它分配一塊記憶體,使用完後程式調用free或者delete釋放該記憶體,否則就說該記憶體就不能被使用,我們就說該記憶體被泄漏了。
5、維護資料庫的完整性和一致性,你喜歡用觸發器還是自寫商務邏輯。為什麼。
答:我是這樣做的,儘可能使用約束,如check,主鍵,外鍵,非空欄位等來約束,這樣做效率最高,也最方便。其次是使用觸發器,這種方法可以保證,無論什麼業務系統訪問資料庫都可以保證資料的完整新和一致性。最後考慮的是自寫商務邏輯,但這樣做麻煩,編程複雜,效率低下。
6、什麼是事務。什麼是鎖。
答:事務就是被綁定在一起作為一個邏輯工作單元的SQL語句分組,如果任何一個語句操作失敗那麼整個操作就被失敗,以後操作就會復原到操作前狀態,或者是上有個節點。為了確保要麼執行,要麼不執行,就可以使用事務。要將有組語句作為事務考慮,
就需要通過ACID測試,即原子性,一致性,隔離性和持久性。鎖:在DBMS中,鎖是實現事務的關鍵,鎖可以保證事務的完整性和並發性。與現實生活中鎖一樣,它可以使某些資料的擁有者,在某段時間內不能使用某些資料或資料結構。當然鎖還分層級的。
7、什麼叫視圖。遊標是什麼。
答:視圖是一種虛擬表,具有和物理表相同的功能。可以對視圖進行增,改,查,操作,視圖通常是有一個表或者多個表的行或列的子集。
對視圖的修改不影響基本表。它使得我們擷取資料更容易,相比多表查詢。
遊標:是對查詢出來的結果集作為一個單元來有效處理。遊標可以定在該單元中的特定行,從結果集的當前行檢索一行或多行。
可以對結果集當前行做修改。一般不使用遊標,但是需要逐條處理資料的時候,遊標顯得十分重要。
8.說說分庫與分表設計
對於訪問極為頻繁且資料量巨大的單表來說,我們首先要做的就是減少單表的記錄條數,以便減少資料查詢所需要的時間,提高資料庫的吞吐,這就是所謂的分表。
面對高並發的讀寫訪問,對資料庫進行拆分,從而提高資料庫寫入能力,這就是所謂的分庫!
情境:有時資料庫可能既面臨著高並發訪問的壓力,又需要面對海量資料的儲存問題,這時需要對資料庫既採用分表策略,又採用分庫策略,以便同時擴充系統的並發處理能力,以及提升單表的查詢效能,這就是所謂的分庫分表。
分庫與分錶帶來的分布式困境與應對之策
資料移轉與擴容,表關聯,分頁和排序,分散式交易,分布式全域唯一ID等問題。
9.說說 SQL 最佳化之道
對查詢進行最佳化,要盡量避免全表掃描,首先應考慮在where 及 order by 涉及的列上建立索引。exists代替 in ,具體的欄位列表代替*,避免使用遊標,因為遊標的效率較差,盡量避免大事務操作,提高系統並發能力,Update語句,如果只更改1、2個欄位,不要Update全部欄位。
10.資料庫常用的函數有哪些。
----統計函數----
AVG --求平均值
COUNT --統計數目
MAX --求最大值
MIN --求最小值
SUM --求和
----日期函數----
DAY() --函數返回date_expression 中的日期值
MONTH() --函數返回date_expression 中的月份值
YEAR() --函數返回date_expression 中的年份值
DATENAME(<datepart> , <date>) --函數以字串的形式返回日期的指定部分
DATEPART(<datepart> , <date>) --函數以整數值的形式返回日期的指定部分
----字串函數----
ASCII() --函數返回字元運算式最左端字元的ASCII 碼值
CHAR() --函數用於將ASCII 碼轉換為字元
--如果沒有輸入0 ~ 255 之間的ASCII 碼值CHAR 函數會返回一個NULL 值
LOWER() --函數把字串全部轉換為小寫
UPPER() --函數把字串全部轉換為大寫
STR() --函數把數值型資料轉換為字元型資料
LTRIM() --函數把字串頭部的空格去掉
RTRIM() --函數把字串尾部的空格去掉
sql命令大全
1、建立資料庫 create database database-name
2、刪除資料庫 drop database dbname
3、備份sql server
--- 建立備份資料的 device
use master
exec sp_addumpdevice 'disk', 'testBack','c:\mssql7backup\MyNwind_1.dat'
--- 開始備份
BACKUP database pubs TO testBack
4、建立新表create table tabname(col1 type1 [not null][primary key],col2 type2 [not null],..)
根據已有的表建立新表:
A:create table tab_new like tab_old (使用舊錶建立新表)
B:create table tab_new as select col1,col2… fromtab_old definition only
5、刪除新表 drop table tabname
6、增加一個列alter table tabname add column colType
註:列增加後將不能刪除,唯一能改變的是增加varchar類型的長度。
7、添加(刪除)主鍵: alter table tabname add (drop) primarykey(col)
8、建立索引:create [unique] index idxname on tablename(col….)
刪除索引:dropindex idxname
註:索引是不可更改的,想更改必須刪除重建立。
9、建立(刪除)視圖:create(drop) view viewname as select statement
10、說明:幾個簡單的基本的sql語句
選擇:select * from table1where 範圍
插入:insert intotable1(field1,field2) values(value1,value2)
刪除:delete from table1where 範圍
更新:update table1 setfield1=value1 where 範圍
尋找:select * from table1where field1 like ’%value1%’
排序:select * from table1order by field1,field2 [desc]
總數:select count astotalcount from table1
求和:select sum(field1) assumvalue from table1
平均:select avg(field1) asavgvalue from table1
最大:select max(field1) asmaxvalue from table1
最小:select min(field1) asminvalue from table1
行列轉化(max (casewhen else))
select Student as'姓名',
max(case Subjectwhen '語文' then Score else 0 end) as '語文' ,
max(case Subjectwhen '英語' then Score else 0 end ) as '英語'
from Scores groupby Student
11、說明:幾個進階查詢運算詞
A: UNION 運算子
UNION 運算子通過組合其他兩個結果表(例如 TABLE1 和 TABLE2)並消去表中任何重複行而派生出一個結果表。
當 ALL 隨 UNION 一起使用時(即UNION ALL),不消除重複行。兩種情況下,派生表的每一行不是來自 TABLE1 就是來自 TABLE2。
B: EXCEPT 運算子
EXCEPT運算子通過包括所有在 TABLE1 中但不在 TABLE2 中的行並消除所有重複行而派生出一個結果表。
當 ALL 隨 EXCEPT一起使用時 (EXCEPT ALL),不消除重複行。
C: INTERSECT 運算子
INTERSECT運算子通過只包括 TABLE1 和 TABLE2 中都有的行並消除所有重複行而派生出一個結果表。
當 ALL隨INTERSECT 一起使用時 (INTERSECT ALL),不消除重複行。
註:使用運算詞的幾個查詢結果行必須是一致的。
12、說明:使用外串連
A、left (outer) join:
左外串連(左串連):結果集幾包括串連表的匹配行,也包括左串連表的所有行。
SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT JOIN bON a.a = b.c
B:right (outer) join:
右外串連(右串連):結果集既包括串連表的匹配串連行,也包括右串連表的所有行。
C:full/cross (outer) join:
全外串連:不僅包括符號串連表的匹配行,還包括兩個串連表中的所有記錄。
12、分組:Group by (having):
一張表,一旦分組完成後,查詢後只能得到組相關的資訊。
組相關的資訊:(統計資訊) count,sum,max,min,avg 分組的標準)
13、對資料庫進行操作:
分離資料庫:sp_detach_db;附加資料庫:sp_attach_db 後接表明,附加需要完整的路徑名
14.如何修改資料庫的名稱:
sp_renamedb 'old_name', 'new_name'