221.【查】分頁:limit start, count或者limit count。如果查詢出來的結(jié)果數(shù)量不足這里的count,則按查詢出來多少就展示多少。這里的start可以有一個通用的公式:start = (第n頁-1) * 每一頁個數(shù)。
222.若要limit分頁,則永遠(yuǎn)limit在查詢語句的最后,否則會報錯!
223.外鍵約束,外鍵的值只能是該外鍵指向的表的主鍵中的值,不是主鍵的值的則報錯!
224.【查】內(nèi)連接inner join...on 條件:
select 表1.*, 表2.* from 表1 inner join 表2 on 表1.department_id=表2.id order by 表1.department_id;
根據(jù)表1的department_id字段去表2中查詢,如果兩者的值都有且對的上則展示,最終按表1中department_id的字段升序排序。
說明:最終查找結(jié)果展示哪些信息,就在select 表1.*, 表2.*這里控制的,這種寫法是兩張表中的全部信息都顯示。
225.【查】左連接left join...on 條件:
select 表1.*, 表2.* from 表1 left join 表2 on 表1.department_id=表2.id order by 表1.department_id having 條件;
哪張表寫在left join左邊,就以誰為基準(zhǔn),在另一個表查找不到數(shù)據(jù)時,另一表中的字段展示為null。
同理,右連接。一般右連接都可以用左連接實現(xiàn),只需要換一下表的書寫位置。
226.自關(guān)聯(lián):一個表中的某個字段存儲的值和另一個字段的值有關(guān),這種稱為自關(guān)聯(lián)。常見的省市縣、部門等可把表設(shè)計為自關(guān)聯(lián)數(shù)據(jù)表。
227.子查詢:一個查詢條件語句中嵌套了另一個查詢語句。
228.對同一需求來實現(xiàn)查詢語句可以有多種實現(xiàn)方式,不同的是當(dāng)數(shù)據(jù)量非常大時,可能在查詢效率上有不同。
229.MySQL在Python2和Python3中模塊明發(fā)生了變化:Python2中數(shù)據(jù)庫模塊為:MySQLdb;Python3中數(shù)據(jù)庫模塊為:pymysql。
230.pip install xxx如果這里xxx指定的是一個文件路徑,則根據(jù)路徑安裝模塊;如果這里的xxx是一個模塊名,則從網(wǎng)絡(luò)下載。
231.Python中使用MySQL非常簡單:
# 導(dǎo)入模塊
from pymysql import *
# 創(chuàng)建連接對象(通過該對象連接數(shù)據(jù)庫,通過該對象獲取游標(biāo)對象)
conn = connect(host="localhost", port=3306, user="root", password="xxxxx", database="xxxx", chaset="utf8")
#獲取游標(biāo)對象(用該游標(biāo)對象,就可以執(zhí)行SQL語句了)
cursor = conn.cursor()
......(省略若干SQL語句操作cursor.excute("這里寫要執(zhí)行的sql語句"))
#關(guān)閉游標(biāo)對象
cursor.close()
#關(guān)閉連接對象
conn.close()
232.cursor.fetchone()每調(diào)用一次返回一個元組格式的數(shù)據(jù)、cursor.fetchmany(n)返回n條由n個元組數(shù)據(jù)組成的元組,若n不傳,則默認(rèn)返回由1個元組數(shù)據(jù)組成的元組、cursor.fetchall()返回所有的執(zhí)行語句得到的數(shù)據(jù)。
233.mysql的引擎InnoDB支持行級別的鎖,增刪改時一定記得要調(diào)用連接對象的conn.commit(),增刪改才會真正生效。不調(diào)用連接對象的conn.commit(),表中的自增主鍵的值也會自增,但此時數(shù)據(jù)是并未寫入數(shù)據(jù)庫的。
234.想要反悔增刪改操作,調(diào)用連接對象的conn.rollback()進(jìn)行回滾即可;想要確認(rèn)增刪改操作,用連接對象的conn.commit()即可。
235.對于主鍵的自增,建議一直讓其自增下去即可,不要讓其回頭。否則,自己給自己挖坑。
236.盡量防止SQL注入:不要自己去拼接SQL語句,而是讓cursor.excute("""select * from 表名 where name=%s""", [實參])
237.視圖:說白了就是一張?zhí)摂M的表,是查詢語句查詢出來的結(jié)果。只需要在原來查詢語句的前面加上create view 視圖名 as 查詢語句;
238.視圖專門用來方便查數(shù)據(jù)的,改視圖中的數(shù)據(jù)是無法修改成功的。
239.視圖中的數(shù)據(jù)并不是備份,而是當(dāng)我們查詢視圖時,視圖實時的查詢與其關(guān)鍵的數(shù)據(jù)表中的數(shù)據(jù)。
240.在實際開發(fā)時,查詢數(shù)據(jù)推薦使用視圖,且推薦視圖名前加上view_或v_作為前綴,以方便區(qū)分這是一個視圖,而不是真是的數(shù)據(jù)表。