事務的隔離級別的分類
(1)讀未提交(read uncommitted),乙個事務可以讀取另乙個未提交事務的資料,最低級別,任何情況都無法保證。
(2)讀已提交(read committed),乙個事務要等另乙個事務提交後才能讀取資料,可避免髒讀的發生。
(3)可重複讀(repeatable read),就是在開始讀取資料(事務開啟)時,不再允許修改操作,可避免髒讀、不可重複讀的發生。
(4)序列(serializable),是最高的事務隔離級別,在該級別下,事務序列化順序執行,可以避免髒讀、不可重複讀與幻讀。但是這種事務隔離級別效率低下,比較耗資料庫效能,一般不使用。
mysql的預設隔離級別是可重複讀(repeatable read)。
髒讀、不可重複讀和幻讀的區別
髒讀:事務a讀取了事務b更新的資料,然後b回滾操作,那麼a讀取到的資料是髒資料;
不可重複讀:事務 a 多次讀取同一資料,事務 b 在事務a多次讀取的過程中,對資料作了更新並提交,導致事務a多次讀取同一資料時資料結果會不一致;
幻讀:幻讀解決了不可重複讀,保證了同乙個事務裡,查詢的結果都是事務開始時的狀態(一致性);
innodb引擎的4大特性
(1)插入緩衝(insert buffer);(2)二次寫(double write);(3)自適應雜湊索引(ahi);(4)預讀(read ahead)。
mysql中的myisam與innodb的區別
(1)innodb支援事務,而myisam不支援事務;
(2)innodb支援行級鎖,而myisam支援表級鎖;
(3)innodb支援mvcc,而myisam不支援;
(4)innodb支援外來鍵,而myisam不支援;
(5)innodb不支援全文索引,而myisam支援;
(6)innodb不能通過直接拷貝表檔案的方法拷貝表到另外一台機器, myisam 支援;(7)innodb表支援多種行格式, myisam 不支援;
(8)innodb是索引組織表, myisam 是堆表;
sql語句優化的方式,至少五種
(1)避免使用select *,而是將需要查詢的字段列出來進行查詢;
(2)使用連線(join)來代替子查詢;
(3)拆分大的delete或insert語句;
(4)使用limit對查詢結果的記錄進行限定;
(5)用 exists 代替 in 是乙個好的選擇;
(6)不要在 where 子句中的「=」左邊進行函式、算術運算或其他表示式運算,否則系統將可能無法正確使用索引
(7)盡量避免在where 子句中對字段進行 null 值判斷、使用 or 來連線條件和使用!=或<>操作符,否則將導致引擎放棄使用索引而進行全表掃瞄;
表結構優化,至少五種
(1)永遠為每張表設定乙個id;
(2)選擇正確的儲存引擎 ;
(3)使用可存下資料的最小的資料型別;
(4)使用簡單的資料型別,整型比字串處理開銷更小,因為字串的比較更複雜。
(5)使用合理的字段屬性長度,固定長度的表會更快。
(6)使用enum、char而不是varchar;
(7)盡可能使用not null定義字段(給空欄位設定預設值);
(8)盡量少用text;
(9)給頻繁使用和查詢的字段建立合適的索引;
union、union all的區別
(1)對重複結果的處理:union在進行表鏈結後會篩選掉重複的記錄,union all不會去除重覆記錄;
(2)對排序的處理:union將會按照欄位的順序進行排序;union all只是簡單的將兩個結果合併後就返回;
(3)從效率上說,union all 要比union快很多。
什麼是儲存過程?用什麼來呼叫?
儲存過程是乙個預編譯的sql 語句,優點是允許模組化的設計,就是說只需建立一次,以後在該程式中就可以呼叫多次。如果某次操作需要執行多次sql ,使用儲存過程比單純sql 語句執行要快。可以用乙個命令物件來呼叫儲存過程。
什麼是觸發器?觸發器的作用?
觸發器是比較特殊的儲存過程,主要是通過事件來觸發而被執行的。它可以強化約束,來維護資料的完整性和一致性,可以跟蹤資料庫內的操作,從而不允許未經許可的更新和變化。可以聯級運算。如,某錶上的觸發器上包含對另乙個表的資料操作,而該操作又會導致該錶觸發器被觸發。
儲存過程與觸發器的區別
觸發器與儲存過程非常相似,觸發器也是sql語句集,兩者唯一的區別是觸發器不能用execute語句呼叫,而是在使用者執行transact-sql語句時自動觸發(啟用)執行。觸發器是在乙個修改了指定表中的資料時執行的儲存過程。
通常通過建立觸發器來強制實現不同表中的邏輯相關資料的引用完整性和一致性。由於使用者不能繞過觸發器,所以可以用它來強制實施複雜的業務規則,以確保資料的完整性。
觸發器不同於儲存過程,觸發器主要是通過事件執行觸發而被執行的,而儲存過程可以通過儲存過程名稱名字而直接呼叫。當對某一表進行諸如update、insert、delete這些操作時,sql server就會自動執行觸發器所定義的sql語句,從而確保對資料的處理必須符合這些sql語句所定義的規則。
索引的作用和其優缺點
索引就一種特殊的查詢表,資料庫的搜尋引擎可以利用它加速對資料的檢索。它很類似與現實生活中書的目錄,不需要查詢整本書內容就可以找到想要的資料。
索引可以是唯一的,建立索引允許指定單個列或者是多個列。缺點是它減慢了資料錄入的速度,同時也增加了資料庫的大小。
什麼是外來鍵,其優缺點是什麼?
外鍵指的是外來鍵約束,目的是保持資料一致性,完整性,控制儲存在外鍵表中的資料。使兩張表形成關聯,外來鍵只能引用外表中列的值;
優點:由資料庫自身保證資料一致性,完整性,更可靠,因為程式很難100%保證資料的完整性,而用外來鍵即使在資料庫伺服器當機或者出現其他問題的時候,也能夠最大限度的保證資料的一致性和完整性。有主外來鍵的資料庫設計可以增加er圖的可讀性,這點在資料庫設計時非常重要。外來鍵在一定程度上說明的業務邏輯,會使設計周到具體全面。缺點:可以用觸發器或應用程式保證資料的完整性;過分強調或者說使用外來鍵會平添開發難度,導致表過多,更改業務困難,擴充套件困難等問題;不用外來鍵時資料管理簡單,操作方便,效能高(匯入匯出等操作,在insert, update, delete 資料的時候更快)。
什麼叫檢視?游標是什麼?
檢視是一種虛擬的表,具有和物理表相同的功能;可以對檢視進行增,改,查等操作,但是主要是為了查詢。檢視通常是有乙個表或者多個表的行或列的子集。對檢視的修改不影響基本表。相比多表查詢,它使得我們獲取資料更容易和迅速。
游標:是對查詢出來的結果集作為乙個單元來有效的處理。游標可以定在該單元中的特定行,從結果集的當前行檢索一行或多行。可以對結果集當前行做修改。一般不使用游標,但是需要逐條處理資料的時候,游標顯得十分重要。
總結 日常總結
最近變得浮躁了,學不進了,那就寫總結吧。關於刷題 從去年十一月份到現在,感覺唯一堅持的意見事情就是刷力扣了。四個多月,寫了六百多道題,大概有四五題一天,然後也在堅持參加周賽。很多時候,有些事情成了習慣,那麼也就不需要去堅持了。比如說現在,每天都是先把每日一題和劍指 offer 的任務完成了再開始做其...
日常學習總結
關於vb中的把字串 日期型 數值型 賦值給某個變數的寫法 eg dim m1,r 此處我並不清楚 m1 到底是什麼型別 所以vb會自動匹配其應該所屬的型別,這是vb的一點強大之處 m select fitemid from t item where fitemclassid 3 and fnumbe...
Android日常總結
個人在此記錄一下.2,有時候 出現了異常,但是androidstudio並不列印錯誤資訊.這時候,我們可以通過斷點來除錯,如果斷點走到某一步了,不繼續往下面走,說名剛剛的那行 有問題,比如說textview.settext 1 textview設定乙個int值,這時系統可能沒有列印錯誤日誌.3,在l...