久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|av无码av不卡一区二区|久久亚洲精品中文字

ARTICLE DETAIL

資訊詳情

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

存儲(chǔ)過(guò)程實(shí)戰(zhàn)全解:MySQL、Oracle、openGauss差異與SQLSugar調(diào)用

存儲(chǔ)過(guò)程實(shí)戰(zhàn)全解:MySQL、Oracle、openGauss差異與SQLSugar調(diào)用 存儲(chǔ)過(guò)程這個(gè)老面孔在數(shù)據(jù)庫(kù)考試的程序填空題里是常駐選手在實(shí)際業(yè)務(wù)里也是處理復(fù)雜邏輯的一把好手。很多同學(xué)在填空題里能寫(xiě)對(duì)CREATE PROCEDURE的拼寫(xiě)但一碰到DELIMITER、游標(biāo)、異常處理就露怯很多開(kāi)發(fā)同學(xué)說(shuō)會(huì)用但真讓他寫(xiě)一個(gè)帶事務(wù)、帶循環(huán)、帶游標(biāo)的存儲(chǔ)過(guò)程又容易卡殼。這篇就來(lái)把存儲(chǔ)過(guò)程從頭到尾拆一遍覆蓋MySQL、Oracle、openGauss三種主流數(shù)據(jù)庫(kù)的寫(xiě)法差異還會(huì)帶上.NET生態(tài)里用SQLSugar調(diào)存儲(chǔ)過(guò)程的實(shí)戰(zhàn)姿勢(shì)。不管你是準(zhǔn)備考試、應(yīng)付面試還是要上手寫(xiě)生產(chǎn)級(jí)存儲(chǔ)過(guò)程這篇都能給你一套能直接抄的思路。1. 存儲(chǔ)過(guò)程到底是什么——把它想象成數(shù)據(jù)庫(kù)里的“預(yù)制菜生產(chǎn)線”1.1 存儲(chǔ)過(guò)程的本質(zhì)不是“能放代碼”而是把邏輯沉淀在數(shù)據(jù)層很多人把存儲(chǔ)過(guò)程理解成“數(shù)據(jù)庫(kù)里的函數(shù)”這個(gè)說(shuō)法對(duì)了一半。函數(shù)重在計(jì)算和返回存儲(chǔ)過(guò)程重在“執(zhí)行一段完整的事務(wù)邏輯”。它是一段預(yù)先編譯好的、保存在數(shù)據(jù)庫(kù)服務(wù)端的代碼塊客戶端通過(guò)一個(gè)名字加一組參數(shù)就能觸發(fā)它。我習(xí)慣用一個(gè)類(lèi)比來(lái)解釋程序填空題里讓你補(bǔ)全的存儲(chǔ)過(guò)程就像一條預(yù)制菜生產(chǎn)線。原材料是表里的數(shù)據(jù)生產(chǎn)線的每個(gè)工位是一條SQL語(yǔ)句控制流轉(zhuǎn)的是IF、WHILE、CURSOR這些流程控制結(jié)構(gòu)最后出貨口是OUT參數(shù)或者結(jié)果集。調(diào)用方不需要關(guān)心生產(chǎn)線內(nèi)部怎么運(yùn)轉(zhuǎn)只需要把原料IN參數(shù)送進(jìn)去到點(diǎn)來(lái)取結(jié)果就行。這個(gè)設(shè)計(jì)帶來(lái)的核心價(jià)值有三個(gè)第一高性能——存儲(chǔ)過(guò)程在首次執(zhí)行時(shí)會(huì)被數(shù)據(jù)庫(kù)優(yōu)化器編譯后續(xù)執(zhí)行直接走緩存計(jì)劃尤其在循環(huán)調(diào)用場(chǎng)景下比反復(fù)發(fā)送SQL文本快得多第二低耦合——業(yè)務(wù)邏輯對(duì)客戶端隱藏修改內(nèi)部實(shí)現(xiàn)不需要改應(yīng)用代碼也不需要對(duì)客戶端暴露表結(jié)構(gòu)第三安全性可控——DBA可以只授予執(zhí)行權(quán)限而不授予底層表的讀寫(xiě)權(quán)限。不過(guò)正因?yàn)檫壿嫵猎跀?shù)據(jù)庫(kù)里它也帶來(lái)了調(diào)試?yán)щy、版本管理不便、跨庫(kù)遷移成本高等問(wèn)題。所以現(xiàn)在的架構(gòu)趨勢(shì)是“能不放就不放”但遇到復(fù)雜報(bào)表、批量數(shù)據(jù)處理、事務(wù)一致性要求高的場(chǎng)景存儲(chǔ)過(guò)程依然是不可替代的選擇。1.2 考試、面試和真實(shí)業(yè)務(wù)里存儲(chǔ)過(guò)程各占什么位置在考試的程序填空題里存儲(chǔ)過(guò)程主要考三件事語(yǔ)法結(jié)構(gòu)完整性、流程控制邏輯、參數(shù)與變量的使用。也就是說(shuō)你不需要設(shè)計(jì)一個(gè)復(fù)雜的業(yè)務(wù)但要能準(zhǔn)確補(bǔ)全DELIMITER、BEGIN、DECLARE、END IF、FETCH這些關(guān)鍵字并且保證邏輯正確。在面試?yán)锟疾禳c(diǎn)會(huì)偏向“是否理解存儲(chǔ)過(guò)程的邊界”什么時(shí)候適合用、什么時(shí)候不能用、和事務(wù)如何配合、并發(fā)下有什么問(wèn)題。在真實(shí)業(yè)務(wù)里尤其是銀行、電商、ERP這類(lèi)系統(tǒng)存儲(chǔ)過(guò)程依然是核心交易鏈路里的常客Oracle存儲(chǔ)過(guò)程、MySQL存儲(chǔ)過(guò)程、openGauss存儲(chǔ)過(guò)程都有大量存量代碼在跑。從搜索熱詞能看出一個(gè)趨勢(shì)——很多人在找“mysql存儲(chǔ)過(guò)程”和“oracle存儲(chǔ)過(guò)程”的語(yǔ)法對(duì)比還有“opengauss存儲(chǔ)過(guò)程”這種國(guó)產(chǎn)數(shù)據(jù)庫(kù)的寫(xiě)法。這說(shuō)明存儲(chǔ)過(guò)程不僅沒(méi)有過(guò)時(shí)反而因?yàn)閲?guó)產(chǎn)數(shù)據(jù)庫(kù)遷移再次成為技能剛需。不管底層數(shù)據(jù)庫(kù)怎么換存儲(chǔ)過(guò)程的思維模型是通用的只是語(yǔ)法細(xì)節(jié)有差異。2. 聲明語(yǔ)法逐行拆解——程序填空題的得分關(guān)鍵2.1 從一段最樸素的MySQL存儲(chǔ)過(guò)程講起先看一段最簡(jiǎn)單的MySQL存儲(chǔ)過(guò)程也是程序填空題最基礎(chǔ)的模板DELIMITER $$ CREATE PROCEDURE sp_hello(IN name VARCHAR(20)) BEGIN SELECT CONCAT(Hello, , name, !) AS greeting; END$$ DELIMITER ;這里面每行都有考點(diǎn)。DELIMITER是MySQL特有的、最容易在填空題里被挖掉的關(guān)鍵字。它的作用是把MySQL客戶端默認(rèn)的分號(hào)結(jié)束符臨時(shí)改成別的符號(hào)否則客戶端會(huì)在CREATE PROCEDURE的END處就把整個(gè)語(yǔ)句截?cái)鄬?dǎo)致語(yǔ)法錯(cuò)誤。CREATE PROCEDURE后面跟過(guò)程名和參數(shù)列表參數(shù)用括號(hào)包裹每個(gè)參數(shù)由“模式 參數(shù)名 數(shù)據(jù)類(lèi)型”組成。BEGIN和END之間是過(guò)程體過(guò)程體里可以寫(xiě)多條SQL語(yǔ)句、變量聲明、流程控制、游標(biāo)等。最后一定要把DELIMITER改回分號(hào)否則后續(xù)的普通語(yǔ)句都會(huì)以$$結(jié)尾容易踩坑。Oracle和openGauss的存儲(chǔ)過(guò)程結(jié)構(gòu)略有不同它們沒(méi)有DELIMITER這一說(shuō)直接以AS或IS開(kāi)始聲明部分過(guò)程體用BEGIN...END;包裹。比如CREATE OR REPLACE PROCEDURE sp_hello (p_name IN VARCHAR2) IS BEGIN DBMS_OUTPUT.PUT_LINE(Hello, || p_name || !); END sp_hello; /openGauss兼容Oracle語(yǔ)法的存儲(chǔ)過(guò)程同時(shí)也支持類(lèi)似PL/pgSQL的寫(xiě)法。填空題里如果考Oracle或openGauss多半會(huì)挖IN、IS、BEGIN、END這些位置。2.2 IN、OUT、INOUT三種參數(shù)模式怎么選才不丟分參數(shù)模式是存儲(chǔ)過(guò)程的核心考點(diǎn)也是新手最容易混淆的地方。MySQL的參數(shù)模式有三種IN、OUT、INOUTOracle和openGauss則寫(xiě)成IN、OUT、IN OUT注意中間有空格。IN模式是默認(rèn)模式也是最常用的。它表示調(diào)用方傳入一個(gè)值存儲(chǔ)過(guò)程內(nèi)部可以讀取這個(gè)值但對(duì)它的修改不會(huì)傳回給調(diào)用方。想象成你把錢(qián)放進(jìn)保險(xiǎn)箱保險(xiǎn)箱處理完錢(qián)還是你的不會(huì)因?yàn)槟愦孢^(guò)一次它就變成別的面額。OUT模式表示存儲(chǔ)過(guò)程內(nèi)部會(huì)給這個(gè)參數(shù)賦值調(diào)用方在調(diào)用前不需要給它值調(diào)用完成后可以讀取到結(jié)果。這就是“出貨口”。比如你送進(jìn)去一個(gè)訂單號(hào)過(guò)程把統(tǒng)計(jì)金額寫(xiě)到OUT參數(shù)里返回。INOUT模式則是雙向通道調(diào)用方先傳入一個(gè)值存儲(chǔ)過(guò)程內(nèi)部可以讀、可以改最終值傳回給調(diào)用方。最典型的應(yīng)用場(chǎng)景是做自增序號(hào)或累加器。選擇題和填空題最喜歡出這種題問(wèn)“存儲(chǔ)過(guò)程內(nèi)部修改后哪個(gè)參數(shù)的值能傳回調(diào)用方”答案是OUT和INOUTIN不行。如果題目問(wèn)“調(diào)用前必須賦初值的是哪個(gè)”答案是INOUT因?yàn)镺UT調(diào)用前不需要賦值IN就算賦了也會(huì)被忽略。2.3 變量的三個(gè)層級(jí)搞不清就寫(xiě)不出正確的賦值邏輯存儲(chǔ)過(guò)程里變量有三個(gè)層級(jí)局部變量、用戶變量、系統(tǒng)變量。程序填空題里常挖的是前兩種。局部變量用DECLARE聲明必須放在BEGIN...END語(yǔ)句塊的開(kāi)頭部分也就是所有可執(zhí)行語(yǔ)句之前。比如DECLARE total_amount DECIMAL(10,2) DEFAULT 0; DECLARE done INT DEFAULT 0;局部變量只能在聲明它的BEGIN...END塊內(nèi)使用塊結(jié)束變量就銷(xiāo)毀。給它賦值有兩種方式SET和SELECT...INTO。用戶變量用前綴比如dept_count。它不需要DECLARE直接用SET賦值即可創(chuàng)建生命周期是當(dāng)前會(huì)話。用戶變量的一個(gè)特點(diǎn)是可以在存儲(chǔ)過(guò)程內(nèi)部使用也可以在過(guò)程返回后繼續(xù)在客戶端查詢。這常用于在存儲(chǔ)過(guò)程之間傳遞臨時(shí)值或者在調(diào)試時(shí)打印中間結(jié)果。區(qū)分這三個(gè)層級(jí)的有效記憶方法是DECLARE是“面試前的本地草稿紙”是“會(huì)議室的公共白板”系統(tǒng)變量則不要碰一般不用存儲(chǔ)過(guò)程去修改。填空題里如果出現(xiàn)“聲明變量”的關(guān)鍵字答案通常就是DECLARE如果出現(xiàn)“給變量賦值”的語(yǔ)句優(yōu)先考慮SET。3. 核心實(shí)現(xiàn)機(jī)制的五個(gè)必考模塊IF、CASE、循環(huán)、游標(biāo)、異常3.1 條件判斷IF和CASE的語(yǔ)法差異填空題的“送分題”與“送命題”存儲(chǔ)過(guò)程里的IF和普通編程語(yǔ)言里的IF很接近但語(yǔ)法細(xì)節(jié)不同。MySQL的IF結(jié)構(gòu)是IF 條件 THEN 語(yǔ)句; ELSEIF 條件 THEN 語(yǔ)句; ELSE 語(yǔ)句; END IF;注意ELSEIF是一個(gè)單詞不是ELSE IF而且整個(gè)結(jié)構(gòu)必須以END IF加空格加冒號(hào)結(jié)尾也就是END IF;。這兩個(gè)位置是程序填空題的高頻挖空點(diǎn)。如果寫(xiě)成ENDIF會(huì)直接語(yǔ)法報(bào)錯(cuò)。CASE有兩個(gè)變體。第一個(gè)是簡(jiǎn)單CASE拿一個(gè)表達(dá)式和多個(gè)值比較CASE level WHEN A THEN SET score 100; WHEN B THEN SET score 80; ELSE SET score 60; END CASE;第二個(gè)是搜索CASE每個(gè)WHEN后面跟完整條件布爾表達(dá)式CASE WHEN score 90 THEN SET grade 優(yōu); WHEN score 60 THEN SET grade 及格; ELSE SET grade 不及格; END CASE;別漏掉END CASE;結(jié)尾。在Oracle和openGauss中IF的寫(xiě)法變成了ELSIF少一個(gè)EEND IF同樣不可缺少而CASE的結(jié)束是END CASE;與MySQL一致。考Oracle時(shí)ELSIF就是一個(gè)經(jīng)典的坑很多人想當(dāng)然寫(xiě)上ELSEIF就丟了分。3.2 三種循環(huán)結(jié)構(gòu)WHILE、REPEAT、LOOP什么時(shí)候用哪個(gè)MySQL存儲(chǔ)過(guò)程支持三種循環(huán)WHILE、REPEAT、LEAVE配合LOOP。WHILE循環(huán)是“先判斷后執(zhí)行”循環(huán)體可能一次都不執(zhí)行。語(yǔ)法WHILE 條件 DO 語(yǔ)句; END WHILE;REPEAT循環(huán)是“先執(zhí)行后判斷”至少執(zhí)行一次。語(yǔ)法REPEAT 語(yǔ)句; UNTIL 條件 END REPEAT;LOOP則是一個(gè)無(wú)限循環(huán)必須配合LEAVE語(yǔ)句跳出LOOP 語(yǔ)句; IF 條件 THEN LEAVE loop_label; END IF; END LOOP;括號(hào)里這個(gè)loop_label就是循環(huán)標(biāo)簽標(biāo)簽必須在循環(huán)體開(kāi)頭聲明格式是標(biāo)簽名加冒號(hào)比如loop_label: LOOP。程序填空題里考LOOP循環(huán)時(shí)會(huì)挖LEAVE和標(biāo)簽的位置。實(shí)際寫(xiě)復(fù)雜邏輯時(shí)我比較推薦WHILE因?yàn)樗钪庇^不容易出現(xiàn)死循環(huán)。REPEAT適合“無(wú)論如何處理至少要先做一次”的場(chǎng)景比如遍歷生成序列。LOOP則適合需要在循環(huán)體中間多條件跳出、又沒(méi)有統(tǒng)一循環(huán)條件的場(chǎng)景。3.3 游標(biāo)的四步走聲明、打開(kāi)、抓取、關(guān)閉一步都不能少游標(biāo)是程序填空題的壓軸題。游標(biāo)本質(zhì)上是一個(gè)指向查詢結(jié)果集的指針讓你可以一行一行地處理數(shù)據(jù)而不是一次性把整個(gè)結(jié)果集塞進(jìn)內(nèi)存。一個(gè)標(biāo)準(zhǔn)的游標(biāo)使用流程包含四個(gè)步驟正好是填空題的四個(gè)空位-- 第一步聲明游標(biāo)綁定查詢結(jié)果集 DECLARE cur_emp CURSOR FOR SELECT id, salary FROM employee; -- 第二步聲明異常處理器用于判斷數(shù)據(jù)是否遍歷完 DECLARE CONTINUE HANDLER FOR NOT FOUND SET done TRUE; -- 第三步打開(kāi)游標(biāo) OPEN cur_emp; -- 第四步循環(huán)抓取數(shù)據(jù)處理完關(guān)閉 FETCH cur_emp INTO v_id, v_salary; CLOSE cur_emp;關(guān)鍵點(diǎn)在于done變量的配合使用。在MySQL中當(dāng)FETCH沒(méi)有更多數(shù)據(jù)可抓取時(shí)會(huì)觸發(fā)NOT FOUND條件如果之前聲明了CONTINUE HANDLER FOR NOT FOUND就會(huì)把done變量置為T(mén)RUE。于是循環(huán)條件可以寫(xiě)成WHILE NOT done DO循環(huán)體內(nèi)第一件事是FETCH第二件事是處理數(shù)據(jù)。這里有個(gè)非常經(jīng)典的踩坑點(diǎn)FETCH語(yǔ)句和CONTINUE HANDLER的聲明順序。在MySQL里DECLARE語(yǔ)句必須在BEGIN塊最前面游標(biāo)和異常處理器也都屬于DECLARE范疇所以必須放在一起聲明并且游標(biāo)必須聲明在變量的聲明之后、異常處理器的聲明之前否則會(huì)報(bào)語(yǔ)法錯(cuò)誤。這個(gè)順序在程序填空題里如果挖空很容易寫(xiě)亂。Oracle和openGauss的游標(biāo)寫(xiě)法也遵循類(lèi)似的四步流程不過(guò)異常處理的寫(xiě)法變成BEGIN OPEN cur_emp; LOOP FETCH cur_emp INTO v_id, v_salary; EXIT WHEN cur_emp%NOTFOUND; END LOOP; CLOSE cur_emp; END;這里用的是游標(biāo)屬性%NOTFOUND來(lái)判斷是否取完不再依賴(lài)CONTINUE HANDLER。兩種風(fēng)格都要熟因?yàn)榭荚嚭兔嬖嚳赡芤黄鹂肌?.4 異常處理不是加分項(xiàng)而是生產(chǎn)環(huán)境的保命項(xiàng)MySQL的異常處理核心是DECLARE...HANDLER它有兩種級(jí)別CONTINUE和EXIT。CONTINUE表示遇到異常繼續(xù)執(zhí)行后續(xù)代碼EXIT表示遇到異常直接退出當(dāng)前BEGIN塊。常見(jiàn)寫(xiě)法DECLARE EXIT HANDLER FOR SQLEXCEPTION BEGIN ROLLBACK; SELECT 事務(wù)回滾 AS msg; END;SQLEXCEPTION是MySQL的異常類(lèi)別它捕獲SQL執(zhí)行過(guò)程中的所有錯(cuò)誤。也可以針對(duì)具體錯(cuò)誤碼寫(xiě)比如聲明一個(gè)專(zhuān)門(mén)針對(duì)“表不存在”錯(cuò)誤碼1146的處理器。這種精細(xì)化控制在批量任務(wù)里很有用能做到“遇到某類(lèi)錯(cuò)誤就跳過(guò)遇到致命錯(cuò)誤就停止”。Oracle和openGauss則是用EXCEPTION塊EXCEPTION WHEN NO_DATA_FOUND THEN v_msg : 數(shù)據(jù)不存在; WHEN OTHERS THEN v_msg : 未知錯(cuò)誤; END;這里OTHERS對(duì)應(yīng)MySQL的SQLEXCEPTIONNO_DATA_FOUND對(duì)應(yīng)“NOT FOUND”條件。在生產(chǎn)級(jí)存儲(chǔ)過(guò)程里異常處理不是可有可無(wú)的裝飾而是必須在編碼階段就布局好的安全網(wǎng)——否則一條報(bào)錯(cuò)就能讓整個(gè)批量任務(wù)的中斷狀態(tài)變得不可控。4. 完整實(shí)操?gòu)慕ū淼絊QLSugar調(diào)用一條龍寫(xiě)一個(gè)訂單統(tǒng)計(jì)存儲(chǔ)過(guò)程4.1 需求設(shè)計(jì)這個(gè)存儲(chǔ)過(guò)程要解決什么問(wèn)題光講語(yǔ)法不落地等于紙上談兵。這里我設(shè)計(jì)一個(gè)貫穿始終的實(shí)戰(zhàn)例子一個(gè)電商系統(tǒng)的訂單表需要按部門(mén)統(tǒng)計(jì)訂單總額并把結(jié)果保存到統(tǒng)計(jì)表同時(shí)返回總額給調(diào)用方。這個(gè)場(chǎng)景涵蓋了建表、變量、游標(biāo)、事務(wù)、OUT參數(shù)、異常處理可以一次性全用上。先建兩張表CREATE TABLE dept_order_count ( dept_id INT PRIMARY KEY, total_amount DECIMAL(12,2) DEFAULT 0.00, stat_date DATE ); CREATE TABLE order_detail ( order_id INT PRIMARY KEY AUTO_INCREMENT, dept_id INT NOT NULL, amount DECIMAL(10,2) NOT NULL, status TINYINT DEFAULT 1 COMMENT 1正常 0取消 );order_detail是訂單流水dept_order_count是統(tǒng)計(jì)結(jié)果表。存儲(chǔ)過(guò)程要做的事情是遍歷所有部門(mén)統(tǒng)計(jì)每個(gè)部門(mén)在order_detail里未取消訂單的總額如果統(tǒng)計(jì)表里已有該部門(mén)的記錄就更新沒(méi)有就插入最后把所有部門(mén)的總匯總金額寫(xiě)到OUT參數(shù)。這個(gè)需求用一條普通的GROUP BY SQL也能做但一旦牽扯到“逐部門(mén)處理還要做UPSERT還要返回總金額給外部”用存儲(chǔ)過(guò)程就顯得更內(nèi)聚。4.2 完整代碼帶注釋的MySQL存儲(chǔ)過(guò)程范本先不急著上完整代碼要分析一個(gè)關(guān)鍵點(diǎn)為什么這里要用游標(biāo)而不是直接INSERT...SELECT因?yàn)樾枨笠蟆爸饌€(gè)部門(mén)計(jì)算并輸出中間過(guò)程”在實(shí)際的報(bào)表場(chǎng)景里可能每個(gè)部門(mén)還要調(diào)用獨(dú)立的算法或者寫(xiě)日志。游標(biāo)能把“遍歷部門(mén)”這個(gè)流程顯式化方便擴(kuò)展。如果MySQL的窗口函數(shù)能完美處理就不必游標(biāo)“能用集合操作優(yōu)先用集合”始終是鐵律。下面是完整代碼也是可以直接背下來(lái)的模板DELIMITER $$ CREATE PROCEDURE sp_stat_dept_order( IN p_stat_date DATE, OUT p_total_amount DECIMAL(12,2) ) BEGIN -- 聲明局部變量 DECLARE v_dept_id INT; DECLARE v_amount DECIMAL(12,2); DECLARE v_total DECIMAL(12,2) DEFAULT 0.00; DECLARE done INT DEFAULT FALSE; -- 聲明游標(biāo)遍歷有效訂單的部門(mén) DECLARE cur_dept CURSOR FOR SELECT dept_id, SUM(amount) FROM order_detail WHERE status 1 AND DATE(create_time) p_stat_date GROUP BY dept_id; -- 聲明異常處理器 DECLARE CONTINUE HANDLER FOR NOT FOUND SET done TRUE; OPEN cur_dept; REPEAT FETCH cur_dept INTO v_dept_id, v_amount; IF NOT done THEN -- 如果統(tǒng)計(jì)表中已有記錄更新否則插入 IF EXISTS(SELECT 1 FROM dept_order_count WHERE dept_id v_dept_id) THEN UPDATE dept_order_count SET total_amount v_amount, stat_date p_stat_date WHERE dept_id v_dept_id; ELSE INSERT INTO dept_order_count(dept_id, total_amount, stat_date) VALUES(v_dept_id, v_amount, p_stat_date); END IF; SET v_total v_total v_amount; END IF; UNTIL done END REPEAT; CLOSE cur_dept; -- 結(jié)果寫(xiě)入OUT參數(shù) SET p_total_amount v_total; END$$ DELIMITER ;有幾個(gè)細(xì)節(jié)值得留意。第一游標(biāo)查詢里明確只查status1的訂單把無(wú)效訂單在源頭過(guò)濾掉第二IF EXISTS判斷后面子查詢SELECT 1比SELECT *性能更好第三v_total累加邏輯放在IF NOT done之內(nèi)避免done為T(mén)RUE時(shí)把重復(fù)的FETCH結(jié)果累加進(jìn)去。程序填空題如果拿這個(gè)當(dāng)原型挖空點(diǎn)會(huì)集中在DELIMITER、DECLARE、CURSOR FOR、CONTINUE HANDLER、REPEAT、UNTIL、CLOSE這些位置。你可以在心里試著把這些詞遮住默寫(xiě)一遍就知道自己哪里薄弱了。4.3 在Navicat和命令行里調(diào)用調(diào)用的姿勢(shì)也要規(guī)范存儲(chǔ)過(guò)程創(chuàng)建好之后調(diào)用本身很簡(jiǎn)單。命令行里用CALL命令CALL sp_stat_dept_order(2025-01-31, total); SELECT total;第一句執(zhí)行存儲(chǔ)過(guò)程傳入統(tǒng)計(jì)日期第二個(gè)參數(shù)傳一個(gè)用戶變量用來(lái)接收OUT返回值。調(diào)用完成后SELECT total;能看到總金額。Navicat里可以直接選中存儲(chǔ)過(guò)程點(diǎn)擊運(yùn)行按鈕在彈出的參數(shù)輸入界面填參數(shù)值。如果你傳的是一個(gè)普通字符串注意加上單引號(hào)否則會(huì)被當(dāng)成列名解析報(bào)錯(cuò)。這是很多新手在可視化工具里的第一個(gè)坑。4.4 用SQLSugar在.NET里調(diào)用存儲(chǔ)過(guò)程O(píng)RM不是只能查表如果項(xiàng)目是.NET技術(shù)棧SQLSugar是一個(gè)非常好用的ORM框架它對(duì)存儲(chǔ)過(guò)程的支持也很完整。熱詞里出現(xiàn)“sqlsugar存儲(chǔ)過(guò)程”說(shuō)明現(xiàn)在Express應(yīng)用里調(diào)存儲(chǔ)過(guò)程的需求并不少。用SQLSugar調(diào)存儲(chǔ)過(guò)程核心是SqlSugarClient的Ado屬性。最常用的方式是var result db.Ado.UseStoredProcedure() .GetDataTable(sp_stat_dept_order, new SugarParameter(p_stat_date, 2025-01-31), new SugarParameter(p_total_amount, null, System.Data.DbType.Decimal, ParameterDirection.Output)); decimal total result.Rows[0][0] DBNull.Value ? 0 : Convert.ToDecimal(result.Rows[0][0]);如果你更關(guān)心OUT參數(shù)用UseStoredProcedure配合GetDataTable時(shí)可以把輸出參數(shù)一并傳遞返回的表數(shù)據(jù)是過(guò)程里最后SELECT出來(lái)的結(jié)果集。關(guān)于OUT參數(shù)注意SugarParameter的構(gòu)造重載第四個(gè)參數(shù)是ParameterDirection.Output這樣調(diào)用完成后同一個(gè)SugarParameter對(duì)象的Value屬性里就會(huì)有輸出值。如果你要的是OUT值而非結(jié)果集更清晰的做法是var outParam new SugarParameter(p_total_amount, null, System.Data.DbType.Decimal, ParameterDirection.Output); db.Ado.UseStoredProcedure().ExecuteCommand(sp_stat_dept_order, new SugarParameter(p_stat_date, 2025-01-31), outParam); Console.WriteLine(outParam.Value);建議在項(xiàng)目里統(tǒng)一封裝一個(gè)StoredProcedureHelper把參數(shù)構(gòu)造、異常處理、日志輸出都放到公共方法里避免每個(gè)業(yè)務(wù)點(diǎn)都重復(fù)寫(xiě)參數(shù)代碼。調(diào)用完成后務(wù)必判斷outParam.Value是否為DBNull因?yàn)榇鎯?chǔ)過(guò)程里沒(méi)給OUT賦值時(shí)客戶端收到的值會(huì)是DBNull直接轉(zhuǎn)decimal會(huì)拋異常。5. 常見(jiàn)報(bào)錯(cuò)與踩坑實(shí)錄——每一個(gè)都是真金白銀換來(lái)的教訓(xùn)5.1 DELIMITER不生效的幾種情況第一個(gè)坑是生命周期問(wèn)題。DELIMITER只在當(dāng)前會(huì)話里生效如果你斷開(kāi)連接重連必須再設(shè)置一次。用Navicat或DataGrip時(shí)如果創(chuàng)建存儲(chǔ)過(guò)程總是報(bào)錯(cuò)先檢查編輯器底部的會(huì)話是否支持多語(yǔ)句執(zhí)行有些圖形工具默認(rèn)就把DELIMITER當(dāng)成普通語(yǔ)句發(fā)給服務(wù)端需要關(guān)閉“將查詢用分號(hào)分隔”這類(lèi)選項(xiàng)。第二個(gè)坑是最容易忽略的DELIMITER后面必須跟空格。寫(xiě)成DELIMITER$$和DELIMITER $$在多數(shù)情況下都能用但老版本MySQL里如果沒(méi)空格分隔符解析可能出錯(cuò)。更穩(wěn)妥的寫(xiě)法是DELIMITER $$后面留一個(gè)空格。第三個(gè)坑是無(wú)意中把DELIMITER寫(xiě)進(jìn)了存儲(chǔ)過(guò)程內(nèi)部。分隔符只是客戶端指令不是數(shù)據(jù)庫(kù)服務(wù)端語(yǔ)法所以千萬(wàn)別把DELIMITER寫(xiě)在BEGIN...END塊內(nèi)部那會(huì)直接報(bào)語(yǔ)法錯(cuò)誤。5.2 參數(shù)名和列名沖突這是一個(gè)隱形的邏輯炸彈很多初學(xué)者會(huì)給參數(shù)起名叫dept_id而表里正好也有dept_id列。這時(shí)候在WHERE子句里寫(xiě)WHERE dept_id dept_id數(shù)據(jù)庫(kù)會(huì)怎么理解MySQL在這種情況下會(huì)把兩個(gè)dept_id都當(dāng)作列名來(lái)解析結(jié)果就是條件恒為真查詢結(jié)果是全表數(shù)據(jù)。更隱蔽的情況是在SET語(yǔ)句里寫(xiě)SET dept_id dept_id本意是想把參數(shù)值賦給變量結(jié)果兩邊都指向列名根本沒(méi)有賦值效果。避免辦法只有兩條一是參數(shù)命名統(tǒng)一加前綴比如p_dept_id、v_dept_id做區(qū)分二是在存儲(chǔ)過(guò)程開(kāi)頭就養(yǎng)成習(xí)慣任何參數(shù)和變量都不與列名同名。Oracle和openGauss開(kāi)發(fā)者也有個(gè)習(xí)慣就是在參數(shù)前加p_前綴變量加v_前綴這不是什么編碼潔癖而是實(shí)打?qū)嵰?guī)避二義性的做法。MySQL同樣適用。5.3 游標(biāo)和循環(huán)的性能陷阱游標(biāo)是逐行處理性能天然不如集合操作。在數(shù)據(jù)量大的表上跑游標(biāo)如果每行都執(zhí)行一個(gè)INSERT或UPDATE大量行鎖、日志和網(wǎng)絡(luò)往返很快會(huì)把數(shù)據(jù)庫(kù)拖垮。建議的做法是能用JOIN、窗口函數(shù)、CASE WHEN聚合解決的就堅(jiān)決不用游標(biāo)必須用游標(biāo)時(shí)在游標(biāo)查詢里就把條件收緊盡量只撈必要字段。另外在循環(huán)里做UPDATE前先仔細(xì)檢查WHERE條件是否命中索引否則每行一個(gè)全表掃描直接變成生產(chǎn)事故。OPEN到CLOSE之間的游標(biāo)會(huì)占用臨時(shí)表空間用完務(wù)必CLOSE釋放。程序填空題里的CLOSE就是這個(gè)作用它不是形式而是資源管理的一部分。5.4 權(quán)限問(wèn)題創(chuàng)建和執(zhí)行不是一回事存儲(chǔ)過(guò)程創(chuàng)建后調(diào)用方不一定有權(quán)限執(zhí)行。MySQL里需要單獨(dú)授權(quán)GRANT EXECUTE ON PROCEDURE demo_db.sp_stat_dept_order TO app_userlocalhost;很多開(kāi)發(fā)者在本地用root寫(xiě)好了存儲(chǔ)過(guò)程部署到測(cè)試環(huán)境直接報(bào)“PROCEDURE sp_stat_dept_order does not exist”排查半天發(fā)現(xiàn)其實(shí)是賬號(hào)沒(méi)有EXECUTE權(quán)限導(dǎo)致的不是過(guò)程不存在。權(quán)限設(shè)計(jì)上還有個(gè)專(zhuān)業(yè)建議存儲(chǔ)過(guò)程內(nèi)部讀哪些表授權(quán)時(shí)不需要把這些表的SELECT權(quán)限也授給調(diào)用方。因?yàn)榇鎯?chǔ)過(guò)程默認(rèn)以創(chuàng)建者權(quán)限執(zhí)行或明確使用SQL SECURITY INVOKER來(lái)按調(diào)用者權(quán)限。這是存儲(chǔ)過(guò)程在安全層面的優(yōu)勢(shì)也是設(shè)計(jì)存儲(chǔ)過(guò)程時(shí)一定要考慮清晰的邊界。說(shuō)到我的經(jīng)驗(yàn)最值得記住的一點(diǎn)是存儲(chǔ)過(guò)程的代碼風(fēng)格必須比普通SQL更保守每一步都要考慮異常退出后的狀態(tài)該回滾就回滾該關(guān)游標(biāo)就關(guān)游標(biāo)。程序填空題只考你會(huì)不會(huì)寫(xiě)而生產(chǎn)環(huán)境會(huì)考你能不能善后。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
久久婷婷五月天| 日本色色视频网站| 97超碰色屌| 黄色一级视| 亚洲欧美激情小说| 亚洲图片欧美另类综合免费视频大大香| 青青草好吊色| 欧美激情亚洲情色| 91亚州欧美| 久久极品伊人| 丁香五月av| 欧美日韩第一页| 成人五月天丁香激情综合| 91伊人大香蕉| 精品网站99999| 极品极品色影院| 日本三级久| 啊嗯好大视频在线观看| 激情婷婷黑人91| 韩国一级做a久久久久| 密乳无码| 强歼乱伦资源网| 强被迫伦姧在线观看无码网站| 伊人视频| 人人摸人人舔一区二区| 亚洲日韩东京热一区| 超碰激情808| 偷拍 精品另类 凸凹了四区| 午夜欧美神马久久久久| 黑人天8A∨高清网站| 天天插天天干| 日韩人妻资源网| 91人人臊| 五月丁香婷婷综合| 久久久艹艹艹| 欧美精品丝袜久久久中文字幕| 五月天开心网| 亚洲欧美精品一区天堂久久 | 成年女人黄网站| 翔田千里无码中出中文字幕| 亚洲熟女乱色一区二区三区| 美国日韩黄片| 久久国产熟女影院| 九九干| 久久久亚洲Av| 色五月综合| 天天摸,夜夜摸| 日本人妻A片成人免费看片| 高清国产av无码| 色久桃花影院在线观看| 国产精品自在线发布| 思思热影视| 国产精品一级特黄aaa大片在线观看| 看免费一级在线播放毛片| 呦呦影院| 可以在线观看AV的网站| 亚洲人妻一区二区三区| 绯色AV粉色AV蜜臀AV| 艳尻美人妻| 大屁股国产在线视频| 黄色十八禁| 夜夜嗨一区二区三区三州加勒比| 九九久久玖玖| 久久精品人人做人人看| 这里都是精品在线观看| 欧美无圣光在线| 香港日本韩国人妇99www.wccm20| 日韩有码中文字幕女同性恋| 欧美国产精品久久九九| 新版天堂中文资源8在线| 亚洲乱熟女一区二区三区大香蕉| 熟女天天干| 欧美色图91p| 久久午夜神马| 性色生活片久久毛片婬片免费放女人一级毛片 | 日韩福利综合一区| 天天综合精品| 极品久久久久久久久久久久久久| 漂亮人妻被强中文字幕hd| 欧美欧美啪啪视频| 超碰久热| 丝袜美腿校园春色| 综合夜夜| 五月久久HDAV| 久久久久九九九九九| 97色碰| 乱伦av.com| 九九热免费国产视频婷婷伊人| 又摸又舔在线观看网站| 丰满人妻一区二区三区免费| 日本熟妇人妻中出视频| 性感美女啊啊啊在线| 绯色一区二区三区不卡少妇| 女人天堂AV五区在线| 亚洲综合一| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区 | 亚洲永久AV无码精品秋霞| 亚洲电影91| 亚洲se91| 五月天婷婷激情| 视频在线中文字幕| 久久精品中文字幕观看| 熟女丰满人妻一区| 狠狠操狠狠操操| 亚洲精品视频在线播放| 久久超碰天天| 五月天婷精品激情| 精品一区二区2| 午夜视频久久久久一区| 91N欧美| 深喉吞精| 天堂蜜桃无码视频一区二区| 90后后入| 亚洲激情网| 欧美色交| 99热色精品| 亚洲有薄码区久久在线一区| 久久无码电影| 美女天天干| 国产尤物AV尤物在线观看不卡| 蜜臀在线免费观看在线免费观看| 另类小说综合网| 97色爱| 人人操人人爽人人操人人| 亚洲婷婷五月天| 综合网少妇| 国产CHASE男男GAYGA 毛多色婷婷| 国产久久男人天堂| 久热婷婷| 97在线免费观看视频| 婷婷在线播放| 欧美v亚洲v综合v国产v妖精| 欧美午夜色妇色鬼| 狠狠干狠狠色| 色九久| 夜夜操狠狠操| 午夜精品久久一区二区| 日韩一999精品| 女同女同恋久久级三级| 四虎影视永久在线观看精品免费网站 | 69精品| 天天影视色香色欲| 日韩熟女操逼| 超碰无码五月97| 成人性爱电影一区二区| 亚洲女人91| 精品 码产区一区二-1080P高清在线www-B029AV | 99热官网| 亚洲 欧美 偷拍 唯美| www.高清无码诱惑一区.com | 狼狼色丁香久久婷婷综合五月| 国产精品不卡一区二区三区| 懂色AV蜜臀无码精品APP| 少妇无码av专区线| 超碰久超碰久| 亚洲精品国产精品乱码不卡| 在线观看中文av字幕| 偷拍亚洲视频一区二区三区四区| 亚洲情色婷婷五月天| 手机午夜电影神马久久| 青青草一区二区三区四| 欧美高清性猛交| 插穴性爱视频在线观看| 久久久91| 玖玖超碰熟| 九九色综合| 丁香九月 婷婷| 亚洲色图欧美色图综合| 亚洲偷91色| 精品一区96| 亚洲中文一区二区三区| 中文字幕三四区| 噜噜噜久久亚洲精品色情| 日本 欧美 国产一区| 日韩有码专区| 操逼1区| 天天日天天看| 日韩一级二级三级免费看完整版国语版 | 玖玖爱一区在线| 国产剧情AV不卡在线观看| 老熟女综合网| 日本好吊色视频| 殴美牲| 黄页视频网站野外| 翔田千里爆乳巨臀无码| 国产91精品在线免费| 夜夜嗨老熟女AV一区二区三区| 日本久久久久久久久| 欧美顶级黄色大片免费| 国产精品免费1区2区视频| 综合少妇网| 伊人午夜福利视频| 精品久久艹| 国产天天看| 人妻碰碰碰碰碰碰| 亚洲图片 91| 国产精品久久久久综合| 一起草精品人妻| 国产免a费看黄片在线| 精品无码一区二区三区色欲| 日韩欧无码一区二区三区免费不卡| 就去色综合| 色爽——AV| 蜜臀亚洲综合一二三四区| 青青草自拍视频在线播放| 激情五月婷| 91爆操视频| 性爱视频无打码在线观看| 久久伊人最新网址视频| 黄色免费一级在线毛片| 大屁股人妻女教师撅着屁股| 欧美日韩国产黄色片| 久久久性| 午夜一级免费毛片| 国产精品99久久久www| 97国产高清视频在线观看| 草草影院最新网址| 亚洲最新av无码成人精品区| 狠狠操夜夜| 国产三级多多影院2022国产AA一级毛片无码 | 亚欧操逼片在线观看| 亚洲drav色图| 91黑丝操| 天天操妹子| 中文字幕乱码在线观看| 亚洲一二三四区| 亚洲不雅视频1区二区| 香蕉视频欧美一卡二卡| 久久透逼视频| 国产精品亚洲免费| 人妻天天操天天爽视频免费| 婷婷五月天久久精品视频一区二区三区| 欧美大香蕉卡久久| 亚洲欧美91√| 国产精品成人午夜福利| 女人精品内射国产99| 被男人吃奶很爽的毛片| 亚洲一区二区三区AV无码 | 蜜臀99久久精品久久久久久| 亚洲一区二区AV| 国产黄色在线播放观看| 高清无码国产亚洲| 久久大香蕉手机高清| 久久男人网| 91高跟美女在线播放| 欧美精品欧美精品系列| 97在线观看| 国产毛片在线| 日本在线一二 | 国产麻豆福利av在线播放| 5278欧美一区二区三区| 日本天堂网| 手机av亚洲丝袜美腿日韩第一页二页| 国产熟妇 码视频户外直播| 中国女人内射6XXXXX| 亚洲激情久久| 96久久久精品| 久久久久久久免费A片国产成a人亚洲精∨品无码 | 日本人妻丰满熟妇久久久久久| 白丝被操91| 天天色综合天天操| 色av中文字幕| 亚州色综合| 欧美日韩香蕉| 吉川爱美亚洲二区在线| 欧美天天搞| 一级黄色性爱A级片| 花野真衣| 97精品人妻一二三四| 国产成久久综合片| 五月激情天| 超碰碰小说97| 国产精品探花视频| 亚洲熟女乱熟乱熟妇综合网二区| 蜜臀99久久国产| 无码黑人精品一区二区三区三| 天天欧美色| 亚洲在线A| 国产精品 久久久精品一牛| 亚洲最大91网| 欧美日韩资源| 日韩精品.久久精品.AV女优.天美传媒| 日本孕妇孕交| 岛国精品视频在线观看| 2019亚洲男人天堂| 四虎影视永久在线免费| 亚洲色图 综合| 亚洲av国产av综合av卡| 九九十八精品| 一级二级三级黑人无码| 亚洲欧美另类少妇精品| 韩国免费播放一级毛片| 伊人久久国产免费观看视频| 天堂v无码免费视频| 精品久久久久,69国产成人精| 91制服丝袜中文字幕| 伊人婷婷五月天| 亚洲丰满很很操| 人人操人人uiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii | 国产无码一二三区| 久久一二三四五六七八九区区| 91免费看一区二区三区 | 蜜臀无码视频在线观看| 日韩 成人 有码| 色屁屁影院www国产| 午夜呻吟欧美| 性爱网站一区二区| 欧美色自拍| 日韩卡一卡二卡三在线| 日本熟妇自慰性高潮一区二区三区| 日韩人妻中文视频| 超碰97.com| 992这里有精品| henhen91| 美女裸体麻豆天美蜜桃91| 狠狠操,使劲操| 超碰无码五月97| 性爱av在线免费观看| 日日摸日日碰夜夜爽视频| 久操综合在线| 欧美色视频在线| 青青草中日韩在线| 欧美日韩999| 国产精品女aA片爽爽视频| 人人爱夜夜爱| 日韩午夜精品一区二区三区电影| 国产精品69久久久久孕妇欧美| 亚洲天堂 视频你懂的| 欧美碰碰综合色| 大香蕉 222| 亚洲熟女性高潮久久久| 97久操| 中文字幕二区日韩天堂| 亚洲中文国际强奸字幕| 97日亚洲欧美| 亚洲老司机123专区| 国产一区二区啪啪视频| 2017人人操,人人摸| 91M一社| 夜夜爽妓女| 7777欧美成是人在线观看| 人妻丝袜一区二区三区在线| 久久久中文版| 五月婷在线| 99这里只有精品国产| 日本二区不卡| 日韩资源网| 91oumei| 黄片com.| 国产日韩欧美亚洲精品95| 97免费视频在线| 国产精品久久久久久久久久久久久久久 | 亚洲欧洲av影音| 先锋音影AV| 亚洲91极品| 亚洲精品日韩国产欧美| 久操网无码在线| 久久九色| 91亚洲人| 麻豆一区二区AV天美| 伊人国产视频| 97视频在线免费看| 清纯唯美激情四射| 亚洲天堂人妻一区二区| 五月丁香啪啪网| 国产成年免费大片黄在线观看| 欧美 亚洲| 欧美一品道| 久久99精品九九久久久婷婷| 亚洲性图91| 亚洲日韩成人性爱视频| 久久久999国产| 日本操逼视频导航| 大香蕉手机在线| 91蜜桃传媒精品久久久一区二区| 精品日韩产品在线,日韩在线不卡视频,欧美日韩免费专区/久, | 日韩性爱免费观看视频| 久久黄人人爽视频| 九九九九精| 麻豆熟妇乱妇熟色A片在线看| 欧美视频激情久久久久久| 久久久久久性爱片| 欧美色偷拍 | 日夜精品| 狠狠爱综合网| 久久久性| 亚洲精品官网在线观看| 日韩AV无码中文一区二区| 国产操伦| 手机看av网站在线看| 91足交| 伊人久久大香线蕉无码| 户外裸露刺激视频第一区| 欧美一区二区三区入口| 丁香五月天激情网站| 人妻日日干| 免费啪啪啪网站18岁| WWW黄片COM| 婷婷香蕉| 日韩在线人妻网站| 天天日天天操VV| 亚av顶级裸体一区二区三区四区五区| 黄久在线| 亚洲在线欧美| 激情小说成人日本无码一| 日韩少妇一区二区三区| 五月天偷拍| 韩国轻伦国内自拍一区| 国产久久一区二区| 日韩天天综合| 国内偷拍精品一区二区| av无码av无码专区| 久久久久免费少妇| 黄总AV色图| 四虎免费视频| 国产精品久久久| 无码高清操逼网址| 九月婷婷久久| 男人的天堂欧美| 久久偷偷色综合蜜桃| 国产精选视频| 国产精品美女在线一区| 国产日比| 91美女視頻| 国内毛片四区| 欧美色视频在线| 992这里有精品| 97天天弄| 女优大全 - 91n| 国产黄片精品在线| 中文字幕精品一区二区精品| 九九九九免费高| 春色综合网| 激情小说成人日本无码一| 最新欧洲欧美日本激情网站| 婷婷五月天无码| 另类欧美综合| 1024人妻熟女一区二区三区| 欧美少妇第一页| 国产97色在线 | 亚洲| 久久透逼视频| 白丝1区2区3区| 精品少妇一区二区三区| 黄色激情电影在线观看| 婷婷四五区| 男人天堂最新手机版在线青青草| 国产亚洲深夜激情| 国产精品青青草| 欧美96在线|欧| 狼狼色丁香久久婷婷综合五月| 校园春色制服丝袜中文字亚洲| 久久久久久久9最新免费视频观看| 成人五月天丁香激情综合| 五月天激情影院| 欧美久久婷婷| 日韩人妻一区二区| 综合色图亚洲欧美| 日韩有码中文字幕女同性恋 | 久久人妇| 亚洲av综合色区无码一| 老熟女熟妇| 操一操摸一摸| 人妻精品综合中文字幕在线 | 夜色AV无码手机在线影院| 亚洲视频,小说| 日本黄大片在线观看视频| 色婷婷综合久久久久中文国产精品一区中文字幕,国产福利电影一区二区三区 | 亚洲成人性爱网站在线播放| 欧美人妻精品| 97爱爱| 混色激情av| 一区二区三| 91蜜臀熟女| 亚洲色狠| 丝袜综合| 俄罗斯一区二区视频在线观看| 大香蕉综合| 2025年A片视频精品| 夜夜夜久久| 99久久亚洲精品无码毛片潘甜甜| 欧美天天综| 色色毛片| 午夜精品久久999热蜜桃介男人用| 国产精品熟女九色九色蜜臀| 欧美大干日韩| 九九热精品| 综合久久97| 啊啊啊啊啊操我视频| 另类亚洲一区二区三区| 人妻在线大香蕉| 天堂无码精品国产久| 天天影视之亚洲综合网| 在线不卡视频| 精品无码秘 人妻一区二区| 日韩一级二级在线| 国产女人和拘做爰视频 | 色97国产69香蕉| 99热66| 亚洲日韩国产精品| 99只有精品| 超碰在线成人| 欧美片第一页| 午夜精品久久久久久久| 欧美熟女操屄| 天美传媒精品久久视频| 青青青国产| 九九热三级片| 久久综合日韩亚洲欧美| 国产三区免费在线观看| 色香天天| 日韩啪啪啪视频| 国内自拍 日韩激情 99| 天天上日日上日韩精品| 久久久性少妇| 伊人成人情色综合| 婷婷综合激情| 欧美黄片免费在线观看视频| 91 天天综合| 伊人久久大香线蕉亚洲五月天,青草青草欧美日本一区二区,欧美日产欧美日产国产 | 蜜臀无码一区二区| 天天日日舔舔| 超碰人人超在线观看| 丰满人妻aA一区二区三区| 欧美日韩人妻少妇 一区二区三区| 丁香六月啪| 一级做a爰片久久毛片图片| 9久久久久久| 日韩精品人妻中文字幕久久久| 久久98| 啪啪视频亚洲第一| 五月亭亭六月丁香| 男人天堂导航| 久久久九九| 秋霞男人网| 97超级久久强资源| 国产激情久久久| 欧美性爱www免费版| 国产无马在线| 久久春色| 诱惑网综合| 四虎精品亚洲| 2020中文字幕在线| 九九综合网| 磁力99AV| 神马久久久久久久久久| 精品久久久久黄少妇| 好吊妞转入那个网| 91校园春色长篇| 亚洲人妻av| 国产九九九九九九九九| 国产操偷| 性爱乱伦网址| 精品国产乱码久久久久久口爆网站| 日韩欧洲操屄视频| 操逼视频国产无套| 国产精品国产亚洲区艳妇糸列| 亚洲 欧美 色图| 欧美男人的天堂| 欧美色老汉| 欧洲自拍第一页| 精久久久| 日韩三级av片| 性色综合网| 欧美人妻少妇| 中文字幕丰满人妻日本| 思思久热在线精品66| 青娱乐国产剧情av一区| 国产美女口爆吞精视频| 欧美人人曰人人操人人射射| 欧美爆乳精品一区二区| 天天操人人操狠狠插| 天天狠操| 亚洲国产精品成人无码久久久| 欧美顶级黄色大片免费| 激情看片网站| 久久久一区二区三区四曲免费听 | 91老司机精品| 午夜性刺激视频免费观看| 97在线免费观看视频| 黄色AV免费| www亚洲免费| 国产美女mm131爽爽爽爽| 日本午夜久久电影| 91青视频| 久久成人午夜狠狠| 亚洲人妻精品一区二区| 人妻精品免费一二三区| 亚洲一卡2卡3卡4卡乱码网站| av天堂手机版追回| 91 在线亚洲| 91黑丝美女| 正宗无毛一线天嫩逼| 97爱爱爱| 日韩一区二区高清在线观看的| 亚洲蜜桃V妇女| 日韩一级二级| ai欧美亚洲小说| 亚洲激情在线| 国产女同视频在线播放| 丰满人妻大屁一区二区| 欧美色九九九| 深夜激情| 为用户提供免费看黄网址在线观看| 中国国国产一级特黄毛片| 天天影视综合网欧美精品| 中文幕97| 国产精品久久久啊| 亚洲aV性爱| 在线天堂999| 亚洲素人综合| 老司机天天操| 欧美日不卡| 中文一区二区| 2023天天操夜夜操| 99久久婷婷国产综合精品草原| 神马午夜久久久| 嗯嗯啊啊啊好爽| 亚洲熟女性高潮久久久| 99热这里只有精| 偷拍亚洲情色| 无码操逼网| 97内射偷拍| 久夜视频| 啊视频在线| 97爱碰| 国产精品免费1区2区视频| 久久xxxx| 中文在线视频| 丰满人妻一区二区三区四区| 中文字幕一区二区三区蜜臀| 美女黄页网站| 激情五月天丁香社区| 91丝袜熟女| A片大香蕉在线| 99999精品视频| 久久人妻熟女一区二区| 九九无码视频| 日日日日做夜夜夜夜做无码97| 日本成人A片网站| 麻豆区99999| 99热在线观看| 爆乳免费黄网站| 亚洲国产97| 91色综| 精品在线蜜臀| 97人妻色| 亚洲丝袜诱惑| 精品网站9999| 黄色成人网久久久久久| 夜夜操av亚洲一区二区| 成人性爱免费播放| 欧美超碰96| 午夜超爽| 91青青在线视频| 搡老熟女老女人老熟妇免费视频| 91热色| 久久久精品国产亚洲AV无码| 精品美女少妇一区二区| 激情五月婷婷综合| 亚洲国产精品无石码久久| 青青草九九九九九| 亚洲无码 国产无码| 欧美天天谢综合网| 国产亚洲女v在线观看| 国产情色第一第二页在线观看| 中国国产精品一区视频| q2午夜理论片夜色av| 午夜福利成人免费视频| 亚洲图片欧美偷拍| 夜夜操老骚逼视频网站| 欧美一区二区三区互相| 九九九精品一区二区无码| 女人喷水视频在线观看| 欧美高清16| 一个人在线看的黄色电影网站| 久久免费99精品久久久久久| 91无码人妻| 99自拍视频在线| 久久国产成人精品国产成人亚洲| 91网站18在线| 91精品丝袜久久久久久| 日韩欧美亚洲自拍偷拍| 蜜臀亚洲综合一二三四区| 亚洲日韩国产欧美综合v| 蜜臀久久99精品久久久久久-DVD| 国产日韩精品一区二区三区| 不卡一区二区日本视频| 风韵犹存大大大大香蕉 | 女性91网站| 久久妇| 综合网欧美在线| 无码操逼网| 99久草| 天天舔天天日天天射| 久久久婷| 国产AV毛片| 超碰97中文| 嫩草黄页| 欧美午夜色妇色鬼| 91丨九色丨东北熟女| 一二三四视频中文字幕在线看| 欧美亚洲清纯| 国产AV人人 夜夜人人澡| 日韩精品中文字幕二区| 日本操逼aaaaa| 久久精品操| 久久999久| 色av中文字| a级理论午夜日本| 精品国产无码中文| 天天澡天天爽日日AV| 91青青在线视频| 欧美性,亚州色| 极品五月天噜噜| 免費黃色視頻觀看一| 成人av福利在线观看| 2017天天拍大香蕉| 91欧美少妇| 久久高清无码夜夜操| 欧美亚洲国产自久久| 亚洲日韩一区电影| 噜噜吧,噜噜色,噜噜| 懂色av色欲av蜜臀av| 在线视频免费观看午夜| 啊啊啊啊啊好多水| 亚洲少妇视频| 激情婷婷丁香网| 日本三级韩国三级美三级91| 精品无码一二三四区| 久久久久国产亚洲一区欧美色图日韩| 久久伊人大香蕉| 亚洲AV永久无码一区仙野| 亚洲精品一二区| 五十路六十路素人熟女| 国产家庭乱伦表演| 亚洲熟妇一,二,三期| 97精品一区二区三区免费| 亚州欧美另类| 91性网| 精品人妻视频入口| 网站A V在线| 玖玖爱在线视频免费观看| 91社区伊人| 欧美成人性爱视频在线播放| 中文一区二区三区影院| 又大又大又大又粗爽高潮观看 | 夜夜影视四色| 国产精品爽爽va在线观看98| 国产亚洲色婷婷久久99精品91葵花宝典 | 日韩精品亚洲一二三| 综合97久久| 性色高清..……| 日韩91网| 精品黄色电影| 涩综合导航| 天天色天天干天天射| 思思热久久成人| 欧美强奸乱能| 人妻av在线| 欧美黑人性猛交91| 欧美精品91| 人妻激情在线视频| 安微少妇操BBB| 中文字幕三四五区| 91视频伊人| 久久直播国产| 激情五月激情综合网| 男人的天堂2010| 一区二区三区蜜桃成人撸久久东京热| 天堂精品小草| 加勒比久久av| 97色在线视频| 一级@啪啪视频| 色噜噜人妻丝袜a∨先锋影| 亚洲中文字幕精品久久久久久直播| 亚欧精品久久久久久久久久久| 亚洲欧洲美腿丝袜| 精品无码人妻一区二区免费蜜桃| 亚洲九九视频在线观看| 久久99九九九九6666免费观看软件| 亚洲一区二区在线观看91| 一区不卡在线观看av| 性爱av在线免费观看| 最新加勒比丝袜在线| 国产一区二区在线播放,久久亚洲精品中文字幕第一区,亚洲精品在线中文字幕视频 | 少妇xx精品| 日本网色| 欧美少妇性乱| 人妻天堂网| 免费的很黄很污的全部视频| 丁香五月婷婷五月| 欧美韩国你懂得在线 | 91日产欧美| 伊香蕉综合久久久久久久噜噜噜 | 91爱看| 日本天天干天天操一区| 亚洲一级性爱视频免费看| 蜜桃臀av在线观看| 在线观看 99热| 日韩性爱长视频免费| 夜夜影视四色| 四虎884a| 伊人热综合| 丁香五月成人| 欧洲站一级二级三级h| 影音先锋日本一区二区| 97超碰jingpin| 97伊人超碰| 少妇高潮对白在线观看| 超碰人妻中文在线| 人人搞人人插人人操| 丁香五月激情综合| 亚洲清纯唯美| 欧美1区二区三区公司| 黑操B| 国产9l 大屁股| 久久av成人无码免费| 艾草av| 天天综合网网欲色| 99热在线播放| 国产后入式在线观看| 久操网线| 嗯嗯啊好大| 中文字幕日韩电影人妻| 久久久久久久久久久久久9999| 校园激情狠狠四射| 色婷婷导航| 综合大香蕉美。| 国产www色在线观看| 99色婷婷中文字幕乱色| 欧美Aⅴ| 91日日| 日韩一级久久毛片| 日本丝袜美腿人妻九九| 97在线视频观看| 狠狠 91| 91性感在线| 999狠狠综合| 啊啊啊啊操死我| 午夜人妻精品综合在线| 九九九九九九九九九国产精品 | 久久精品亚洲婷婷| 大色综合| 91 国产丝袜在线放观看| 高清有码一区二区| 99国产在线绯色一区| 草草电影院| 久久中出在线| 国产高清MV操逼视频| julia ann久久| 亚洲最大无码中文字幕网站| 精品一区二区2| 色婷婷久久| 九九九九国产| 极品内射| 亚洲高清无码在线桃色| 青青草一本道福利视频| 天天干,天天日| 国产91影院| 日本999精品| 欧美日韩岛国大片在线观看| 这里只有97精品| 久久9 9 9精品| 免费超碰97在线观看| 久久久天美| 69超碰综合| 人人操人人摸人人看人人插| 视频二区熟女人妻| 日本三级韩国三级99| 精品无码秘 人妻一区二区| 久久蜜色情在线视频xxx免费观看| 亚洲成人无码影院| 人妻丝袜一区二区三区在线| 9超碰免费| 国产福利精品最新在线| 欧美97| 伊人久久亚洲色欲综合网站 | 91精品国产综合久久久蜜臀酒店| 91精品人妻一区二区-全集完整版免费正片国语-B02AV | 人人操超碰在线| 欧美熟爽综合| 日韩人妻 中文字幕| 日韩欧美传媒一区国产| 成人久久精品| 久久婷婷视频| 五月婷网站| 日韩亚洲欧美中文字幕| 青青草日韩免费观看高清在线| 人妻嗯啊啊在线播放| 亚洲h片在线免费观看| 国产区在线| 91欧美性| 日韩在线人妻网站| 五月丁香激情综合| 秋霞蝌科网日本一区| 欧美精品久久96人妻无码| 国产精品一区二区麻豆| 蜜臀人妻少妇久久在线观看| 色九九综合| 亚洲天堂人妻熟妇视频| 久久久久久久免费A片国产成a人亚洲精∨品无码| 亚州男人的天堂| 夜夜操av亚洲一区二区| 久久婷婷五月天| 国产第25页在线观看| 九九视频黄色片| 激情色图| 久久无码精品| 丝袜美腿91| 天天操女人| 亚洲国产精品成人综合| 精品国产乱码久久久久久久久久毛片| 97超碰69| 久久久99999久网站| 91在线欧色| 久久久久久人妻| 一区三区啪啪| 亚洲 日韩 丝袜 熟女 变态| 秋霞免费无码视频日韩A片| 久久9精品| 超碰97综合网| 亚洲丝袜制服国产91_国语字幕免费观看完整版下载第5集_ | 日韩一区二区熟女| 伊人激情| 成人片在线播放| 在线观看黄色电话| 精品国产丝袜一区二区三区乱码| 成人免费毛片| 丰满美女一级毛片在线播放| 丰满人妻一区二区三区色-百度| 清纯唯美第一页| 91欧美情色| 亚洲国产97在线精品一区| 性感美女啊啊啊在线| 美女让帅哥通她小鸡鸡| 操淫穴亚洲五月丁香| AV99热18这里只有精品| 韩日巨乳美女免费视频在线观看| 午夜福利在线视频1000| 97精品97| 91激情综合| 职场同事知名国产国产精品久久欧美日韩| 熟女网站最新| 东京热99999| 白嫩白嫩的午夜九久久久久久久久久久久成人剧场| 国产一区二区在线播放,久久亚洲精品中文字幕第一区,亚洲精品在线中文字幕视频 | 不卡二三区人妻少妇| 激情四射婷婷六月天| 日韩中文字幕精品一二三事国产精品| 99re这里| 久久久免费懂色| 东京热伊久| 91亚洲情色| 屁股久久久久久久久久| 日韩欧美性吧婷婷乱伦大香蕉| 国产亚洲色婷婷久久99精品91 - 百度| 欧洲综合色图| 日韩字幕一区| 亚洲天堂7777| 国产精品一区二区亚洲人成毛片 | 精品一二三区四视频| 一区二区三区四区在线不卡| 老熟女中文字幕高清| 97久久久久久久久久| 欧美日韩亚洲天堂| 97视频网站| 天堂俺去俺来也www久久婷婷| 国产男人又猛又粗又爽| 综合自拍| 人妻精品4K4K4K4K4| 欧美少妇性乱| 国产精品97超碰| 免费试看60秒| 岛国视频一二三区| 极品白嫩美女白浆成人福利在线看| 99久久综合| AV天堂男人的天堂| 91视频综合在线| 欧美日韩97| 欧美αv.com| 激情综合婷婷| 欧美操逼视频二区| 四虎影视国产精品| 91精品91久久久中77777| 日本欧美一区二区三区视频麻豆| 国产粉嫩出水在线播放| 日韩高潮一区| 日韩欧美天天爽爽爽天天爽爽| 97人肏| 中文字幕诱惑制服人妻丝袜美丝袜美 | 九九av| 九九九久久久W精品| 东京热毛片调教| 中文字幕高清精品一区| 亚洲av乱伦色图网站| 热久久91婷婷| 91热热色| 日本成人A片免费看| 色久桃花影院在线观看| 欧美日韩国产中文精品字幕自在自线,| 综合网97| 精品国产乱码久久久久久网站入口| 日韩欧美成人性爱在线| 久久综合18p| 综合97久久| 日韩欧美大力操| 久久熟女人| 人妻无码视频一区二区三区久久| 久久精品国产精品一区| 九九AV| 一区二区三区色综合| 日韩av无码网站| 国产女人高潮视频| 国产超碰在线一区| 天天综合97| 一起草AV| 91美女视频在线| 久久性爱视频免费看| 狠狠操狠狠| AV女资源| 日本免费专区| 久久久久ab| 欧美黄色手机在线观看| 丁香九月激情| 97在线播放 | 91精品丝袜久久久久久| 99蜜桃臀亚洲成人在线观看| 国产一区二区三区高清视频| 视频二区美腿丝袜制服人妻欧美 | 五月天婷婷久久| 久久熟女精品不卡一区| 一级毛片久久久久久久女人18| 96AV久久久| 免费观看日本操逼视频| 伊人激情| 人人妻人人爽一区二区三区| 日本一级一级一级一级| 久草久日| 偷看洗澡一二三区美女| chaopen97久久| 国产亲戚伦亲在线| 青青草中出视频| 亚洲精品日日夜夜52| 欧美视频第二页| 超碰色男人操熟女| 成人黄页| www成人啪啪18秘 免费| 嗯嗯啊啊好大好爽| 国产福利小视频高清在线观看| 97视频在线视频| 国模不卡| 天美av在线| 熟女人妻久久中文字幕一二区| 一本色道人妻久久| 盗摄 精品 另类 一区| 日本一级特级毛片视频| 国产999精品久久久久久| 熟女熟妇一区二区三四区| 亚洲一区深夜| 亚洲啪啪视频免费| 日逼五月天| 97欧美性爱| 成人三级片一区二区三区视频| 亚洲AV无码成人精品久久| 九t超碰| 91色爽欧美| 国产精品一级毛片不卡视| 先锋音影AV| 激情五月天色色网| 日日骚 av| 精品免费1| 十八禁黄色| 欧美激情亚洲色图| 日韩亚洲精品一区二区| 久久人妻一区二区三区高清 | 久久的网站啊啊啊啊啊| 国产 日韩 欧美一区| 亚洲精品国产av天美传媒| 免费综合亚洲中文| 欧美亚洲特P| 97se综合网| 亚洲欧美激情在线视频| 2024黄色视频| 91在线丝袜视频| 9久久精品| Av手机版天堂网| 97超色| 91丝袜在线观看视频在线观看| 日韩无码黄色片| 澳门色噜噜色噜噜色噜噜色噜噜色噜噜| 五月丁香色综合| 亚洲 自拍偷拍 欧美| 少妇激情一区二区三区视频| 九九久久久九九| 自慰白浆在线观看| 欧美人人操人人插| 九九九国产精品| 久久婷婷国产一区二区色| 国产 亚洲 丝袜 制服| 天美传媒精品一区二区| 性性久久| 亚洲情色第一页| 人成午夜免费大片| 日本性爱欧美性爱| 中文字幕免费在线观看| 天天干天天日天天射黄色片| www.狠狠| 亚洲熟女性高潮久久久| yiqicaoav| 97国产|免费| 91无码人妻| 蜜桃精品一区二区三区ww| 国产三级电影免费观看| 黄色激情电影在线观看| 蜜臀视频网站| 超碰碰小说97| 国产精品丝袜久久亚洲不卡| 97国产精品国| 国产福利精品最新在线 | 操操操日本的逼| 超碰97久久| 亚洲欧美校园| 啊啊啊不要好爽日韩无码一区| 99re6久热只有精品6在线直播 | 色香伊人| 神马久久网| 自拍欧美| 91蜜臀在线久久久久| 婷婷五月色| 激情五月天婷婷| 制服乱伦| 最新中文字幕在线亚洲| 亚欧视频在线| 日韩av不卡在线看| 国产中文字幕在线点播| 啊啊啊啊好爽好舒服一区二区易域| 久久夜精品一区二区三区| 偷拍亚洲高清图片| 欧美亚州手机在线| 精品久久99| 精品-91人妻子系列| 亚洲av影音先锋| 日本免费人成视频播放120秒| 亚洲精品成人动漫在线| 亚洲日韩在线a不卡99精品| 亚洲一级黄色毛片| 国产精品96久久久久久| 夜夜躁狠狠躁日日躁av| 亚洲熟女综合一区二区| 国产精品96久久久久久| 狠狠入| 亚洲天堂2020| 无码国产精品96久久久久孕妇| 热热色91| 78久久| 囯产精品久久久久久久久久梁医生 | a片久久久久久久久久久久 | 爱爱啊啊啊| 国产91影院| 蜜臀在线视频|