入到實戰(zhàn)全攻略)
簡介這份源代碼包與《MySQL數(shù)據(jù)庫基礎(chǔ)實例教程第3版微課版》教材配套針對希望系統(tǒng)掌握MySQL數(shù)據(jù)庫的初學(xué)者與需要課程項目參考的在校生。資源圍繞例題、案例、實訓(xùn)、實戰(zhàn)四個項目組織覆蓋建庫建表、增刪改查、查詢統(tǒng)計、事務(wù)等核心知識點并能通過商業(yè)實例、綜合實訓(xùn)和實戰(zhàn)演練學(xué)習(xí)真實業(yè)務(wù)場景的數(shù)據(jù)庫設(shè)計思路。壓縮包共5個文件大小約21KB核心為4個SQL腳本和1個說明文檔。SQL腳本按教材項目拆分為例題、案例、實訓(xùn)、實戰(zhàn)四類分別對應(yīng)書中例題、商業(yè)實例、綜合實訓(xùn)與實戰(zhàn)演練可直接導(dǎo)入MySQL運行說明文檔則對使用環(huán)境或步驟加以提示。該資源已有115人學(xué)習(xí)/下載體量雖小但代碼集中適合作為自學(xué)、教學(xué)或備賽的快速參考。通過閱讀與運行這些腳本讀者既能獲得標(biāo)準(zhǔn)SQL寫法范例也能借助實訓(xùn)與實戰(zhàn)項目模擬完整業(yè)務(wù)流程提升從需求分析到數(shù)據(jù)庫實現(xiàn)的實際動手能力為后續(xù)數(shù)據(jù)庫應(yīng)用開發(fā)打下基礎(chǔ)。1. 拿到這套MySQL教程源代碼后先別急著雙擊導(dǎo)入很多學(xué)MySQL的人卡住的點不是語法而是「書看完了但手邊沒有一個像樣的庫可以練手」。這份《MySQL數(shù)據(jù)庫基礎(chǔ)實例教程第3版微課版》的配套源代碼包恰好解決了這個問題——它把教程里分散的例題、綜合案例、實訓(xùn)任務(wù)和完整實戰(zhàn)項目拆成了四份SQL腳本覆蓋從建表、增刪改查到存儲過程、觸發(fā)器、視圖的完整練習(xí)路徑。適合正在跟教程學(xué)MySQL的初學(xué)者也適合帶實訓(xùn)課的老師和需要快速攢一個演示庫的從業(yè)者。它不是什么黑科技就是四份能直接導(dǎo)入的.sql文件但把它們的定位搞清楚、按正確順序用起來省下的時間足夠你多刷三輪練習(xí)題。2. 四份SQL腳本的分工例題、案例、實訓(xùn)、實戰(zhàn)到底差在哪拿到壓縮包解壓后你會看到四個核心文件和一個說明文檔。初次接觸容易犯的錯是把它們當(dāng)成同類型的東西隨便挑一份就開始導(dǎo)入。實際上這四份腳本對應(yīng)的學(xué)習(xí)階段完全不同混著用會打亂練習(xí)節(jié)奏。2.1 四份腳本的定位與內(nèi)容對比先看說明文件里面有使用方式和版權(quán)提示。剩下的四份腳本各有明確分工bookstore_書中例題源代碼.sql——對應(yīng)教材每一章后面的例題覆蓋建庫、建表、INSERT、SELECT、UPDATE、DELETE這些最基礎(chǔ)的操作。表結(jié)構(gòu)設(shè)計相對簡單字段少、關(guān)聯(lián)少適合作為入門第一份導(dǎo)入的腳本。數(shù)據(jù)量也比較小通常一張表只有幾行到幾十行方便你核對每條SQL的執(zhí)行結(jié)果。petstore_商業(yè)實例源代碼.sql——對應(yīng)真實商業(yè)場景的案例模擬的是一個寵物商店的在線銷售系統(tǒng)。這份腳本的表結(jié)構(gòu)明顯復(fù)雜商品表、訂單表、用戶表、庫存表之間有關(guān)聯(lián)還涉及訂單狀態(tài)流轉(zhuǎn)、庫存扣減這類業(yè)務(wù)邏輯。它比例題更接近真實項目適合學(xué)完基礎(chǔ)語法后用來練習(xí)多表聯(lián)查和子查詢。librarydb_綜合實訓(xùn)源代碼.sql——這是一份綜合實訓(xùn)項目模擬圖書館管理系統(tǒng)。它的特點在于覆蓋的知識點最全除了常規(guī)CRUD還包括視圖、存儲過程、函數(shù)、觸發(fā)器以及權(quán)限管理相關(guān)語句。如果你按順序?qū)肭叭菽_本到這一份時已經(jīng)能獨立完成一個小型項目的數(shù)據(jù)庫設(shè)計。SchoolDB_實戰(zhàn)演練源代碼.sql——這是最接近生產(chǎn)環(huán)境的實戰(zhàn)腳本。表結(jié)構(gòu)設(shè)計需要考慮更多約束、索引和關(guān)聯(lián)完整性數(shù)據(jù)量也比前幾份大一個量級。它模擬的是學(xué)校教務(wù)管理場景涉及學(xué)生、課程、選課、成績等多個業(yè)務(wù)模塊適合用來練習(xí)復(fù)雜查詢、性能優(yōu)化和事務(wù)處理。2.2 為什么要按例題→案例→實訓(xùn)→實戰(zhàn)的順序推進(jìn)我見過不少學(xué)習(xí)者直接跳過例題去跑實戰(zhàn)腳本結(jié)果被復(fù)雜的表關(guān)聯(lián)直接勸退。四份腳本的設(shè)計邏輯是遞進(jìn)的第一梯隊bookstore解決的是「會不會寫SQL」的問題——語法對不對、關(guān)鍵字記沒記住。這個階段不要追求快每一道例題都親手執(zhí)行一遍重點看執(zhí)行結(jié)果和預(yù)期是否一致。第二梯隊petstore解決的是「會不會用SQL」的問題——給你一個業(yè)務(wù)場景你能不能把需求翻譯成SQL語句。這里要特別注意多表關(guān)聯(lián)的方向、JOIN的條件寫沒寫對、聚合函數(shù)和GROUP BY的使用場景。第三梯隊librarydb解決的是「會不會設(shè)計數(shù)據(jù)庫」的問題——視圖怎么建、存儲過程怎么寫、觸發(fā)器什么時候觸發(fā)。到了這個階段你要開始關(guān)注SQL之外的數(shù)據(jù)庫對象理解它們各自解決什么痛點。第四梯隊SchoolDB解決的是「能不能hold住一個完整項目」的問題——面對十幾張關(guān)聯(lián)表、上千行數(shù)據(jù)怎么寫查詢才能高效執(zhí)行。到這個階段就可以開始琢磨索引、執(zhí)行計劃這些偏性能的東西了。2.3 從文件命名反推教程的章節(jié)結(jié)構(gòu)觀察文件名還有一個實際用處你可以通過文件大小和內(nèi)容長度反推教程的側(cè)重點。一般來說bookstore腳本里CREATE TABLE語句的數(shù)量對應(yīng)教程基礎(chǔ)章節(jié)的例題密度petstore腳本里的INSERT語句數(shù)量和表結(jié)構(gòu)能反映案例的完整度。如果你手頭正好有這本教材的目錄可以對照著看哪些章節(jié)配了例題代碼、哪些章節(jié)只有講解沒有代碼這樣缺哪補哪心里有數(shù)。3. 把SQL腳本導(dǎo)入MySQL環(huán)境準(zhǔn)備與三種導(dǎo)入方式實測腳本本身是好東西但導(dǎo)入這一步就能勸退不少人。我見過太多人卡在「明明按照教程操作了為什么一導(dǎo)入就報錯」。這一章把環(huán)境搭建和導(dǎo)入流程完整過一遍新手按步驟走熟手可以直接跳到3.3看參數(shù)差異。3.1 環(huán)境準(zhǔn)備MySQL版本和可視化工具的選擇這份教程配套的腳本基于MySQL編寫建議使用5.7或8.0版本。需要注意8.0和5.7在認(rèn)證插件、字符集默認(rèn)值上有差異如果你用的是8.0導(dǎo)入老版本導(dǎo)出的腳本時偶爾會遇到兼容性警告。# 檢查當(dāng)前MySQL版本 mysql --version # 登錄MySQLroot用戶示例 mysql -u root -p提示如果本地沒裝MySQL優(yōu)先考慮用集成環(huán)境如phpStudy或XAMPP一鍵部署省去單獨配置的麻煩。生產(chǎn)環(huán)境才需要手動編譯安裝練手階段不必折騰??梢暬ぞ叻矫鍺avicat、DBeaver、MySQL Workbench三選一即可。我的習(xí)慣是日常練習(xí)用DBeaver因為免費且跨平臺排查編碼問題時用命令行避免圖形界面掩蓋細(xì)節(jié)。3.2 命令行導(dǎo)入最穩(wěn)妥的導(dǎo)入方式無論你用什么可視化工具命令行導(dǎo)入都是兜底方案。它不依賴工具的導(dǎo)入功能出錯時錯誤信息也最直觀。# 第一步創(chuàng)建數(shù)據(jù)庫庫名自擬這里用 tutorial mysql -u root -p -e CREATE DATABASE IF NOT EXISTS tutorial DEFAULT CHARACTER SET utf8mb4; # 第二步導(dǎo)入SQL腳本注意路徑換成你的實際路徑 mysql -u root -p tutorial /path/to/bookstore_書中例題源代碼.sql執(zhí)行完第二步后終端會提示輸入密碼。密碼正確且無報錯時腳本就導(dǎo)進(jìn)去了。驗證是否成功# 查看該庫下所有表 mysql -u root -p -e USE tutorial; SHOW TABLES;這段操作的邏輯是先建一個空庫作為容器再用把SQL文件的內(nèi)容逐條喂給MySQL執(zhí)行。參數(shù)說明-u指定用戶名-p表示需要密碼-e后面跟要執(zhí)行的SQL語句DEFAULT CHARACTER SET utf8mb4是為了避免中文亂碼——這是最常見的一個坑后面避坑章節(jié)會展開說。3.3 可視化工具導(dǎo)入Navicat和DBeaver的操作差異用可視化工具導(dǎo)入時不同工具對SQL腳本的處理邏輯不同最容易踩的坑是「運行」和「導(dǎo)入」分不清。Navicat的推薦做法連接數(shù)據(jù)庫 → 右鍵目標(biāo)庫 → 運行SQL文件 → 選擇腳本文件 → 等待執(zhí)行完成DBeaver的推薦做法連接數(shù)據(jù)庫 → 選中目標(biāo)庫 → 打開SQL編輯器 → 拖拽SQL文件內(nèi)容到編輯器 → 執(zhí)行全部腳本CtrlShiftEnter兩者的核心區(qū)別在于Navicat的「運行SQL文件」會按文件直接灌入不會在編輯器里顯示每條語句DBeaver是把文件內(nèi)容讀入編輯器再逐條執(zhí)行你可以實時看到執(zhí)行到哪一條、哪一條報錯。論調(diào)試體驗DBeaver更友好論導(dǎo)入速度和穩(wěn)定性Navicat更省心。我個人的習(xí)慣是腳本不大不超過幾MB用DBeaver腳本很大幾十MB用Navicat。3.4 導(dǎo)入后必須做的三步驗證腳本導(dǎo)入成功不代表就完事了。很多人導(dǎo)入后直接開寫SQL結(jié)果表名寫錯、字段對不上還以為是自己的問題。導(dǎo)入后我一般強制走一遍驗證流程# 第一步確認(rèn)表數(shù)量是否和教程目錄一致 USE tutorial; SHOW TABLES; # 第二步確認(rèn)關(guān)鍵表的數(shù)據(jù)量是否正常以bookstore的books表為例 SELECT COUNT(*) FROM books; # 第三步抽查一條數(shù)據(jù)確認(rèn)沒有亂碼 SELECT * FROM books LIMIT 5;SHOW TABLES能讓你一眼看到所有導(dǎo)入的表COUNT(*)核對行數(shù)防止腳本執(zhí)行到中途失敗導(dǎo)致數(shù)據(jù)不全SELECT * ... LIMIT 5抽查中文內(nèi)容確認(rèn)字符集沒有出問題。這三步走完才算真正把這份資源用起來了。4. 從導(dǎo)入到上手用petstore腳本練透核心SQL操作腳本導(dǎo)入成功只是第一步。這一章以petstore_商業(yè)實例源代碼為例帶你跑一遍真正有練習(xí)價值的操作。選擇這份腳本的原因是它的表結(jié)構(gòu)足夠復(fù)雜又不至于超出初學(xué)者理解范圍——五到八張表、有外鍵關(guān)聯(lián)、有業(yè)務(wù)含義適合把增刪改查和多表查詢一次練透。4.1 先看懂petstore的數(shù)據(jù)模型再動手導(dǎo)入后第一件事不是寫SQL而是先看懂表結(jié)構(gòu)。磨刀不誤砍柴工。-- 查看所有表 SHOW TABLES; -- 查看petstore某張表的建表語句字段結(jié)構(gòu) DESC petstore_orders;DESC命令會列出表的字段名、類型、是否允許NULL、是否有默認(rèn)值。把每張表的字段過一遍梳理出它們之間的關(guān)聯(lián)關(guān)系。比如訂單表里通常有一個user_id字段關(guān)聯(lián)用戶表、一個product_id字段關(guān)聯(lián)商品表這就是外鍵關(guān)系的體現(xiàn)。我一般會畫一張簡單的表關(guān)系圖紙上畫就行把主鍵、外鍵、字段含義標(biāo)出來。別小看這個步驟后面寫多表查詢時你所有的JOIN條件都靠這張圖。4.2 從單表操作到多表聯(lián)查一組拿來即用的練習(xí)SQL下面是基于petstore場景的一組練習(xí)SQL覆蓋從簡單到復(fù)雜的典型操作。-- 單表查詢找出庫存小于10的商品商品表假設(shè)名為products SELECT product_name, stock FROM products WHERE stock 10 ORDER BY stock ASC; -- 聚合查詢統(tǒng)計每個分類下的商品數(shù)量分類字段假設(shè)為category_id SELECT category_id, COUNT(*) AS cnt FROM products GROUP BY category_id HAVING cnt 5; -- 多表聯(lián)查查詢訂單明細(xì)關(guān)聯(lián)用戶表和商品表 SELECT o.order_id, u.user_name, p.product_name, o.quantity FROM petstore_orders o JOIN users u ON o.user_id u.user_id JOIN products p ON o.product_id p.product_id WHERE o.order_status 已完成 ORDER BY o.order_id DESC;第一段SQL的邏輯是從商品表中篩選庫存低于10的商品按庫存升序排列方便你快速定位缺貨商品。WHERE先過濾ORDER BY后排序——這個順序不要搞反。第二段SQL演示了GROUP BY和HAVING的配合先按category_id分組統(tǒng)計每類商品數(shù)再用HAVING篩選出商品數(shù)大于5的分類。注意WHERE不能過濾聚合結(jié)果只能用HAVING。第三段是最典型的雙表JOIN訂單表通過user_id關(guān)聯(lián)用戶表取用戶名通過product_id關(guān)聯(lián)商品表取商品名。JOIN的順序不影響結(jié)果但ON條件的字段必須確保存在且類型一致——這是多表查詢最常見的報錯原因。4.3 練習(xí)事務(wù)和視圖把petstore當(dāng)成小型生產(chǎn)庫單表和多表查詢練熟后可以進(jìn)階到事務(wù)和視圖。這兩個知識點在實際項目中高頻使用但很多自學(xué)的人容易忽略。-- 事務(wù)示例模擬用戶下單扣庫存 START TRANSACTION; -- 扣減庫存假設(shè)商品ID為1001的商品扣2件 UPDATE products SET stock stock - 2 WHERE product_id 1001; -- 插入訂單記錄 INSERT INTO petstore_orders (user_id, product_id, quantity, order_status) VALUES (1, 1001, 2, 待付款); -- 提交或回滾檢查庫存是否變成負(fù)數(shù)若是則回滾 COMMIT; -- 出現(xiàn)異常時用 ROLLBACK;這段代碼體現(xiàn)的是事務(wù)的原子性扣庫存和生成訂單必須同時成功或同時失敗。實際練習(xí)時可以故意把stock改成stock - 2讓庫存變成負(fù)數(shù)然后執(zhí)行ROLLBACK觀察數(shù)據(jù)恢復(fù)。理解了事務(wù)你對生產(chǎn)環(huán)境里數(shù)據(jù)一致性問題的認(rèn)知會上一個臺階。視圖的練習(xí)則更直觀-- 創(chuàng)建視圖展示近一周的熱門商品 CREATE VIEW v_hot_products AS SELECT p.product_name, SUM(o.quantity) AS total_sold FROM petstore_orders o JOIN products p ON o.product_id p.product_id WHERE o.order_date DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY p.product_name ORDER BY total_sold DESC;視圖本質(zhì)上是一條保存下來的SQL語句每次查詢時動態(tài)執(zhí)行。它的價值在于把復(fù)雜的多表關(guān)聯(lián)查詢封裝成語義明確的「虛擬表」后續(xù)查詢直接SELECT * FROM v_hot_products即可不用重復(fù)寫長SQL。練到這個階段你對數(shù)據(jù)庫對象的感覺就不一樣了。5. SQL腳本實操避坑五條最常見的翻車記錄這一章聚焦真正能幫你省時間的排錯經(jīng)驗全部來自實際使用這類教程腳本時的踩坑總結(jié)。每一條都是「現(xiàn)象 → 原因 → 解決」直接對照你的情況排查。5.1 中文亂碼導(dǎo)入后SELECT出來全是問號現(xiàn)象腳本導(dǎo)入成功但查詢結(jié)果里所有中文字段顯示為???或者亂碼字符。原因字符集不匹配。SQL文件本身可能是utf8或gbk編碼而你的數(shù)據(jù)庫和表默認(rèn)字符集不是utf8mb4導(dǎo)致數(shù)據(jù)寫入時被轉(zhuǎn)成了錯誤的編碼格式。解決第一步確認(rèn)SQL文件的編碼格式用記事本或VS Code打開查看右下角編碼信息第二步建庫時顯式指定字符集mysql -u root -p -e CREATE DATABASE tutorial DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;第三步已導(dǎo)入的庫可以改庫和表的默認(rèn)字符集ALTER DATABASE tutorial CHARACTER SET utf8mb4; ALTER TABLE books CONVERT TO CHARACTER SET utf8mb4;改完字符集后重新導(dǎo)入數(shù)據(jù)。從那以后我每次建庫都強制指定utf8mb4再也沒為亂碼頭疼過。5.2 導(dǎo)入報錯ERROR 1064語法錯誤但腳本本身沒問題現(xiàn)象在可視化工具里導(dǎo)入某個SQL文件執(zhí)行到某一行時報ERROR 1064語法錯誤。原因多數(shù)情況下不是腳本寫錯了而是可視化工具把整個文件灌入時遇到某些特殊字符比如反引號、DELIMITER指令處理不當(dāng)。特別是包含存儲過程或觸發(fā)器的腳本DELIMITER $$這類語句不是所有工具都認(rèn)。解決改用命令行導(dǎo)入繞開工具的解析邏輯mysql -u root -p tutorial /path/to/librarydb_綜合實訓(xùn)源代碼.sql命令行導(dǎo)入遇到DELIMITER指令時按MySQL客戶端標(biāo)準(zhǔn)解析基本不會誤判。如果你的腳本是存儲過程相關(guān)的優(yōu)先用命令行。找不到問題方向時用--force參數(shù)繼續(xù)執(zhí)行MySQL會跳過報錯語句并給出后續(xù)錯誤匯總mysql -u root -p --force tutorial /path/to/SchoolDB_實戰(zhàn)演練源代碼.sql5.3 外鍵約束失敗刪除或更新時提示Cannot add or update a child row現(xiàn)象在執(zhí)行DELETE或UPDATE操作時報類似Cannot delete or update a parent row: a foreign key constraint fails的錯誤。原因petstore和SchoolDB這類包含業(yè)務(wù)關(guān)系的腳本設(shè)計了下游表外鍵引用。你想刪除主表的一條記錄但子表里還有關(guān)聯(lián)數(shù)據(jù)數(shù)據(jù)庫出于完整性保護(hù)拒絕執(zhí)行。解決要么先處理子表的關(guān)聯(lián)數(shù)據(jù)要么臨時關(guān)閉外鍵檢查-- 臨時關(guān)閉外鍵檢查執(zhí)行完后記得打開 SET FOREIGN_KEY_CHECKS 0; DELETE FROM products WHERE product_id 1001; SET FOREIGN_KEY_CHECKS 1;注意這只是練習(xí)場景下的偷懶做法生產(chǎn)環(huán)境絕對不要這樣操作。正確的思路是先刪除子表關(guān)聯(lián)記錄再刪除主表記錄。5.4 root用戶導(dǎo)入權(quán)限不足報錯Access denied現(xiàn)象導(dǎo)入腳本時提示Access denied for user rootlocalhost。原因雖然腳本是教程配套的但執(zhí)行語句里可能包含CREATE USER、GRANT這類需要高權(quán)限的操作。你當(dāng)前的root賬號本地登錄沒問題但可能受auth_socket插件限制或沒有遠(yuǎn)程權(quán)限。解決確認(rèn)你是本機登錄且使用正確的認(rèn)證插件。8.0版本默認(rèn)caching_sha2_password如果工具連接報錯可以改成mysql_native_passwordALTER USER rootlocalhost IDENTIFIED WITH mysql_native_password BY 你的密碼;這屬于環(huán)境層面的問題和腳本本身無關(guān)。排查順序先看認(rèn)證插件再看賬號授權(quán)。5.5 導(dǎo)入腳本不完整表數(shù)量少了一半現(xiàn)象導(dǎo)入過程無報錯但SHOW TABLES出來的表數(shù)量明顯少于教程里提到的數(shù)量。原因腳本是用圖形工具導(dǎo)出的里面可能存在DROP TABLE IF EXISTS語句導(dǎo)入時先把舊表刪除再重建——如果你的庫名和腳本里使用的庫名不一致或者腳本里有條件判斷分支可能導(dǎo)致部分表的建表語句沒被正確執(zhí)行。解決查MySQL的錯誤日志或者重新導(dǎo)入時逐段執(zhí)行。我一般會把SQL文件按CREATE TABLE語句切分成多段一段一段導(dǎo)入哪段失敗就看哪段的報錯# 用grep查看腳本里所有的建表語句位置 grep -n CREATE TABLE SchoolDB_實戰(zhàn)演練源代碼.sql找到每張表對應(yīng)的行號后用sed提取指定范圍的SQL單獨執(zhí)行定位問題表后單獨處理。6. 把這四份腳本變成你自己的項目一份改造練習(xí)的進(jìn)階建議到這里你已經(jīng)能熟練導(dǎo)入并操作這幾份腳本了。最后一章聊一個更實際的技巧怎么把現(xiàn)成的腳本變成真正屬于你自己的東西而不是永遠(yuǎn)停留在「照著教程跑一遍」。我的做法是「逆向改造」——把教程給的完整庫拆掉只保留表結(jié)構(gòu)然后自己重新填充數(shù)據(jù)。以SchoolDB為例用命令行只導(dǎo)入結(jié)構(gòu)部分# 用sed提取到INSERT語句之前的內(nèi)容假設(shè)INSERT從第500行開始 sed -n 1,499p SchoolDB_實戰(zhàn)演練源代碼.sql school_schema.sql # 導(dǎo)入純結(jié)構(gòu) mysql -u root -p tutorial school_schema.sql接下來手動插入自定義數(shù)據(jù)。這一步能逼你理解每一張表的字段約束哪些字段允許NULL、哪些有默認(rèn)值、哪些是外鍵必須存在父表記錄。自己填數(shù)據(jù)的過程就是把CREATE TABLE語句里每個字段定義重新驗證一遍的過程。改造完數(shù)據(jù)后給自己提需求。比如「查詢每個班級的平均成績并按降序排列」「找出所有選了超過5門課的學(xué)生」「統(tǒng)計每門課的選課人數(shù)和通過率」。這些需求需要你自己設(shè)計JOIN條件、決定聚合層級、處理邊界情況。遇到查不到結(jié)果或者結(jié)果不符合預(yù)期時用EXPLAIN看執(zhí)行計劃逐行檢查邏輯。EXPLAIN是排查性能問題最直接的工具它會告訴你MySQL實際走了哪些索引、掃描了多少行EXPLAIN SELECT c.class_name, AVG(sc.score) FROM classes c JOIN students s ON c.class_id s.class_id JOIN student_courses sc ON s.student_id sc.student_id GROUP BY c.class_id;看到type列是ALL說明全表掃描看看能不能通過加索引優(yōu)化到ref級別。這個過程就是把「會寫SQL」升級成「會寫高效SQL」的關(guān)鍵一步。還有一個小技巧給四份腳本按難度做標(biāo)記。我會在每份腳本的頭部加注釋標(biāo)注這份腳本適合什么階段練、涉及哪些高頻考點、建議練習(xí)幾輪。下次復(fù)習(xí)時直接按注釋定位不用每份都從頭開始。這也是文本類資源的最大優(yōu)勢——你可以隨意添加自己的理解而不影響原始內(nèi)容。說到底這套資源的價值天花板取決于你怎么用它。跟著教程跑一遍是60分水平能導(dǎo)入、能查詢、能把報錯解決掉把它拆開重建、自己設(shè)計業(yè)務(wù)需求、用EXPLAIN優(yōu)化查詢才勉強算得上及格以上。從那以后我每次拿到新的SQL腳本資源都會強制走一遍「先看結(jié)構(gòu)→拆出純結(jié)構(gòu)→自己造數(shù)據(jù)→設(shè)計練習(xí)需求」的流程對腳本的理解深度完全不一樣。希望這套方法對你也有用。最后提一句資源來源于網(wǎng)絡(luò)分享版權(quán)歸教程作者和出版社所有。自己學(xué)習(xí)使用就好不要拿去商用或二次分發(fā)。遇到腳本里的任何報錯先檢查環(huán)境再懷疑腳本——大部分問題出在環(huán)境而非代碼本身這是最值得記住的一條經(jīng)驗。本文還有配套的精品資源點擊獲取