全到事務(wù)的實戰(zhàn)筆記)
前言寫 SQL 這活兒誰寫誰知道。列名記不住INSERT 敲到一半停下來翻表結(jié)構(gòu)上周寫的腳本這周就忘了存在哪最刺激的還是在生產(chǎn)庫上跑 UPDATE——光標(biāo)懸在回車鍵上那兩秒心跳是真的會變快。這些坑怪不了別人一半是手生一半是工具不順手。KSQL Developer 是電科金倉做的數(shù)據(jù)庫開發(fā)管理工具主要連金倉數(shù)據(jù)庫V8R3、V8R6、V9 都行順帶也能管 Oracle、MySQL、SQL Server 的連接。我用得最多的是它那個 SQL 編輯器補(bǔ)全、模板、事務(wù)、腳本管理全塞在一塊兒了。下面把編輯器挨個過一遍中間夾點我自己的用法。搞開發(fā)的、做運(yùn)維的都可以看看。先說說怎么打開、長什么樣打開編輯器的路子有三條。最順手的數(shù)據(jù)庫導(dǎo)航器里找到連接右鍵點「SQL 編輯器」新選項卡就出來了。想接著寫以前的腳本右鍵連接 → SQL 編輯器 → 近期 SQL 編輯器主菜單「SQL 編輯器」下面也有個一樣的入口。第三條從零開始主菜單「SQL 編輯器」→「新建 SQL 編輯器」。這里有個坑我第一次就踩了連接下的 SQL 編輯器跟右鍵表或視圖彈出來的「SQL 控制臺」不是一個東西。編輯器背后掛著 .sql 文件關(guān)了再開還在控制臺是即用即拋的關(guān)的時候手滑選了不保存東西就沒了。正經(jīng)腳本別往控制臺里寫。界面拆開看有六塊——頂部的標(biāo)簽頁、工具欄、左側(cè)行號、編輯區(qū)、滾動條還有底部的連接控制欄。前面幾塊各家工具都長得差不多不多說。真正值得盯的是連接控制欄當(dāng)前語句跑在哪個連接上、事務(wù)什么狀態(tài)都在那行顯示。測試庫和生產(chǎn)庫同時開著的時候執(zhí)行前看一眼。能救命真事兒。Alt/ 補(bǔ)全用一次就回不去寫 SQL 累在哪我自己的感受是不在想邏輯在記名字。表名、列名、函數(shù)名全靠腦子存存不下的就得翻。KSQL Developer 的補(bǔ)全叫內(nèi)容助理Alt/ 喚出右鍵菜單里那個「SQL 內(nèi)容助理」也是它。你按名稱或者描述搜對象它去庫里找平時敲關(guān)鍵字候選列表也會自己冒出來。再講個小技巧星號展開。往一張幾十列的表里插數(shù)據(jù)先寫個骨架INSERTINTOemployee(*)括號必須有——圓的方的花的都認(rèn)。光標(biāo)放到(*后面Alt/INSERTINTOemployee(id,emp_name,dept_id,salary,hire_date,status)星號沒了整表的列名全出來了不要的刪掉就行。幾十列的表這么搞比翻結(jié)構(gòu)手敲穩(wěn)得多至少不會漏字段。模板老句子就別重寫了每個團(tuán)隊都有幾句寫到吐的 SQL分頁查詢的固定開頭、帶審計字段的 UPDATE、建表骨架。回回手敲費時間還容易敲出個走樣的版本。模板功能就是給這個準(zhǔn)備的。編輯器里右鍵 → 「SQL 模板」列表里是現(xiàn)成的也可以在腳本里直接敲模板名按 Tab 插入或者進(jìn)列表雙擊。模板本身能增刪改位置在「窗口 → 首選項 → KSQL Developer → 編輯器 → SQL 編輯器 → 模板」。我們組的做法是把最常用的幾個句子登記進(jìn)去新人來了一份模板列表甩過去寫出來的東西至少格式上長得一樣。比口頭說你照著某某的寫管用多了。格式化和注釋純快捷鍵的事選中一段 SQL右鍵 → 「格式」整段轉(zhuǎn)大寫或轉(zhuǎn)小寫。關(guān)鍵字大小寫統(tǒng)一了別人 review 的時候眼睛能舒服點。注釋兩組鍵天天用Ctrl/當(dāng)前行注釋加上再按一下去掉CtrlShift/ 管塊注釋選中一段按下加、再按去。調(diào)腳本的時候來回開關(guān)某段邏輯比手敲--利索太多了。哦對還有個冷門但好用的「變換為帶分隔符的列表」。選中文本右鍵「格式」進(jìn)去彈個框讓你設(shè)列分隔、結(jié)果分隔。我常拿它把一摞值拼成逗號分隔的串填進(jìn) IN 條件里——手動加逗號這活兒干過的人都懂。常用的鍵湊了一張表懶得背的存著備查想干什么按什么說明跑當(dāng)前這條CtrlEnter光標(biāo)所在語句或選中的那段跑當(dāng)前這條結(jié)果單開一頁Ctrl\新結(jié)果放新選項卡整個腳本一起跑AltX按分號切開一條條連著執(zhí)行喚出補(bǔ)全Alt/內(nèi)容助理行注釋Ctrl/按一下加再按一下去塊注釋CtrlShift/選中的一段整體加/去存腳本CtrlS進(jìn)當(dāng)前項目的 Scripts 文件夾導(dǎo)腳本進(jìn)來CtrlAltShiftO從文件系統(tǒng)加載 .sql 文件腳本改名CtrlF2改當(dāng)前腳本名關(guān)結(jié)果頁CtrlShift\關(guān)當(dāng)前這個結(jié)果選項卡執(zhí)行 SQL 的三種跑法執(zhí)行這個動作其實分三檔。改完一條語句想驗證下CtrlEnter只跑光標(biāo)所在的語句或者你選中的那段整個腳本不用陪著跑。Ctrl\ 也是執(zhí)行當(dāng)前語句區(qū)別是結(jié)果會新開一個選項卡。前一次的結(jié)果留著新的放旁邊對比著看。調(diào) SQL 的時候特別香。第三檔是 AltX整個腳本一起跑。工具按語句分隔符默認(rèn)分號把腳本切開一條條解析、連著執(zhí)行。像這種初始化腳本一鍵完事-- init_orders.sqlCREATETABLEorders(idbigintPRIMARYKEY,cust_namevarchar(100)NOTNULL,amountnumeric(12,2),statusvarchar(20)DEFAULTOPEN,created_attimestampDEFAULTnow());INSERTINTOorders(id,cust_name,amount)VALUES(1001,張三,3800.00),(1002,李四,1250.50);UPDATEordersSETstatusPAIDWHEREid1001;分隔符這些執(zhí)行行為在「窗口 → 首選項 → KSQL Developer → SQL 編輯器 → SQL 處理」里能改。事務(wù)生產(chǎn)庫上別用自動提交這節(jié)多說兩句。KSQL Developer 有兩種提交模式。自動提交語句一跑完立刻寫庫潑出去的水手動提交改動先攢著點工具欄「提交」才落地點「回滾」就當(dāng)無事發(fā)生。兩個模式在工具欄上切。切到自動「提交」「回滾」倆按鈕就灰了切回手動它們才活過來。本地開發(fā)庫自動提交挺好省心。生產(chǎn)環(huán)境呢用手動。工具自己也是這么想的——生產(chǎn)類型的連接默認(rèn)就是手動提交。拿一條 UPDATE 舉例UPDATEemployeeSETsalarysalary*1.1WHEREdept_id3;自動提交下回車即生效。等你發(fā)現(xiàn) WHERE 少寫了個條件就只能翻備份了。手動提交留了扇后悔門先看影響行數(shù)對不對不對回滾就當(dāng)沒來過。兩種模式的差別列個表自動提交手動提交啥時候生效語句一跑完就寫庫點了「提交」才寫手滑了咋辦基本沒救點「回滾」一筆勾銷提交/回滾按鈕灰的按不了能用適合哪本地開發(fā)、測試庫生產(chǎn)連接默認(rèn)就它順帶講兩個配套的窗口都在工具欄「事務(wù)日志」按鈕那一帶。事務(wù)日志記的是這個會話里所有事務(wù)性操作INSERT、DELETE、UPDATE 之類。看顏色就行綠的提交成功橙的回滾了紅的出錯沒色的是還在跑或者待定。勾上「顯示之前的事務(wù)記錄」能往前翻勾上「顯示所有查詢」連查詢類的語句也一起顯示。另一個叫待處理事務(wù)入口在「事務(wù)日志」按鈕旁邊的小箭頭。沒提交的事務(wù)是占鎖的堆多了庫就堵這窗口就是盯著它們用的。上面那張表列誰家有未提交事務(wù)下面的表顯示選中連接的明細(xì)而且能直接在這兒點「提交」或「回滾」。操作成功按鈕會變灰失敗給報錯。結(jié)果面板和動態(tài)參數(shù)一條查詢可能吐出多個結(jié)果集編輯器拿選項卡分開裝名字叫 Results A (B)A 是第幾條查詢B 是這條查詢的第幾個結(jié)果集。選項卡能拖著排順序右鍵「綁定標(biāo)簽頁」可以釘住。釘住的頁堆在左邊后面再執(zhí)行也不會蓋掉它想關(guān)得先解綁。調(diào)數(shù)據(jù)的時候把基準(zhǔn)結(jié)果釘一個新結(jié)果隨便跑兩邊不打架。關(guān)選項卡CtrlShift\ 關(guān)當(dāng)前的右鍵菜單里還有「關(guān)閉除此之外的所有結(jié)果選項卡」「關(guān)閉所有結(jié)果選項卡」攢了一堆的時候批量清。有時候只是想知道一條查詢會出多少行——比如跑大查詢前心里沒底——不用真執(zhí)行。選中語句菜單欄「SQL 編輯器」→「選擇行計數(shù)」只數(shù)行數(shù)不拉數(shù)據(jù)。動態(tài)參數(shù)也好用。SQL 里寫:參數(shù)名執(zhí)行時彈框讓你填值SELECTe.emp_name,d.dept_name,e.salaryFROMemployee eJOINdepartment dONd.ide.dept_idWHEREe.dept_id:dept_idANDe.hire_date:start_date;一段 SQL 換幾個參數(shù)反復(fù)跑不用來回改字面量了。匿名參數(shù)?也行得先去「首選項 → 編輯器 → SQL 編輯器 → SQL 處理」里把它啟用。腳本管理順便聊聊查詢管理器先說存。CtrlS存進(jìn)當(dāng)前項目的 Scripts 文件夾項目視圖里能看到。想存到文件系統(tǒng)隨便哪個位置走主菜單「SQL 編輯器 → 保存 SQL 腳本」。沒保存的修改標(biāo)題上會掛個星號編輯區(qū)左邊還有彩色高亮——哪幾行沒落盤掃一眼就知道。往回導(dǎo)按 CtrlAltShiftO或者「SQL 編輯器 → 導(dǎo)入 SQL 腳本」。改名 CtrlF2。要是把腳本改得一團(tuán)糟想從頭來右鍵 → 「文件 → 還原」直接回到磁盤上那份。默認(rèn)目錄是工作區(qū)里項目的 Scripts 文件夾項目視圖點「配置」能換。前面提過的 SQL 控制臺再啰嗦一句看表數(shù)據(jù)時在 SQL 控制臺中讀取數(shù)據(jù)、從 DDL 編輯器開過程或函數(shù)的源碼走的就是它。它不掛文件適合看過就扔的臨時查詢。你懂我的意思正經(jīng)東西別寫那兒。查詢管理器在「事務(wù)日志」按鈕旁的下拉里本會話跑過的查詢?nèi)趲c執(zhí)行的、耗時多少、影響幾行、結(jié)果如何。吵著我這條到底跑沒跑的時候翻它別翻記憶。工具欄「過濾」能按對象類型、查詢類型篩每頁條數(shù)能調(diào)日志還能落到文件里存著。最后聊兩句要我只挑一條說那就是生產(chǎn)連接手動提交事務(wù)日志常開?;貪L按鈕就是給手滑的人留的包括我。模板這東西攢起來是團(tuán)隊的。規(guī)范寫在文檔里沒人看長在使用習(xí)慣里才真的管用??旖萱I不用全背CtrlEnter 執(zhí)行、Alt/ 補(bǔ)全、Ctrl/ 注釋這三個用熟了剩下的用到再查上面的表。編輯器說到底就是個寫語句的地方。可補(bǔ)全省下的全是記性事務(wù)那一下回滾兜住的說不定就是你的年終獎——夸張嗎不夸張。用順了每天少生點閑氣這總不假。