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