亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運營的一線實戰(zhàn)洞察。

MySQL學(xué)生成績管理系統(tǒng):從建庫建表到索引優(yōu)化全實踐

MySQL學(xué)生成績管理系統(tǒng):從建庫建表到索引優(yōu)化全實踐 做項目的人對“管理系統(tǒng)”三個字應(yīng)該都不陌生學(xué)生成績管理系統(tǒng)MySQL更是課程設(shè)計、畢業(yè)設(shè)計里的??汀N疫@次做的這套系統(tǒng)表面上看就是記錄“哪個學(xué)生哪門課考了多少分”但真正做下來你會發(fā)現(xiàn)它幾乎能把MySQL的核心功能都串一遍三張表的關(guān)系建模、增刪改查、排序分頁、聚合統(tǒng)計、事務(wù)、存儲過程、視圖、索引優(yōu)化、權(quán)限管理、部署排錯一個都不少。這篇文章我就以這個項目為載體把從建庫建表到優(yōu)化排錯的全過程整理出來。它適合兩類人一類是準備交課程設(shè)計的學(xué)生可以直接照著建表、抄SQL另一類是剛學(xué)完MySQL基礎(chǔ)、想找個小項目練手的開發(fā)者跟著走一遍對數(shù)據(jù)庫的理解會扎實很多。1. 先設(shè)計數(shù)據(jù)庫學(xué)生成績系統(tǒng)到底需要幾張表1.1 需求梳理成績系統(tǒng)核心業(yè)務(wù)就三件事我見過不少同學(xué)拿到“學(xué)生成績管理系統(tǒng)”這個題目后第一反應(yīng)就是打開Navicat新建一張表把所有字段堆進去學(xué)生姓名、學(xué)號、課程、成績、老師、班級……做出來的東西能交差但一追問“怎么統(tǒng)計某門課的平均分”就開始卡殼加字段、拆表、改代碼返工成本極高。其實冷靜下來想學(xué)生成績管理系統(tǒng)的業(yè)務(wù)可以拆成這么幾件事管理學(xué)生信息增刪改查、管理課程信息增刪改查、錄入成績、修改成績、查詢成績、統(tǒng)計成績平均分、排名、及格率。就這么幾件事根本不需要把表設(shè)計得天花亂墜。關(guān)鍵在于——學(xué)生和課程是兩類獨立的實體而成績是學(xué)生和課程之間的關(guān)系。如果直接把“課程名”寫在“學(xué)生表”里那一個學(xué)生選幾門課就要在一條記錄里塞幾個課程字段或者干脆一行一個學(xué)生一個分數(shù)班里有五十個學(xué)生每人選五門課就要新建二百五十行學(xué)生改個手機號就得同步改五條記錄。這種平鋪式的設(shè)計在數(shù)據(jù)量小的時候看不出毛病一旦數(shù)據(jù)量上來維護成本會呈指數(shù)上升。關(guān)系型數(shù)據(jù)庫的核心優(yōu)勢就是處理實體與實體之間的關(guān)系而“學(xué)生成績管理系統(tǒng)”恰恰是最純正的關(guān)系模型場景學(xué)生是一類實體課程是一類實體成績記錄的是“哪個學(xué)生選了哪門課、考了多少分”。這個關(guān)系單獨建一張表就形成了最經(jīng)典的三表結(jié)構(gòu)后續(xù)寫任何查詢都很順暢。1.2 三張核心表的設(shè)計與字段選擇細節(jié)說具體的。我這次項目的建表語句如下后面每個字段都值得解釋一下為什么這么選。CREATE DATABASE student_score_system DEFAULT CHARSETutf8mb4 COLLATEutf8mb4_unicode_ci; USE student_score_system; CREATE TABLE student ( id INT PRIMARY KEY AUTO_INCREMENT, student_no VARCHAR(20) NOT NULL UNIQUE COMMENT 學(xué)號, name VARCHAR(50) NOT NULL, gender TINYINT DEFAULT 0 COMMENT 0男 1女, class_name VARCHAR(50), phone VARCHAR(15), created_at DATETIME DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT學(xué)生表; CREATE TABLE course ( id INT PRIMARY KEY AUTO_INCREMENT, course_no VARCHAR(20) NOT NULL UNIQUE COMMENT 課程編號, course_name VARCHAR(100) NOT NULL, credit DECIMAL(3,1) DEFAULT 0 COMMENT 學(xué)分, teacher VARCHAR(50), semester VARCHAR(20) COMMENT 開課學(xué)期如2025-2026-1 ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT課程表; CREATE TABLE score ( id INT PRIMARY KEY AUTO_INCREMENT, student_id INT NOT NULL, course_id INT NOT NULL, score DECIMAL(5,1) COMMENT 成績保留1位小數(shù), exam_type VARCHAR(20) DEFAULT 期末 COMMENT 平時/期中/期末, exam_date DATE, created_at DATETIME DEFAULT CURRENT_TIMESTAMP, CONSTRAINT fk_score_student FOREIGN KEY (student_id) REFERENCES student(id) ON DELETE CASCADE, CONSTRAINT fk_score_course FOREIGN KEY (course_id) REFERENCES course(id) ON DELETE CASCADE, UNIQUE KEY uk_student_course (student_id, course_id, exam_type) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT成績表;幾個容易踩坑的選擇學(xué)生編號用VARCHAR(20)而不是INT因為學(xué)號經(jīng)常會以0開頭比如“030125”這種編號存成INT會變成30125前導(dǎo)零直接丟失而且學(xué)號本身不需要做加減運算用數(shù)值類型沒有任何好處。手機號、課程編號這類字段同理。score用DECIMAL(5,1)不用FLOAT/DOUBLE。浮點數(shù)在二進制里存的是一個近似值0.10.2會得到0.30000000000000004成績單里出現(xiàn)這種結(jié)果很容易讓人誤以為系統(tǒng)算錯了。DECIMAL是定點數(shù)按十進制存儲涉及分數(shù)這種要精確計算的數(shù)據(jù)必須用它。gender用TINYINT而不是VARCHAR。別小看這個選擇用TINYINT存0/1比用VARCHAR存“男/女”節(jié)省存儲空間查詢時判斷也方便展示層再映射成文字。當然如果使用范圍非常固定用CHAR(1)存“男”“女”也不是不行但工程上我傾向于用編碼值。1.3 外鍵、唯一約束與字符集的取舍這個項目的設(shè)計階段最值得講的是三個點外鍵要不要加、唯一約束怎么用、字符集怎么選。外鍵在社區(qū)里其實有兩種聲音。課程設(shè)計場景我建議加外鍵它把“不能刪除已被引用課程”“不能插入不存在的學(xué)生ID”這類規(guī)則固化在數(shù)據(jù)庫里比業(yè)務(wù)代碼判斷可靠得多。生產(chǎn)環(huán)境高并發(fā)系統(tǒng)反而經(jīng)常不用外鍵因為外鍵會導(dǎo)致每一次插入都要去關(guān)聯(lián)表做一致性檢查在分庫分表之后外鍵基本沒法用。所以這不是“加不加”的問題而是場景決定方案。我用的ON DELETE CASCADE意思是刪除某個學(xué)生他的成績記錄自動刪除。這個行為在實際使用里非常順手但也有人覺得危險——萬一誤刪一個學(xué)生成績?nèi)扛鴽]了。作為課程設(shè)計完全沒問題如果站在更嚴謹?shù)慕嵌瓤梢愿某蒓N DELETE RESTRICT禁止直接刪除有成績記錄的學(xué)生強制你先處理成績數(shù)據(jù)。兩種策略各有適用場景關(guān)鍵是你要知道它們有什么區(qū)別。唯一約束uk_student_course (student_id, course_id, exam_type)是我特意加的。沒有它程序里稍微馬虎一點同一個學(xué)生同一門課的期末成績就可能錄兩遍最后統(tǒng)計的時候數(shù)據(jù)翻倍還很不好排查。數(shù)據(jù)庫層把唯一性卡住再配合后面講的存儲過程做校驗效果就會好很多。字符集選utf8mb4也是一個老生常談的問題了。MySQL的utf8其實是utf8mb3最多存3個字節(jié)像emoji以及一些生僻漢字會存不進去或者變成亂碼。成績管理系統(tǒng)里學(xué)生姓名出現(xiàn)生僻字是很正常的事所以必須用utf8mb4。排序規(guī)則我用的是utf8mb4_unicode_ci對大部分場景來說比較合適。2. 成績增刪改查的SQL實戰(zhàn)從成績單到統(tǒng)計報表2.1 錄入和修改成績CUD操作必須注意的數(shù)據(jù)校驗表和庫建好之后第一件事就是寫最基本的增刪改查。這些SQL看著簡單但里面有幾個細節(jié)會影響系統(tǒng)的健壯性。成績錄入的SQL很簡單INSERT INTO score (student_id, course_id, score, exam_type, exam_date) VALUES (1, 2, 88.5, 期末, 2025-06-30);但我還建議加上分數(shù)范圍的數(shù)據(jù)庫約束這樣在SQL層就擋掉了不必要的臟數(shù)據(jù)。MySQL 8.0.16以上版本支持真正強制的CHECK約束ALTER TABLE score ADD CONSTRAINT chk_score_range CHECK (score 0 AND score 100);如果你的項目用的是8.0以上版本建議加上這個約束。加了之后你寫INSERT語句插入120分MySQL直接報錯不用等應(yīng)用代碼走完才發(fā)現(xiàn)。5.7及以下版本只是解析語法但不強制執(zhí)行這點要注意。修改成績用UPDATE注意一定要帶WHERE條件。這句廢話幾乎每個踩坑的人都會聽到但依然很多人犯UPDATE score SET score 90 WHERE student_id 1 AND course_id 2 AND exam_type 期末;如果不帶WHERE就是把整張表所有成績都改成90了。這是個非常經(jīng)典的“生產(chǎn)事故”我在后面問題排查部分會再提。刪除成績也類似DELETE FROM score WHERE id 10務(wù)必確認WHERE條件。實際業(yè)務(wù)里我更推薦邏輯刪除也就是加一個deleted字段做標記而不是物理刪行——雖然對學(xué)生成績管理系統(tǒng)這種場景沒那么嚴格but這是項目里體現(xiàn)專業(yè)度的小細節(jié)。2.2 查詢與排序ORDER BY的各種坑查詢是最能體現(xiàn)SQL功力的地方。按成績從高到低排列一條SQL就能搞定SELECT student_id, course_id, score FROM score WHERE course_id 2 ORDER BY score DESC;這里要解釋一下ORDER BY的工作原理。MySQL在執(zhí)行沒有索引的排序時會把所有滿足條件的行讀出來放到sort buffer里做排序數(shù)據(jù)量一大就會出現(xiàn)filesort。如果查詢條件上有合適的索引MySQL可能直接按索引順序讀取避免額外的排序開銷也就不會有filesort。這部分細節(jié)在后面性能優(yōu)化章節(jié)值得展開。排序還有個實際的大坑成績字段是DECIMAL排序沒問題但如果有人當初把成績存成了VARCHAR排序結(jié)果會非常詭異比如90會排在100后面因為字符串排序按字典序比較100 9。這是把成績存成文本的經(jīng)典惡果建表的時候用對類型能從源頭避開。順便回答一個經(jīng)常被問到的問題OR能不能和DISTINCT一起用比如SELECT DISTINCT student_id FROM score WHERE course_id 1 OR course_id 2這個OR不會破壞DISTINCT的行為它作用于最終結(jié)果集。但真正的隱患是OR可能會讓某些索引失效尤其兩個條件不在同一個聯(lián)合索引里時MySQL容易退化成全表掃描——這個問題我放到4.1詳細說。2.3 多表聯(lián)查一張完整成績單的SQL寫法成績管理系統(tǒng)的報表頁通常需要把學(xué)生的姓名、班級、課程名、學(xué)分、成績一起展示出來。這就是典型的多表JOIN。實際項目中一鍵生成某個班的成績單可以這么寫SELECT s.student_no, s.name AS student_name, s.class_name, c.course_no, c.course_name, c.credit, sc.score, CASE WHEN sc.score 90 THEN 優(yōu)秀 WHEN sc.score 80 THEN 良好 WHEN sc.score 70 THEN 中等 WHEN sc.score 60 THEN 及格 ELSE 不及格 END AS grade_level FROM score sc JOIN student s ON sc.student_id s.id JOIN course c ON sc.course_id c.id WHERE s.class_name 計科2301 ORDER BY sc.score DESC;INNER JOIN在這里就夠了它只返回“有成績記錄”的行。如果還想把“沒考試”的學(xué)生也查出來就要用LEFT JOIN比如SELECT s.name, c.course_name, sc.score FROM student s CROSS JOIN course c LEFT JOIN score sc ON sc.student_id s.id AND sc.course_id c.id WHERE c.course_no CS101;這個查詢先把學(xué)生和課程做笛卡爾積然后通過LEFT JOIN去匹配成績沒考試的那些行score會是NULL正好表示缺考。這類查詢在“考勤確認”“查誰沒交卷”的場景里很實用。我習慣在報表查詢里用COALESCE(sc.score, 0)把NULL轉(zhuǎn)成0再給前端這樣展示層就不用來回處理空值了UIs邏輯會清爽很多。2.4 聚合統(tǒng)計平均分、及格率與排名報表的另一個大頭是統(tǒng)計。算一門課的平均分、最高分、最低分一條SQL完成SELECT AVG(score), MAX(score), MIN(score), COUNT(*) FROM score WHERE course_id 2;注意AVG會忽略NULL如果某個學(xué)生缺考沒有記錄他不會拉低平均分這通常是我們想要的效果。但如果你把缺考錄成了0分那就會把平均分拉低所以缺考狀態(tài)的記錄方式要提前定義好。按班級分組統(tǒng)計平均分是典型的分組聚合SELECT s.class_name, AVG(sc.score) AS avg_score FROM score sc JOIN student s ON sc.student_id s.id GROUP BY s.class_name;這里有個高頻踩坑點MySQL 5.7及以上默認開啟了ONLY_FULL_GROUP_BY模式如果你select了一個不在GROUP BY里的非聚合列SQL會直接報錯。比如上面那條SQL如果想順便select s.name抱歉報錯。這是SQL規(guī)范層面的強制要求很多新手在這里卡很久。算及格率就更有實際意義了SELECT COUNT(*) AS total, SUM(CASE WHEN score 60 THEN 1 ELSE 0 END) AS passed, CONCAT(ROUND(SUM(CASE WHEN score 60 THEN 1 ELSE 0 END) * 100.0 / COUNT(*), 2), %) AS pass_rate FROM score WHERE course_id 2;COUNT是總數(shù)SUM只對及格的行加1兩者一除就是及格率。用ROUND保留兩位小數(shù)再用CONCAT拼一個百分比符號前端展示就省事了。至于排名MySQL 8.0版本可以用窗口函數(shù)一行搞定SELECT student_id, course_id, score, RANK() OVER (PARTITION BY course_id ORDER BY score DESC) AS rank_no FROM score;RANK()遇到相同分數(shù)會并列排名且跳號比如兩個并列第一下一個就是第三名。如果不希望跳號用DENSE_RANK()希望嚴格按順序排用ROW_NUMBER()。這三個窗口函數(shù)的區(qū)別是MySQL面試里的高頻題你親手跑一遍就記住了。3. 加一點高級特性存儲過程、視圖和觸發(fā)器3.1 用存儲過程封裝成績錄入邏輯很多初學(xué)者寫系統(tǒng)所有SQL都寫在應(yīng)用程序里數(shù)據(jù)庫只當一個存儲介質(zhì)。這樣做當然沒問題但在“學(xué)生成績管理系統(tǒng)”這個項目里我強烈建議至少寫一個存儲過程因為錄入成績時會涉及到系統(tǒng)邏輯比如分數(shù)范圍校驗、重復(fù)記錄檢查、學(xué)生課程是否存在。把這些邏輯放在數(shù)據(jù)庫里應(yīng)用層調(diào)用只需要一行CALL維護起來非常方便。我錄成績用的存儲過程長這樣DELIMITER $$ CREATE PROCEDURE sp_add_score( IN p_student_no VARCHAR(20), IN p_course_no VARCHAR(20), IN p_score DECIMAL(5,1), IN p_exam_type VARCHAR(20), IN p_exam_date DATE ) BEGIN DECLARE v_student_id INT DEFAULT NULL; DECLARE v_course_id INT DEFAULT NULL; SELECT id INTO v_student_id FROM student WHERE student_no p_student_no; IF v_student_id IS NULL THEN SIGNAL SQLSTATE 45000 SET MESSAGE_TEXT 學(xué)生不存在; END IF; SELECT id INTO v_course_id FROM course WHERE course_no p_course_no; IF v_course_id IS NULL THEN SIGNAL SQLSTATE 45000 SET MESSAGE_TEXT 課程不存在; END IF; IF p_score 0 OR p_score 100 THEN SIGNAL SQLSTATE 45000 SET MESSAGE_TEXT 成績必須在0-100之間; END IF; INSERT INTO score (student_id, course_id, score, exam_type, exam_date) VALUES (v_student_id, v_course_id, p_score, p_exam_type, p_exam_date); END$$ DELIMITER ;調(diào)用方式極其簡單CALL sp_add_score(20250001, CS101, 92.5, 期末, 2025-06-30);這個存儲過程有三個細節(jié)值得講。SIGNAL語句是MySQL自定義報錯的標準方式。SQLSTATE 45000表示用戶自定義錯誤后面的MESSAGE_TEXT會顯示在報錯信息里。應(yīng)用程序捕獲到這個異常之后可以直接彈一個“學(xué)生不存在”的提示給用戶編排層面非常清晰。通過學(xué)號和課程編號來查ID調(diào)用的時候就不用先查ID再拼SQL把兩層查詢封裝成一層。不過要特別注意SELECT INTO如果查不到數(shù)據(jù)并不會把變量改成NULL而是保持變量原有值。所以我在變量聲明的地方直接寫了DEFAULT NULL不給它留舊值的機會這是存儲過程開發(fā)里的一個老坑。如果重復(fù)插入唯一約束會拋異常我認為在錄入成績這類場景里直接報錯給用戶是合理的。如果想更友好可以用INSERT ... ON DUPLICATE KEY UPDATE或者INSERT IGNORE來做冪等處理比如“重復(fù)提交時更新分數(shù)而不是報錯”這就要看業(yè)務(wù)怎么定義了。3.2 用視圖簡化成績查詢視圖就是一個“保存的查詢”它對應(yīng)用層來說就像一張?zhí)摂M表。在學(xué)生成績系統(tǒng)里我建了一個成績匯總視圖CREATE OR REPLACE VIEW v_student_score AS SELECT s.student_no, s.name, s.class_name, c.course_name, c.credit, sc.score, sc.exam_type, sc.exam_date FROM score sc JOIN student s ON sc.student_id s.id JOIN course c ON sc.course_id c.id;之后應(yīng)用層查詢只需要SELECT * FROM v_student_score WHERE student_no 20250001;復(fù)雜的三表聯(lián)查邏輯封裝在視圖里應(yīng)用層代碼非常干凈。視圖還有一個好處可以控制暴露哪些字段。比如我不想讓應(yīng)用開發(fā)同學(xué)看到phone字段視圖里不select它就行。當然視圖不是萬能的。視圖只是一種邏輯層封裝并不存儲數(shù)據(jù)每查一次都要重新執(zhí)行底層查詢。對這個小項目來說無所謂數(shù)據(jù)量大之后還是要考慮物化方案或者直接寫優(yōu)化好的SQL。另外MySQL里基于多表JOIN的視圖默認不能做插入更新操作所以視圖主要給查詢用寫操作老老實實走表。3.3 用觸發(fā)器記錄成績變更日志觸發(fā)器平時用得少但在成績管理系統(tǒng)里有一個很自然的場景記錄成績變更日志。老師改了一個學(xué)生的成績我們需要知道改之前是多少、改之后是多少、什么時間改的、誰改的。應(yīng)用層當然可以寫日志但數(shù)據(jù)庫觸發(fā)器能做到“無論誰用什么途徑修改數(shù)據(jù)都會被記錄”可靠性更高。我建了一張日志表和一個UPDATE觸發(fā)器CREATE TABLE score_log ( id INT PRIMARY KEY AUTO_INCREMENT, score_id INT NOT NULL, old_score DECIMAL(5,1), new_score DECIMAL(5,1), change_time DATETIME DEFAULT CURRENT_TIMESTAMP, change_user VARCHAR(50) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT成績修改日志; DELIMITER $$ CREATE TRIGGER trg_score_update AFTER UPDATE ON score FOR EACH ROW BEGIN INSERT INTO score_log (score_id, old_score, new_score, change_user) VALUES (OLD.id, OLD.score, NEW.score, CURRENT_USER()); END$$ DELIMITER ;這里的OLD和NEW是觸發(fā)器中固定使用的兩個虛擬行OLD代表更新之前的行NEW代表更新之后的行。改成績的操作執(zhí)行后舊分數(shù)和新分數(shù)都會自動落進日志表。實際使用中有一個局限CURRENT_USER()拿到的通常是數(shù)據(jù)庫連接賬號而不是“當前登錄系統(tǒng)的老師姓名”。在小系統(tǒng)里勉強能接受要更精確可以在應(yīng)用層把操作人姓名寫進一個會話變量比如SET op_user 張老師;然后在觸發(fā)器里用op_user拼接日志內(nèi)容。這是觸發(fā)器最常見的一個擴展玩法能覆蓋審計需求。觸發(fā)器雖好也要克制。一個表上觸發(fā)器太多或者觸發(fā)器里的SQL太重會拖慢每次DML操作。日志場景因為只是INSERT一條記錄性能影響可以忽略反而是最推薦的觸發(fā)器使用場景。4. 索引、鎖與事務(wù)并發(fā)安全和性能優(yōu)化一起講4.1 索引設(shè)計思路從EXPLAIN看執(zhí)行計劃學(xué)生成績管理系統(tǒng)的數(shù)據(jù)量不大但既然要學(xué)習性能優(yōu)化這一課值得認真做。最常見的性能瓶頸就是全表掃描沒有索引的情況下MySQL要一行行翻完整張表才能找到目標數(shù)據(jù)。當成績數(shù)據(jù)從幾千條漲到幾十萬條時查詢時間會肉眼可見地變慢。我建了這些索引ALTER TABLE student ADD INDEX idx_class (class_name); ALTER TABLE score ADD INDEX idx_student (student_id); ALTER TABLE score ADD INDEX idx_course (course_id);為什么這樣建student表的student_no已經(jīng)加了UNIQUE約束本身就是一個索引主鍵id自然也有。按班級查詢是一個高頻場景給class_name加索引收益明顯。score表上成績查詢幾乎都是先按student_id過濾或者按course_id過濾再加上外鍵約束本身的檢查需求這兩個字段都值得加索引。至于score字段本身極少單獨按分數(shù)范圍去查先不加。索引不是越多越好。每多一個索引插入和更新時就要多維護一棵B樹。成績系統(tǒng)的場景是讀多寫少索引可以酌情多建幾個如果是高頻寫入的日志系統(tǒng)索引太多會拖慢寫入。實踐中先把查詢場景列出來針對高頻WHERE列建索引再通過EXPLAIN驗證是否生效。看執(zhí)行計劃是我排查SQL性能的第一動作EXPLAIN SELECT s.name, sc.score FROM score sc JOIN student s ON sc.student_id s.id WHERE s.class_name 計科2301;重點關(guān)注type列。常見的訪問類型從好到差依次是system const eq_ref ref range index ALL。如果看到ALL說明全表掃描大概率索引沒建對。再看key列確認有沒有走我們預(yù)期的索引。有時候明明建了索引但SQL中用了函數(shù)、隱式類型轉(zhuǎn)換或者前導(dǎo)模糊匹配LIKE %xx索引就會失效。還有一個我前面提到的OR條件如果OR兩邊不是同一個索引的列MySQL經(jīng)常選擇不走路直接全表掃。遇到這種情況可以用UNION改寫SELECT * FROM score WHERE student_id 1 UNION SELECT * FROM score WHERE course_id 2;這種改寫方式在高頻查詢里效果很明顯也是面試里??嫉乃饕鼍爸?。4.2 事務(wù)處理批量修改成績?nèi)绾伪WC不半途而廢成績錄入和修改通常不是一條條來的老師可能一次性把全班50個人的期末成績?nèi)繉?dǎo)入。如果逐條INSERT執(zhí)行到第30條時報錯前29條已經(jīng)入庫數(shù)據(jù)就處于半完成狀態(tài)非常危險。事務(wù)的存在就是為了解決這個問題要么全部成功要么全部回滾沒有中間狀態(tài)。MySQL的InnoDB引擎默認開啟自動提交但可以顯式開啟事務(wù)START TRANSACTION; UPDATE score SET score 95 WHERE student_id 1 AND course_id 2 AND exam_type 期末; UPDATE score SET score 88 WHERE student_id 2 AND course_id 2 AND exam_type 期末; -- 如果某一步出錯執(zhí)行 ROLLBACK前面的修改全部撤銷 COMMIT;事務(wù)的ACID特性是這個系統(tǒng)穩(wěn)定性的基石。實際項目中我遇到過的情況是應(yīng)用層調(diào)用一個Java接口批量修改成績中途一條數(shù)據(jù)因為唯一約束沖突拋異常業(yè)務(wù)層的事務(wù)注解rollbackFor沒有配好導(dǎo)致異常發(fā)生時沒有觸發(fā)回滾前幾條修改成功、后面幾條失敗最后數(shù)據(jù)出現(xiàn)不一致。這個教訓(xùn)說明事務(wù)不只是數(shù)據(jù)庫層面的START TRANSACTION應(yīng)用層的事務(wù)邊界設(shè)計同樣重要。尤其要注意Java里事務(wù)默認只回滾RuntimeException受檢異常不會觸發(fā)回滾需要顯式配置rollbackFor。事務(wù)隔離級別方面InnoDB默認是REPEATABLE READ可重復(fù)讀對成績系統(tǒng)完全夠用。它在同一事務(wù)內(nèi)多次讀取相同記錄結(jié)果一致也能避免幻讀問題。除非有非常明確的讀性能瓶頸否則不建議隨意調(diào)低隔離級別調(diào)成READ COMMITTED那個級別下并發(fā)控制要弱一些。4.3 鎖的分類與死鎖排查說到事務(wù)就繞不開鎖。InnoDB的鎖按粒度分有表鎖和行鎖按類型分有共享鎖S鎖和排他鎖X鎖。平時寫普通UPDATEInnoDB會自動對符合條件的行加排他鎖直到事務(wù)提交或回滾才釋放。兩個事務(wù)互相持有對方需要的鎖資源就會死鎖。成績系統(tǒng)里“并發(fā)修改同一條成績”的場景比較少見但“并發(fā)錄入全班成績”是有可能的。假如事務(wù)A修改了1到30號學(xué)生的成績事務(wù)B修改了25到50號學(xué)生的成績兩者在25號學(xué)生那里交叉就可能出現(xiàn)死鎖A持有25號學(xué)生的鎖B也想拿25號的鎖互相等待死鎖出現(xiàn)。死鎖的常見排查方式先用SHOW ENGINE INNODB STATUS; 看LATEST DETECTED DEADLOCK段里面會記錄沖突的SQL和回滾的事務(wù)。大部分死鎖可以通過幾個手段解決統(tǒng)一加鎖順序、讓事務(wù)盡量短、必要時使用SELECT ... FOR UPDATE顯式控制鎖范圍。我舉個最實用的經(jīng)驗批量修改多條記錄時所有事務(wù)都按主鍵從小到大排序去改交叉等待的概率會大大降低。這不是什么高深理論就是實際開發(fā)中摸出來的規(guī)律。做學(xué)生成績管理系統(tǒng)這個粒度多數(shù)表用默認的行鎖就行。但要注意如果UPDATE語句的WHERE條件沒有走索引InnoDB會升級為全表掃描相當于給整張表加鎖并發(fā)性能瞬間垮掉。這也是為什么要給WHERE條件字段建索引——它不光加速查詢還影響鎖的粒度。這條邏輯鏈捋順之后你對“為什么索引重要”的理解會上升一個層次。5. MySQL安裝部署與典型問題排查實錄5.1 Windows、Linux和Docker三種安裝方式的注意事項做系統(tǒng)離不開環(huán)境搭建。這個項目最常見的運行環(huán)境是Windows家庭電腦和Linux云服務(wù)器兩種環(huán)境各有各的坑Docker也是現(xiàn)在很流行的跑法。Windows下安裝MySQL我建議直接下載ZIP包解壓安裝而不是用安裝向?qū)?。解壓后要做三件事第一在目錄下新建my.ini配置文件指定basedir、datadir和端口第二以管理員身份運行mysqld --initialize-insecure這一步會初始化數(shù)據(jù)目錄并生成一個空密碼的root賬號第三執(zhí)行mysqld --install把MySQL注冊成Windows服務(wù)然后net start mysql啟動。典型的my.ini長這樣[mysqld] basedirD:/mysql-8.0.xx datadirD:/mysql-8.0.xx/data port3306 character-set-serverutf8mb4 default-storage-engineINNODBLinux下用yum安裝是主流。CentOS上先裝MySQL官方源rpm包再yum install mysql-server最后systemctl start mysqld systemctl enable mysqld。裝完之后臨時密碼會寫在/var/log/mysqld.log里執(zhí)行g(shù)rep temporary password /var/log/mysqld.log就能看到隨后用這個密碼完成首次登錄立刻修改密碼。Docker跑MySQL最省事但有個大坑要記住容器里的數(shù)據(jù)默認不持久化容器一刪數(shù)據(jù)就全沒了。正式使用一定要掛載宿主機目錄docker run --name mysql8 \ -e MYSQL_ROOT_PASSWORD123456 \ -p 3306:3306 \ -v /home/mysql/data:/var/lib/mysql \ -d mysql:8.0如果只想本地快速驗證項目docker run --name mysql8 -e MYSQL_ROOT_PASSWORD123456 -p 3306:3306 -d mysql:8.0就夠跑起來了但一定記住別在這個容器里放重要數(shù)據(jù)。5.2 連接異常排查從root密碼到遠程訪問數(shù)據(jù)庫裝好了程序卻連不上這類問題占了排錯的七成以上。我遇到的連接問題基本可以歸納成四類。第一類是身份認證失敗報錯Access denied for user rootlocalhost。第一次用空密碼或臨時密碼登錄后要立刻執(zhí)行ALTER USER rootlocalhost IDENTIFIED BY 新密碼;。MySQL 8默認的認證插件是caching_sha2_password某些老版本的客戶端驅(qū)動不支持程序會報Authentication plugin caching_sha2_password cannot be loaded這時候要么升級驅(qū)動要么把root賬號改回mysql_native_password。第二類是連接超時報錯Cant connect to MySQL server (10060)。這通常是遠程訪問被擋了先看監(jiān)聽地址。Linux上MySQL默認只監(jiān)聽127.0.0.1要遠程訪問得在my.cnf里設(shè)置bind-address 0.0.0.0或者直接注釋掉bind-address這行。然后再檢查防火墻CentOS用firewall-cmd --permanent --add-port3306/tcpWindows要檢查防火墻入站規(guī)則。我遇到過太多次“程序連不上”最后發(fā)現(xiàn)是防火墻沒放行3306端口。第三類是服務(wù)啟動失敗報錯[ERROR] [MY-010273]之類。很多情況是my.ini路徑配置不對或者datadir目錄權(quán)限問題。Linux下還要注意data目錄屬主是不是mysql用戶權(quán)限不對一樣起不來。第四類是SSL連接錯誤報錯類似SSL connection error。MySQL 8默認開啟SSL如果客戶端驅(qū)動不兼容可以在連接串里顯式加useSSLfalse先跑通業(yè)務(wù)生產(chǎn)環(huán)境建議配置證書但本地調(diào)試關(guān)掉省心。5.3 高頻報錯速查表最后整理一個速查表都是我實際遇到過的權(quán)當一個避坑清單報錯信息場景原因與解決ERROR 1064 (42000)執(zhí)行SQL時報語法錯誤一般是關(guān)鍵字、引號、逗號問題尤其注意反引號和單引號別混用ERROR 1366 (HY000)插入中文變亂碼客戶端連接字符集沒設(shè)為utf8mb4先執(zhí)行SET NAMES utf8mb4;ERROR 1215建表時外鍵失敗兩張表的字段類型、字符集和排序規(guī)則不一致外鍵列必須嚴格一致ERROR 1264數(shù)字超出字段精度范圍比如往DECIMAL(5,1)里寫10000這種超出范圍的數(shù)需要先在應(yīng)用層校驗ERROR 1418創(chuàng)建存儲過程報錯開啟binlog時需要指定DETERMINISTIC或READS SQL DATA這是存儲過程的經(jīng)典坑ERROR 1452插入成績時外鍵失敗學(xué)生ID或課程ID不在主表里先用SELECT確認關(guān)聯(lián)數(shù)據(jù)存在ERROR 3719加CHECK約束報錯MySQL版本低于8.0.16CHECK約束本身不生效或語法解析失敗服務(wù)無法啟動net start mysql報錯檢查data目錄和my.ini配置執(zhí)行mysqld --console看具體輸出做這套系統(tǒng)的時候我養(yǎng)成了一個習慣每一條SQL先單獨在命令行跑一遍確認沒問題再往程序里集成。這樣SQL報錯和程序邏輯報錯能分開排查而不是混在一起瞎忙活。這個習慣看著笨但真的能省掉大把調(diào)試時間。學(xué)生成績管理系統(tǒng)這個項目做完我個人最深的體會是數(shù)據(jù)庫設(shè)計決定系統(tǒng)的上限而SQL功底決定開發(fā)效率。很多人被“管理系統(tǒng)”三個字勸退覺得太簡單沒意思但真正動手做下來從三表設(shè)計、外鍵約束、字符集選擇到事務(wù)、鎖、索引、存儲過程、觸發(fā)器MySQL的核心內(nèi)容基本都過了一遍——這個項目的價值恰恰在于它不復(fù)雜卻足夠完整。最后再分享一個小經(jīng)驗系統(tǒng)做完之后一定要寫一遍備份腳本mysqldump -u root -p student_score_system backup.sql再配個定時任務(wù)每周跑一次。成績數(shù)據(jù)雖然不算金貴但真要是丟了靠記憶重新錄入的滋味絕對不好受。功能都能跑通只算及格把數(shù)據(jù)當成“丟了會肉疼”的東西來對待才算真正邁過數(shù)據(jù)庫開發(fā)的一道坎。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
偷拍片久久| 97超碰中文在线| 国产精品不卡少妇白| 亚洲综合九九| 国产色精品午夜大片| 久久久久久久久国产| 激情四射五月天| 欧美日韩97| 啊啊啊啊在线观看网址| 性爱乱伦一区| 免费人成毛片乱码| 男人天堂无码| 97资源免费视频| 国产又色又爽又舒服的三级视频| 欧美翘臀视频网站一区二区三区| 综合激情一一91| 台欧久久精品视频| 97在线精品| www.av家庭乱伦| 少好三P| 成人AV在线电影| 亚洲天堂男人天堂| 就去色综合| 97国产色图 | 午夜男女爽爽大片免费观看| 941超碰| av优播| 综合久久六月久久婷婷| 天天做日日做天天欢。| se吧提供国产乱老熟视频胖女人| 黑人娇小av在线播放| 91丝袜美腿片| 啊啊啊啊,啊啊好多水 | 高颜值美女口爆高潮浪叫| 五月丁香婷婷综合| 台湾一区国产高清在线| 蜜臀99久久国产| 校园春色宗合网| 人妻熟女午夜精品在线| JULIA一区二区三区在线播放| 国产精品嫩草影院午夜两性| 精品999一区二区| 啊啊啊啊啊啊在线看| 很很热性爱视频| 无码动漫av中文字幕| 99re99在线视频| 1区2区3区中文字幕日韩| 久久大香蕉手机高清视频| 亚洲色图欧美视频| 亚洲精品一区二区三区在线播放| 日韩成人在线性爱视频| 无遮挡又黄又刺激的视频| 一本久久久精品| 欧美高潮| 亚洲诱惑天堂| 欧美久久婷婷| 麻豆天美传媒在线视频天堂| 亚州色国| 日本精品人妻少妇一区二区| 久久最新免费视频23| 99国产人成精品| 午夜男人一级A片7777| 国产 日韩 欧美 中文 另类,国产 欧美 另类 制服 变态,高清 日韩 欧美 中文,高 | 亚洲黄色网址| 人妻少妇精品久久久| 日韩一级二级在线| 曰本91情色| 亚洲综合春色| 天堂麻豆天美| 激情五月天校园春色网| 97伊人超碰| 中文乱码字幕观看| 成人性爱高清视频免费看| 亚洲无吗在线视频| 狠狠色综合网| 亚洲中文字幕乱码无码一区二区| 亚州春色| 欧美激情区| 久久久久国产精品久久久| 亚洲色图欧美| 亚洲黄色网址视频| a久久| 婷婷五月天福利| 亚洲中文字幕97久久精品少妇| 免费观看欧美日韩操逼视频| 少妇与黑人高潮在线| 欧美亚洲AN| 亚洲午夜蜜臀| 日韩精品中文字幕人妻| 温婉少妇玩3p| 欧美熟女激情| 欧美图片色五月天| 理论久久婷婷网8| 天天干电影| 亚洲在线网站| 国产成人无码网站在线视频| 久久综合18p| 我中文字幕6区 | 国产一区二区二区按摩精品啪视频| 懂色Av| 人人艹亚洲| 九月丁香| 高清肉丝中文无码| 欧美性爱精品七区| 久久免费精彩视频| 视频二区熟女人妻| 亚洲精品国产精品成人| 五月天黄色激情视频| AV九九| 久久久久一本一区二区青青蜜月| 正宗无毛一线天嫩逼| 国产一国产一级毛片古装| 国产精品婬乱一级毛片彝族| 欧美国产成人在线| 国产精品第一页国产大屁股视频免费区| 黄色激情电影在线观看| 防屏蔽在线视频| 色天堂在线观看| 激情五月天中文字幕色| 国产精品嫩草影院免费| 美女黄页| 国产精品久久蜜乳av| 亚洲国产ⅴ高清在线观看| 婷色五月| 日韩欧美中文字亚洲慕| av网站在线观看了| 视频二区美腿丝袜制服人妻欧美 | 五月天亚洲色图| 久久久久久国产无码精品| 极品丝袜无码| 日韩国产精品人妻无码久久久| 久久婷婷亚洲| 久久二| 人人透人人操| 91男人综合| 婷婷在线视频在线观看| 性欧美天天| 亚州性9| 大香蕉啪啪网| 揉揉日日日日| 丁香五月婷婷啪啪| 亚洲男人天堂手机版| 国产呦精品一区二区三区下载| 2000亚洲男人天堂| 蜜乳av一区二区| 99国产精品在线观看| 亚洲精品97| 大香蕉免费中文| 熟妇色99| 日韩无码嘿咻黑热久| 亚洲区 欧美区| www.91色综合| 91在线视频国产网站| 六月婷激情福利天堂69| 亚洲熟女乱色一区二区三区 | 久久久九精品| 日本九九九九| 精品视频在线观看| 久久最新视频免费观看| 黄页网站免费高清在线观看| 色偷偷综合91久久噜噜| 99色在线观看| 96麻豆精品一区二区三区| 婷婷成人五月天| 超碰在线91| 91丨国产丨白浆| 日韩91网站| 尻女朋友一夜| 色狠狠 - 百度| 99啪啪| 乱伦Av网| 久久中文字幕在线观看| 亚洲色图美腿丝袜| av片在线观看免费播放| 国产无码精品成人| 果冻传媒A片麻豆熟妇人妻| 久极品在线观看| 天天躁日日躁AAAAXXXX国产| 任你干在线视频| 青娱乐日韩无码| 精品人妻一区二区三区四区不卡在| 亚洲色图久久成人| 日韩欧美中文| 超碰欧美COM| 看黑人AV不卡| 日韩一级片| 综合熟妇一区二区三区| 曰韩欧美国产传媒麻豆第一区| 最新亚洲人成网站在线影院| 中韩中文字幕在线观看| 四虎国产成人精品免费一女五男| 超碰调教97| 亚洲偷拍自拍在线视频| 欧美大波激情xxxx| 91在线视频国产网站| 任你干在线视频| 亚欧国产无码精品在线| 亚洲成人在线高清| 色与欲影视天天看综合网| 国产青视频| 99天堂网| 自偷自拍的亚洲视频| 欧美乱伦专区| 久久精品无码不卡| 91暧暧| 99热啪啪| 欧美,日韩,亚洲视频| 操国产逼| 啪啪啪精品| 天美91| 婷婷久草一区二区三区| 欧美在线观看综合国产| 玖玖婷婷五月天| 人人妻人人狠人人| 色综合久久888| 亚洲欧洲另类| 东京日日夜夜| 刺激精品视频| 91美女視頻| 91青青在线视频| 俞拍自拍| 思思热国产高清| 肉动漫无遮挡h在线观看| 麻豆成人影音在线| 日本操逼无码| 日本人人操人人操| 色一射色一射| 日日橹狠狠爱欧美超碰| 久久人妇| 免费视频观看60秒| 老女人综合网| 欧美另类精品xxxx| 九九碰九九爱97| 日本 欧美 亚中文字幕| 九九九综合精品| 丝袜天堂| 欧美黑人168页欧美黑人167| 欧美不卡在线一区二区| 人人摸人人添人人操| av天堂5| 成人 日韩欧美一区| 有码免费观看| 国产精品97超碰| 97日韩欧美| 影音先锋日本一区二区| 国产乱人伦AVA麻豆软件.| 亚洲国产无码精品首页久久久| 久久一二三四五六七八九区区区 | 97色欧洲| 一区二区三区高清天码| 午夜男女爽爽爽在线视频| 色婷婷电影网| 中文字幕日韩人妻视频一区二区三区交换夫妻| 操老熟女AV| 性色综合网| 6080YYY午夜理论片在线观看| 久久色情| 国产精品在线网站| 亚洲欧美国产中文视频| 成人性爱电影网| 欧亚日韩三区| 国产精品久久久久久久久久久久| 人人操人人操草草| 久久久久久性爱视频| 久久中文字幕女同性恋一区| 永久电影三级在线观看| 亚州国产精品乱| 91色堂| 天美精品原创av片国产| 粉嫩av在线一区二区| 嗯啊免费视频| 中文字幕蜜乳av| 日韩激情中文字幕有码| 久久夜嗨| 20cm女自慰在线日韩欧美| 久久一区二区三区入口| 97超碰资源网| 国产精品点击进入在线影院| 精品免费1| 日韩内| 成人精品一区二区91毛片不卡| 91亚·色| 午夜精品久久久久久久久久久久久| 久久精品国产亚洲AV嘿嘿| 97二区四区| 欧美激情 亚洲色图| 手机在线视频国内精品| 亚州男人的天堂| 岛国A V在线免费看| 中文字幕一区av| 天天综合青苹果| 一级特级aaaa毛片免费观看| 亚洲成人妻日韩在线| AV乱伦专区| 好湿好紧好爽 视频| 99rre在线精品99re8| 国产一区在线免费播放| 色69大色97香蕉| 神马久久久久久伦理片| 日韩精彩视频| 国产AV高清AV无码| 啊啊啊慢点| 99热99色| 亚洲色图亚洲| 大肉棒导航| 91九色蝌蚪在线观看| 丁香婷婷激情五月天无毒不卡 | 碰碰在线视频| 国内毛片欧美香蕉精品| 亚洲不卡不卡中文字幕不卡 | 女人高潮大叫一级毛片| 久久有码视频| 校园春色之综合网| 岛国福利在线精品播放| 人人爽人人精品乱人伦AV| 强奸乱伦中文字幕AV| 久久精品无码不卡| 岛国AV一区二区电影| 成人毛片免费| 精品无码产区一区二| 亚洲色图欧美视频| 东京热男人的天堂| 久久人妇| 天天操综合网| 亚洲 小说 欧美 激情 另类| 嫩草 我啊~嗯~在线| 久久久久国产一区二| 夜夜高潮夜夜爽夜夜爱爱一区| 黄污污污污| 国产精品高潮久久久无码| 另类亚洲图色| 麻豆国产96在线| 欧美翘臀视频网站一区二区三区| 日韩传媒在线| 久久性爱免费送| 女人久久久| 91高跟美女在线播放| 久久男女激情视频网站| 日韩一级久久毛片| 久久大香蕉97| 亚洲在高跟鞋自慰久久在色线| 国产精品自在自拍视频| 欧美日韩另类在线| 亚洲日韩国产精品| 亚洲综合另类色图| 亚洲情色在线| 992这里有精品| 97碰碰日本乱偷人妻中文的| 婷婷五月丁香五月| 最新啪啪视频| 成人a级高清视频在线观看| 日韩成人人妻网站| 日本97久久久精品| av天堂影视中文在字幕在线中文| 午夜福利免费福利视频| 天天草天天日| 国产在线播放成人免费| av2014 日韩在线中文字幕| 女人一区| 久久久精品日本一道| 亚洲国产一级精品毛一级精品看免费视频| 乱操乱伦AV| 人人妻人人澡人人爽久久av| 精品久操| julia国产在线| 中文字幕人乱码中文字的预防方法 | av在线免费一区二区| 精品九九| 成人怡红院| 久久精品操| 大香蕉日亚洲日本亚大 | 国产美女在线精品免费看| 欧美人妻制服| 亚洲高清欧美总合| 色九九久九九| 不卡二三区人妻少妇| 爱丝福利| 色777999综合| 日本一卡二区在线| 九九热免费视频| 国产在线视视频有精品| 日韩无码专区| 五月丁香婷婷色| 女人被添高潮免费视频| 婷婷五月天激情四射| 欧美日韩操逼嗦吊| 国产激情久久久| 久久久久9| 99综合| 中文字幕 人妻不满 在线视频| 91操人视频| 深田咏美亚洲精品福利社| 影音先锋中文字幕日本好一区二区| 久久精品毛片免费不卡| 强奸乱伦Av网| 97最新在线播放视频| 日韩丝袜二区| 激情丁香五月婷婷| 97中文超碰| 日本伦理一区二区| 精品成人女人久久| 伊人宅男大香蕉 | 日韩在线一区高清在线| 国产精品第一区第一页| 九九九九九九九九九五码| 欧美少妇内射| 国产乱不卡| 乱人乱色一区二区三区免费| 欧美综合天天| 92性色国产午夜福利在线661| 国产午夜精品理论片一二三区区| 台湾成人无码AV| 人妻99p| 激情婷婷丁香| 热久久九九热| 超碰在线在公开超碰在线在公开| 国产综合久久久麻桃个| 欧美亚洲国产91在线| 26uuu性| 欧美日韩小说| 最新av中文字幕高清| 国产一级操B视频| 4399成人黄A片| 久久伊人网视频一区二区三区| 亚洲老司机123专区| 99久久久| 911av网站免费观看| 97久久超碰| 黄呦呦在线| 易易A毛视频| 日本一区二区三区午夜观看| 色色婷婷五月天| 99天天超碰| 97日亚洲欧美| 午夜偷拍久久熟女| 超碰爽人妻熟女Av| 骚货操死你| 亚洲欧洲日韩天堂av| 婷婷五月天小说| 亚洲成人妻日韩在线| 亚洲熟妇A V黑人| 亚洲国产精品无码AV在线| 国产成人亚洲精品自产在线 | 999久久芭蕾| 午夜性刺激视频免费观看| 午夜福利视频在线一区| 久操网在线| 中文字幕av亚洲精品| 久久曰曰| 青青草大香蕉视频| 国产综合网站在线播放| 99抽插| 女性91网站| 亚洲综合五月天| 人妻天天爽夜夜爽2| 国产9 9在线 | 亚洲| 99这里只有精品| 亚洲做性| 自慰白浆在线观看| 久久久久久久久久久久久女过产乱-少妇高潮一区二区三区喷水-成人AV | 一区二区三| 人人看人人摸人人色| 男人的天堂在线| 6080YYY午夜理论片在线观看| 一牛影视久久久一区二区三区| 一本久久久精品| 亚洲aV性爱| 加勒比性爱成人在线| 秋霞久久亚洲精品成人| 9精品久久| 亚洲熟女乱色一区二区三区| 亚洲情色1区| 97精品免费视频网站| 一区二区日韩欧美久久| 久久岛国| 天天日B狠狠操| 91在线免费精品视频| 性欧美另类高清| 久久精品| 亚洲少妇激情视频| 丝袜美腿制服人妻二区中文字幕 | 国产精品黑人一区二区三区| 亚洲人在线| 天天色黄色影院天天操| 国产吹潮女在线观看| 国产1769在线| 欧美爱爱97| 久久超碰亚洲人| 亚洲 日本 国产 综合| 色综合久久夜色精品国产天堂| 嗯啊视频免费在线观看| 精品中文日韩字幕视频| 少妇滛荡视频| 久久精品一区二区一8| 亚洲色性情三级| 在线观看亚洲专区| 欧美熟妇色| 蜜桃久久久久久久| 国产综合网站在线播放| 欧美 亚洲 第一页| 欧美情色贴图| 婷婷精品视频| 国模私拍一区二区三区神乳| 欧美精品欧美精品系列 | 麻豆色约约| 男人的天堂2019AV| 五十路六十路七十路熟婆| 亚洲青青草| 麻豆人妻精品一区二区| 日本日逼高清| 啊啊啊啊好多水| 91九九九逼| 亚洲精品三| 韩日色费| 亚洲美女精品九九视频| 日韩资源网| 理论久久婷婷网 8| 欧美日本国产日韩激情视频| 亚洲欧洲激情卡通另类文学四射小说网站| 精品人妻一区二区乱码一区二区| 9999久久久久| 欧美国产精品| 乱伦一二三| 色色激情五月天| a片 xxxx受爽视频| 久久机热| 黄资源| 人妻天天夜夜爽一区二区| 亚洲中文国际强奸字幕| 日本国产欧美一区三区二区| 欧美日韩小说| 欧美第一页| 久久综合中文国产| 啊啊啊不要好疼视频| 丰满高潮18xxxx| 欧美夜夜草视频| 日韩精品一区二区人人人| 蜜臀th| 性色国产东北露脸精品视频| 日本在线不卡123| 国产综合操逼高清| 夜嗨影院| 性色av蜜臀av色欲aV| 小说区 图片区色 综合区| www欧美91| 97欧美综合网| 大香蕉手机在线| 亚洲在钱| 中文字幕无码不卡啪啪| 加勒比伊人综合| 亚州春色| 大香蕉之青青草原| 国产一区二区三区久久精品太古里| 一区二区三区日韩欧美| 久久9精品视频| 亚洲一区中文字幕久久,果冻传媒一区二区天美传媒 | 中文激情网| 黄片直播三级黄片两女一男| 人人妻人人狠人人| 国产一区二区啪啪视频| 日本三级日本三级99| 久久 国产精品 一区| 亚洲黄网在哪免费看| 国产精品免费视频人成| 超碰人人在线| 水澄无码AV| 天天透伊人| 亚洲美女精品| 10000部十八禁看电影| 久久久久久电影| 黄色片一区二区三区四区五区| 国产在线激情视频| av网页一区二区三区| 国产极品一区二区三区三州| 亚洲中文字幕精品久久久久久直播| 手机看片1025| 九九九九九九九精品视频| 欧美乱色| 亚精品无码毛片一区二区三区| 久久AV色| 男人天堂新| 久久精品国产欧美日韩亚洲欧美日韩中文久久国产一区 | 97国产超碰| 人人搞人人插人人操| 国产91会所女技师在线观看| 操逼啊啊啊91| 九九内射在线| 国产亚洲色婷婷99精品91| 亚洲天堂美臀在线| v91av| 韩日色费| 久久九九网| 韩日男人的天堂| 久久久久久久9最新免费视频观看| 欧美日韩国产精品久久色婷婷| 亚洲欧美清纯| 天天色黄色影院天天操| 五月天精品| 青青国产在线拍揄自揄拍| 中文字幕精品三级久久久| 亚州综合色| 日本高清_区二区三区| 开心五月深爱五月| 九九国产热| 91亚洲在线| 粉嫩av在线一区二区| 你操综合| 国产suv精品一区| 欧美日韩午夜精品一区二区三区| 熟女突然公开看18禁影片| 青青草吊丝| 插插综合网天天影视网| 伊人国产视频| 清纯唯美综合| 免费看A片毛毛片在线播| 色综合美国| 精品无人区麻豆乱码1区2区图片| 青青青国产手线观看视频2| 久久亚洲婷婷| 嗯嗯啊啊日韩精品| 7777奇米影视久久| 亚洲色图超碰在线| 亚洲风情综合网| 久久riav中文精品| 九九英色视频| 五月亭亭六月丁香| 狠狠狠狠狠干| chaopen97久久| 精品亚洲国产成人精品| 青春草A| 一区二区三区免费视频入口| 亚洲精品男人的天堂| 国产女主播视频在线观看| 99久久精品无码一区二区毛片免费| 先锋精品av色鲁| 校园春色美腿丝袜| 影音先锋国产精品| 亚洲,欧美,综合网| 亚欧高清在线| 超碰社区97| 精品在线观看视频在线| 97就爱干| 久操视频资源站公开| 日韩 欧美 国产 麻豆| 日韩精品国产一区二区| 绑缚麻绳人妻寝取完整版| 日韩免费中文字幕视频| 欧美无圣光在线| 操逼逼一区视频| 久久成年精品| 2018天天干在线视频| 亚av顶级裸体一区二区三区四区五区| 8x福利精品第一福利视频导航| 久久精品视频28| 男人的天堂午夜av| 久久久久久久久久久久久久久久9 亚洲成人妻日韩在线 | 欧美日韩国产中文精品字幕自在自线| 91丝袜在线视频| 日韩精品黄片免费观看| 欧美性Fer办公室秘书| 国产亚洲精品第一最新| 欧美激情内射| 台湾佬中文娱乐自偷自拍| 蜜乳视频网站| 久久草视频污视频| 免费综合亚洲中文| 欧美色图91| 大香蕉乱级| 大香蕉欧美国产日韩高潮| 岛国在线一区二区三区| 一二三区视频在线观看| 蜜臀久久99精品久久久久久久久| 欧美成人一级麻豆| 麻豆成人av| 日韩在线观看中文字幕视频| 啊啊啊啊啊好多水| 一级黄碟在线观看| 亚洲操人| 久久丁香久草综合网| 伊人 俄罗斯 a v| 日本三级大片| 伦激情人妻另类人妻| 亚洲天堂资源| ′ !γ}丶。。久久精品欧美一区二区三区| 男人的天堂 在线一区| 成人久久精品| 久久人妻视频网| 熟妇xxxxx性春色| 热G综合热G中文| 大香蕉 222| 五月天婷精品激情| 国产女同在线观看视频| 夜色97| 精品大久久| 干婷婷综合网| 精品久久无码午夜福利| 久艹免费| 成人片视频| 老女人爆菊| 女同性恋久久| 国产AAAAAABBBBB| 欧日韩一二三f区| 大香蕉99热| 啊…啊…操我用力操我| 国产偷拍自拍在线视频| 98人妻精品一区二区色欲| 蜜臀99久久精品| 亚洲污一污二| 欧美超碰9798| 欧美亚洲日本激情在线| 被男人吃奶很爽的毛片| 亚洲欧美不卡线| 精品高清牛人盗摄一区二区三区中文字幕A片免费在线观看 | 国产成人精品一区| 久久国产精品,久久国产| 国产suv精品一区| 欧美久久婷婷| 久久超碰亚洲人| 男人的天堂2010| 国产在线视视频有精品| 久久成人国产| 日本 色 导航| 国产亚洲日韩欧| 伊人国产成人av网站| 狠狠爱夜夜| 精品十八在线观看| 色一区二区三区综合| 后入式在线免费观看60秒| 116美女午夜| 婷婷四五区| 久久久人妻| 丁香六月啪啪| 在线只有精品| 欧美成人精品A片免费一区99| 国产精品自拍欧美在线| 国产第25页在线观看| 夜夜天天噜狠狠爱2021| 韩国手机不卡无码三级视频| 午夜人人操| 92性色国产午夜福利在线661| 中文字幕丰满人妻日本| 思思久热在线精品66| 女沟厕偷窥piss小便| 蜜臀久久99精品久久久久久无删减 | 一道本东京热加勒比一区二区三区| 3571色综合一区二区二区| 另类小说五月天| 天综合网| 欧美色图片91| 一区二区蜜臀| 亚洲超碰综合网| 亚洲交换| 麻豆视频一区二区| 秋霞怕怕片| 中文字幕精品一区欧美| 性在久久久久久| 8050无码八戒| 婷婷六月色| 人妻一区二区三区| 男人的天堂2000| 99久在线精品99re8| 亚洲欧洲日韩中文字幕一区| 福利视频网站| 无码精品久久| 92午夜免费福利视频| 丁香六月综合激情| 极品粉嫩一区二区| 任我爽在线视频免费观看| 欧美性高潮| 亚洲国产一级黄色视频| 99久久婷婷丁香| 久久久久久人妻| 久久少妇视频| 精品人妻15区| 视频一区二区三区精品| 丰满高潮18xxxx| 久久精品久| 乱伦一区二区三区‘| 国产精品三级视频网站| 九九视品黄色| 亚洲。天堂。日本在线观看| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区 | 口爆综合网| 激情欧美日韩女同久久| 蜜区区视频79| 免费观看国产小粉嫩喷水精品午| 十八禁啪啦拍视频无遮挡| 亚洲精品一区二区三区新线路| 久久久久久久久久精| 偷拍视频青青草在线视频| 7777奇米影视久久| 无码又爽又硬又激情免费视频| 综合网久久| 日韩精品一区二区人人人| 日韩欧美操逼xxx| 日本片日本片祼观看网站在线看中文版网页在线看| 很黄很污的免费网站| 亚欧操逼片在线观看 | 亚洲欧美伦综合| 国产精品一区二区校花| 一本一道人妻久久一区二区三区| 国产偷人妻精品一区二区在线| 伦理第一页| 蜜乳AV一区二区三区四| 老熟女熟妇| 91亚洲电影| 熟女突然公开看18禁影片| 少妇极品熟妇人妻无码| 亚洲国产综合视频| 五月天激情小说| 中文子幕一二三| 日韩性爱视频在线免费观看| 台湾佬激情综合| 情色图区| 男男H黄动漫啪啪无遮挡网站| 97青娱乐超碰久久| 熟女探花啪啪| 午夜男人天堂| 92久久| 日韩人妻无码专区| 999九九九九国产动| 在线欧美69V免费观看视频| 亚洲熟妇丝袜在线观看| 97超碰欧美中文字幕| 九月丁香婷婷| 97超碰影音| 黄片无码在线制服| 色老久久| 无码免费精品高清| 国产精品久久久久久久免牛肉蒲团| 中文字幕av亚洲精品| 狼人综合婷婷激情四射 | 一级特黄aaa大片在线观看成人一级片在线观看| 亚洲综合五月天| 91日产桃蜜| 国产激情综合| 超碰人人干天天射| 综合五月婷婷| 超碰久超碰久| 国产剧情在线| 69人妻精品一区二区绯色| 亚洲女人91| 女优免费一区二区永久| 好爽免费视频| 91黑丝少妇| 情趣丝袜无码操逼视频| 美女91在线观看| 亚洲欧洲综合av在线| 97一本大道亚洲一区| 国产精品一二三在线看| 亚洲玖玖爱| 婷婷色网| 免费观看日本操逼视频| 国产13区| 无码精品久久久天天影视| 欧美78| 精品中文字幕一区二区l - 百度| 久久后入制服| 麻豆人妻精品一区二区| 久久久久久久强迫| 欧美青青视频| 九九黄色视频在线观看| 91亚洲情色| 亚洲综合在线高清| 亚洲日韩美国人妻| 青青草一本道福利视频| 欧美午夜精品久久久久久超碰| 国产精品久久aV| 欧美色色人| 五月婷婷深深爱| 天天干天天操天天操夜夜操天天操| 久久有碼| 日本岛国黄色网址| 熟女探花啪啪| 日本免费一区二区不卡| 亚洲激情综合| 波多野结衣一级视频| 97操碰| 青青草五月天| www.99热| 欧美日韩色综合网| BBBBB97COM| 日韩天天本| 青草青青久久久久久国产| 中文字幕乱在线伦视频中文字幕乱码在线| 精品国产乱码久久久久久免费| 97 亚洲 日韩 欧美 在线| 中国女人内射6XXXXX| 无码人妻1727| 人人爽夜夜玩视频| 蜜臀精品1区2区| 五月婷婷爱六月丁香色| 国产视频一区二区三区在线免费观看 | 久久国产逼| 999国产精品999久久久久久| 安徽熟妇视频| 少妇一线天久久久久久| 人妻人人做人人澡人人爽欧美一区| 日韩少妇无码| 97精品一区| 另类 综合 日韩 欧美 亚洲| 少妇二级| 91 偷| 99精品高潮| 欧美最婬乱婬爆婬性视频 | 色吧5亚洲| 熟妇人妻丰满久久久久久久无码| 亚州综合图片| 玖玖综合色| 91人人爽人人爽人人人,gav福利视频导航,日韩欧美亚洲国产字幕四区 | 97免费视频在线观看| 亚洲骚男同com| 麻豆成人av| 天堂麻豆天美| 麻豆AV一区二区| 久久久久久亚洲精品不卡人乳| 黄色欧美性爱视频| 人人人人插| 国内毛片无遮挡国产| 欧美一区二区男人天堂| 色噜噜狠狠色综无码久久合欧美| 91精品国产长腿丝袜美女| 97丝袜亚洲在线播放| laoshunv91| 久操操| 丝袜综合| 色情亚洲日本成人| 日本女厕偷拍| 国产SV一线| 欧美久久毛片基地| 91色五月俺来也| 激情图片伦理国产一区二区日韩| 久久久久久亚洲精品不卡人乳| 九九色婷婷| 超碰人人在线| 久热无码| 色噜噜综合在线| 欧苏综合色综合| 麻豆天美电影一区二区| 爱爱动态120秒| 天堂av2019| 男人下部插入女人下部| 欧美综合第一| 九九九九九九成人| 精品一国2| 色婷婷一区二区三区久久午夜成人不| 9997se| 欧美色蜜桃97| 少妇久久久久久久久| 蜜臀久久99精品久久久久久-DVD原版全| 亚洲久9| 国产精品白领在线观看| 超清福利精品视频在线| 又粗又长又爽在线观看| 国内毛片国产专区二| www.激情| 久久精品视-一级做a爰片性色毛片16美国-中国女与老外在线精品 | 97在线观看免费| 天天干人人乐| 26uuu久久| 曰韩操B| 女人被添高潮免费视频| 大香交伊人网| 黑人白女精品一区| 欧美日韩国产高清在线一二三区| 国模精品一区二区三区苹果色戒| 色婷婷电影网| 91色综合激情| 成人性交免费视屏| 国产白丝网站| 欧美色图20p| 天天躁日日躁AAAAXXXX国产| 免费啪啪一级视频| www.狠狠| 级品肉射| 一本色道久久综合精品婷婷| 熟妇乱伦一区二区| 狠狠色狠狠色狠狠五月| 九月丁香婷婷| 91成人在线| 毛片99-全集电影手机免费观看完整-B029AV| 天天干夜夜鈤| 偷拍三区| 啊啊啊操一区| 亚洲成人妻日韩在线| 夜夜高潮夜夜爽夜夜爱爱一区| 明星性猛交ⅹxxx乱大交| 把腿张开老子CAO烂你| 欧美色棕合| 狠狠干2020| 欧美精品精品一区二区| 成人性爱高清视频免费看| 欧美日韩国产中文精品字幕自在自线,| 色麻豆AV| 秋霞怕怕片| 欧美做爰无码A片视频| 色婷婷综合久久中文字幕雪峰| 999久久久久久久久| 91影库| 69人妻人人揉人人躁人人精品| 土豪酒店各种姿势玩弄极品幼稚| 久久精品国产精品一区| 综合激情婷婷| 人妻五十路在线| 欧美操人视频| 日韩精品99999| 狠狠操狠狠燥| 免费一级黄色录像影片| 少妇蜜汁| 大香蕉淫人网| 久久 国产精品 一区| 成人一区二区三区四区| 成人五月天丁香激情综合| 99久久婷婷国产综合| 黄色十八禁| 欧美性爱18观看| 久久久精品日本一道| AV女资源| 懂色AV蜜臀无码精品APP| 91中文精品日韩欧美在线| 亚洲天堂男人的天堂| 大香蕉五月天婷婷| 乱码人妻一区二区三区| 日韩性爱1级片视频| 亚洲射综合网| 国产 日韩,欧美 自拍| 国产欧美日韩在线观看麻豆传媒公司| 懂色av中文字幕| 日本性爱少妇| 欧美激情亚洲情色| 无码逼| 欧美在线 亚洲| 国产精品999zyz| 日日骚精品视频| 国产精品美女在线一区| 极品后入免费视频| 日本性爱欧美性爱| 97色涩| 午夜AV人气不卡| 日韩不卡网操逼中文字幕日韩| 美日韩一二三区| 日本不卡高清视频| 4虎在线视频| 1769精品一区二区三区| 人伦四五区| 97自拍视频在线| 亚洲91在线| 精品人妻一区二区三区-国产精品 一个人在线看的黄色电影网站 | 韩国女主播青草在线| 亚川综合视频| 好舒服视频| 在线观看黄色电话| 黄色成年| 夜夜夜久久| 激情抓乳插进去啪啪啪日韩| 欧美亚洲厕所精品偷拍91| 欧美顶级黄色大片免费| 一区e区三| 天天操天天插| 欧美精品三级黄片| 啊啊啊啊啊在线视频| 黑人操一区二区| 亚洲精品国产拍免费91在线| 天堂精品在线| 国产玖玖| 小草精彩毛片| 欧洲在线性爱视频| 日韩av色图综合| 国产精品激情久久久久久久| www.av不卡中文字幕| 久久五月丁香| 精品人妻免费观看| 噜噜噜久久亚洲精品色情| 网页导航五月天免费一二三区| 风间由美日韩欧美久久| 国产又黄又猛又粗又爽的网站| 五码视频在线观看| 欧美线天码中字| 激情四射婷婷四五月天| 国产成人精品必看| 久久久月天| 美日韩一卡二卡三卡免费人妻精品| 高清无码一区二区三区| 97视频免费在线| 亚洲国产欧美日韩人妻日中文| 天堂а√在线最新版在线| 欧美激情 亚洲色图| 久久嫩草国产成人一区| 日韩一级成人毛片免费观看 | 日韩精品人妻一| 亚洲 欧美 色图| 亚洲综合图片在线| 亚洲91少妇| 91足交| 操国产高清| 99日视频在线免费| 欧美激情视频一区二区三区不卡| 黄片免费看黄片免费看| 日韩熟女无码| 久热这里只有精品9| 97频视在线| 在线人妻熟女一区二区三区四区五区| 亚洲色图日韩精品| 免费A片三p视频| 久久久啊啊啊| AV色五月天| 91色综合激情| 中文字幕五区| 天天看,天天做| 久久亚洲欧美中文字幕国语| 91精品老女人| 亚洲日韩狠狠撸视频| 香港日本韩国人妇99www.wccm20| 免费观看有码高清视频| 国产激情在线| 亚洲一曲日韩精品| 尤物网站91| 天天日天天看| 综合亚州欧美| 日日干夜夜骑| 久久夜夜夜| 有码色中文字幕在线观看| 天天综合网~69| 欧美激情综合| 久久一区二区三区入口| 91午夜无码| 欧美一二三级精品在线| 91九九| 日韩熟女精一区二区三区不卡| 91精品国产91久久久久久久久久久久| 国产久久一区二区| 97碰碰日本乱偷人妻中文的| 99re9这里只有精品| 女人天堂AV五区在线| 欧美夜夜狠| 超碰97起碰| 黄页| 骚鸭AV| 亚洲九九视频| 超碰天天去日穴| 男人天堂毛片| 78m成人视线| 久久岛国| 亚州综合色| 探花视频免费观看国产专区| 91精品国产综合久久久蜜臀酒店| 欧综合网| 色五月AV| 尤物网站91| 91啦人妻| 一个国产在线综合网站| 国产精品亚洲天堂网址| 中文字幕奈奈美被公侵犯| 91在线视频观看国产| 一区二区三区 日韩欧美| 多乙久久久久久| 婷婷视频网| 激情自拍 校园春色| 97视频观看| 日韩在线97|