mysql 存储过程循环一张表的所有记录_MySQL数据库知识汇总
MySQL是一個開源的關系型數據庫,是最受歡迎的開源軟件之一,現在很多網站的數據庫都是使用MySQL。Web程序開發是Python的一個重要方向,也因此很多企業在招聘Python工程師時都會考察其對MySQL的掌握,接下來就給大家分享MySQL數據庫相關的知識點。
1、MySQL數據庫存儲過程和函數的區別
存儲過程和函數是事先經過編譯并存儲在數據庫中的一段SQL語句的集合,二者的區別在于函數必須有返回值,而存儲過程沒有;函數的參數只能是IN類型,存儲過程的參數可以使用IN、OUT、INOUT類型。
2、分庫與分表設計
分庫與分表的目的在于減小數據庫的單庫單表負擔,提高查詢性能,縮短查詢時間。通過分表,可以減少數據庫的單表負擔,將壓力分散到不同的表上,同時因為不同的表上的數據量少了,起到提高查詢性能,縮短查詢時間的作用,此外,可以很大的緩解表鎖的問題。
分表策略可以歸納為垂直拆分和水平拆分。
水平分表:取模分表就屬于隨機分表,而時間維度分表則屬于連續分表。
如何設計好垂直拆分,建議將不常用的字段單獨拆分到另外一張擴展表. 將大文本的字段單獨拆分到另外一張擴展表, 將不經常修改的字段放在同一張表中,將經常改變的字段放在另一張表中。
對于海量用戶場景,可以考慮取模分表,數據相對比較均勻,不容易出現熱點和并發訪問的瓶頸。庫內分表,僅僅是解決了單表數據過大的問題,但并沒有把單表的數據分散到不同的物理機上,因此并不能減輕 MySQL 服務器的壓力,仍然存在同一個物理機上的資源競爭和瓶頸,包括CPU、內存、磁盤IO、網絡帶寬等。
自行車
3、聚集索引與非聚集索引的區別
聚集索引和非聚集索引的根本區別是表記錄的排列順序和與索引的排列順序是否一致。 聚集索引(innodb)的葉節點就是數據節點,而非聚集索引(myisAM)的葉節點仍然是索引節點,只不過其包含一個指向對應數據塊的指針。
4、事務四大特性(ACID)
原子性:一個事務(transaction)中的所有操作,要么全部完成,要么全部不完成,不會結束在中間某個環節。事務在執行過程中發生錯誤,會被恢復(Rollback)到事務開始前的狀態,就像這個事務從來沒有執行過一樣。
一致性:在事務開始之前和事務結束以后,數據庫的完整性沒有被破壞。這表示寫入的資料必須完全符合所有的預設規則,這包含資料的精確度、串聯性以及后續數據庫可以自發性地完成預定的工作。
隔離性:數據庫允許多個并發事務同時對其數據進行讀寫和修改的能力,隔離性可以防止多個事務并發執行時由于交叉執行而導致數據的不一致。事務隔離分為不同級別,包括讀未提交(Read uncommitted)、讀提交(read committed)、可重復讀(repeatable read)和串行化(Serializable)。
持久性:事務處理結束后,對數據的修改就是永久的,即便系統故障也不會丟失。
5、事務的并發?事務隔離級別,每個級別會引發什么問題,MySQL默認是哪個級別?
臟讀是指在一個事務處理過程中讀取了另一個事務未提交的數據。
不可重復讀:對于數據庫中的某個數據,一個事務范圍內多次查詢卻返回了不同的數據值。
幻讀:事務非獨立執行時發生的一種現象,即在一個事務讀的過程中,另外一個事務可能插入了新數據記錄,影響了該事務讀的結果。
MySQL的默認隔離級別就是Repeatable read,可重復讀。
從理論上來說, 事務應該彼此完全隔離, 以避免并發事務所導致的問題,然而,那樣會對性能產生極大的影響, 因為事務必須按順序運行,在實際開發中,為了提升性能,事務會以較低的隔離級別運行, 事務的隔離級別可以通過隔離事務屬性指定。
總結
以上是生活随笔為你收集整理的mysql 存储过程循环一张表的所有记录_MySQL数据库知识汇总的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python居中对齐代码end_Pyth
- 下一篇: 600 imp oracle_oracl