跳到內容

資料庫

在 Blyck 裡連線到 DB(資料庫),查看資料表清單,撰寫並執行 SQL(對資料庫下的命令語句),以表格查看結果、修改,並匯出成檔案。五種 DB 都用同一個畫面、同一種方法操作。

分類功能費用
基本連線、已儲存的連線、結構描述樹、SQL 編輯器、執行·停止、結果表格、儲存格編輯、新增行、匯出、交易、變更資料表結構、歷史、程式片段、切換連線免費
AISQL 編輯器 AI(Ctrl+I)、表格儲存格 AIPro

PostgreSQL 連線視窗 — 伺服器位址·帳號·SSL·儲存名稱

  1. Host · Port · Database · User — 要連線的伺服器和帳號(連接埠預設 5432,資料庫預設 postgres)
  2. 密碼 — 只有填寫 "另存為" 時才會加密儲存在這台電腦,之後不用輸入就能連線
  3. SSL — "停用(預設)" / "啟用 + 驗證憑證(正式環境建議)" / "啟用 + 允許自我簽署(僅開發/內部 — 有中間人攻擊風險)"
DB命令面板名稱快速鍵預設連接埠必填欄位
SQLite開啟 SQLite 資料庫…Ctrl+Alt+D無(檔案)檔案
OracleOracle 連線…Ctrl+Alt+O1521Host · Service · User
PostgreSQLPostgreSQL 連線…Ctrl+Alt+P5432Host · User
MSSQLMSSQL 連線…Ctrl+Alt+M1433Server · User
MySQLMySQL 連線…Ctrl+Alt+Y3306Host · User

開啟位置:新分頁選單的 DB 圖示格(SQLite · Oracle · PostgreSQL · MSSQL · MySQL)、上面的快速鍵(Mac 是 Cmd+Option+字母)、命令面板,或已儲存的連線清單。DB 一律在目前面板以新子分頁打開。

  • Enter = 連線,Esc = 取消。Port 留空就用預設連接埠。
  • 填入另存為(儲存名稱)後連線,就會加入已儲存的連線,密碼也會以 OS 加密一起儲存。之後點一下就能不跳視窗直接連線。
  • MariaDB 請用 MySQL 連線… 連線。
DB須知
SQLite只能打開已經存在的檔案(沒有建立新 DB 的功能)。打開過一次的檔案會自動加入已儲存的連線
Oracle先用不需安裝即可使用的 Thin 方式連線,不行的話會自動改用電腦上的 64 位元 Oracle Instant Client,以 Thick 方式重試。Service 欄填服務名稱或 SID(沒有 TNS 名稱欄)。樹狀圖只顯示連線帳號的物件
PostgreSQL樹狀圖只顯示 Schema 欄指定的一個結構描述(預設 public)。SSL 有三種可選
MySQL一定要填 Database,才會顯示結構描述樹
MSSQL只支援 SQL Server 驗證(帳號·密碼)(沒有 Windows 整合驗證)。單次查詢超過 60 秒就會失敗。具名執行個體寫成 host\SQLEXPRESS

Schema 樹與 SQL 編輯器·結果表

  1. Schema 樹 — 點擊上方的資料庫名稱(shop · PostgreSQL ▾)可切換到其他資料庫(之前的不會關閉,留在後面)。展開資料表後,裡面有「欄」·「索引」·「觸發器」群組,註解以淡色顯示。搜尋框旁可選搜尋範圍「名稱」|「欄」|「註解」
  2. SQL 編輯器 — 上方一列:「執行」·目前查詢 ▾(此窗格的查詢清單)·「自動提交」·AI,最右邊是執行用的資料庫(shop · PostgreSQL ▾)。從樹開啟的表會重複使用同一個查詢,不會越積越多
  3. 結果列「10 列 · 0.01 秒」和「在結果中尋找」— 下方是結果表格

連線後,會依種類分組顯示該 DB 的資料表·檢視·序列·套件·函式·預存程序·作業·排程器·資料庫連結。索引·觸發器在所屬的資料表裡,該 DB 沒有的種類不會顯示群組。

分組點一下連按兩下滑鼠右鍵
表展開資料表內(欄 · 索引 · 觸發器)在 SQL 編輯器直接執行前 200 列查詢(預覽查詢 — 開下一個表時重複使用它)變更資料表結構選單
檢視展開欄位前 200 列查詢—
資料表內的 索引 · 觸發器、套件(Oracle) · 函式 · 預存程序只有套件會展開裡面的函式·預存程序在 SQL 編輯器顯示定義(CREATE 語句)(不執行)索引為 DROP INDEX…
  • 點擊標題列左側的資料庫名稱 ▾(例如 shop · PostgreSQL),會列出已開啟的資料庫和儲存的資料庫連線。選了之後同一個面板會換成該資料庫的樹,之前的資料庫不會關閉,留在後面(在清單中再選一次就回來,用該列的 × 關閉)。
  • 標題列的新增查詢會開空白 SQL 編輯器,重新整理圖示會重新讀取清單,全部收合圖示會回到初始狀態(只展開表群組)。
  • 在搜尋框右側的 [名稱 | 欄 | 註解] 選擇搜尋範圍(可同時開啟多個)。只有資料表內(欄·索引·觸發器)符合時,該資料表會自動展開。
  • 把樹狀圖中的名稱拖到 SQL 編輯器放開,名稱就會插入那個位置。
  • 主鍵(PK)欄位會加上鑰匙圖示和 PK,資料表·欄的註解會以淡色顯示在名稱旁。Oracle 中失效(INVALID)的物件會顯示紅色 ⚠,點選標題列的 ⚠ 數字 就只看失效的。

資料表右鍵 — Excel · CSV 與修改資料表結構

Section titled “資料表右鍵 — Excel · CSV 與修改資料表結構”

在資料表上按右鍵(或按列尾的 ⋯),最上方有 Excel · CSV 一組。Excel(.xlsx)和 CSV 都可以。檢視只會出現 下載資料…。

選單作用
下載範本…符合該表的空白範本。第 1 列欄名 · 第 2 列說明(類型 · 必填 · 鍵)· 第 3 列範例(一列實際值或產生的範例)。從第 4 列開始填
下載資料…把整個表存成檔案。表頭選 與範本相同,修改後就能直接再上傳
上傳資料…選好填好的檔案後 寫入前先預覽 — 要略過的說明·範例列、出錯的列和原因(不是數字 · 必填空白 · 鍵已存在等)。寫入方式:新增為新的列 · 有相同鍵就更新(有主鍵的表)· 清空表後重新寫入。一次寫入,資料庫出錯就 全部還原
  • 上傳無法從變更紀錄(ChangeSet)還原。大幅修改前,請先用 下載資料… 備份。

在資料表上按滑鼠右鍵 → 新增欄… · 修改欄… · 重新命名表… · 新增索引… · DROP TABLE…。填好輸入視窗後會幫你產生 SQL。不會立刻執行,而是放進編輯器,確認後再自己執行。DROP 必須一字不差地輸入名稱,才會產生 SQL。SQLite 不支援修改列…。

位置按鈕功能
標題列▶ 執行 · ■執行(Ctrl+Enter) / 停止執行(■ 只在執行時顯示)
目前查詢名稱 ▾這個面板的查詢清單(依最近使用排序)· 最下方新增查詢。按兩下可重新命名
● 自動提交點選切換為 ● 手動提交(交易)
提交 · 復原只在手動提交時顯示
AI修改 · 解釋此 SQL(Ctrl+I)— 按一下直接開啟輸入框 (Pro)
歷史 · 程式碼片段圖示執行過的 SQL / 命名儲存的 SQL
格式化 · 匯出圖示整理 SQL(Ctrl+Shift+F) / CSV·Excel·剪貼簿。面板較窄時四個圖示收進 ⋯
最右邊的資料庫按鈕(名稱 · DB 種類 ▾)更換要執行的資料庫
  • 從樹開啟的表會以預覽查詢(名稱為斜體)開啟,開別的表時重複使用這個查詢,瀏覽再多表查詢也不會越積越多。修改 SQL 後會當作一般查詢保留。
  1. 撰寫 SQL。該 DB 的資料表·檢視名稱會以強調色顯示,FROM 後面會自動完成資料表,資料表名稱. 後面會自動完成欄位。
  2. Ctrl+Enter 或 ▶ 執行。
    • 有選取文字時只執行選取的部分,否則執行整個編輯區。
    • 預設一次執行一個語句。有多個語句時,請只選取要執行的語句再執行。
  3. 查詢會打開結果表,結果列顯示 N 列 · X 秒(例:5,000 列 · 0.44 秒),變更則顯示 完成 — 變更了 N 列。
  • 執行很久的查詢可以用 ■(停止)中止。畫面會立刻解除鎖定,也會向伺服器要求中止(SQLite 只解除畫面鎖定)。
  • 在 SQL 編輯器中直接執行時,不會跳確認視窗,直接執行。

結果表格 — 編輯儲存格·尋找·排序·匯出

  1. 雙擊儲存格修改後,編輯區最後會加上 UPDATE 陳述式。不會自動執行,確認後按 Ctrl+Enter
  2. 結果列中的 + 列·複製列(只查詢一個資料表時)和「在結果中尋找」— 在已取回的列中以文字篩選。「儲存」·「取消」只在有新列時顯示
  3. 點選欄標題即可排序 ▲/▼(只在已取回的列中)。只查詢一個資料表時,欄旁會以淡色顯示型別
  4. 匯出圖示 — CSV 檔案 (.csv)·Excel 檔案 (.xls)·剪貼簿 (TSV — 貼上)
想做的事方法
排序點標題欄(▲/▼)。只在已取得的列中排序
篩選結果列的 在結果中尋找 欄
取得更多一次最多 5,000 列。還有更多時,用結果列的 下 5,000 列 ▾
複製拖曳選取儲存格後按 Ctrl+C(可直接貼到 Excel)
直向查看一列點最左邊的 # 欄
查看完整的長值Shift+連按兩下
用選取的列產生 INSERT/UPDATE 語句Ctrl+G(DML 產生器)
  1. 連按兩下儲存格,修改值後按 Enter。
  2. 編輯區最後面會加上 UPDATE … WHERE 主鍵 = 值;,並呈選取狀態。
  3. 確認後按 Ctrl+Enter 執行。不會自動執行。

只有單一資料表,且結果中包含主鍵時才能修改(JOIN·GROUP BY·UNION·DISTINCT·檢視都不行)。

新增列 · 複製列 · 從 Excel 貼上 → INSERT

Section titled “新增列 · 複製列 · 從 Excel 貼上 → INSERT”

如果是只查詢單一資料表的結果,結果列會出現 + 列 · 複製列 圖示,有待儲存列時會出現 儲存 · 取消。

  1. 用 + 列 或 複製列 建立待處理的列並填入欄位(空白為 NULL)。
  2. 要從 Excel 貼上,先點待處理列的 # 欄設為基準,再按 Ctrl+V。列數不夠會自動增加。
  3. 儲存。會自動關閉自動提交,看過結果後再按提交或復原。失敗的列會留下來,修改後可以再儲存。

匯出圖示 → CSV 檔案(.csv) · Excel 檔案(.xls) · 剪貼簿(TSV — 貼上)。

  • 匯出檔案時不是存表格中的 5,000 列,而是重新執行原本的 SQL 並儲存全部結果。所以表格的篩選·排序不會反映到檔案中。
  • CSV 是 UTF-8(含 BOM)。Excel 會把所有欄位存成文字格式,最多 1,048,575 列。
  • 複製到剪貼簿會反映表格的篩選·排序。

決定修改資料後要立刻確定(自動提交,預設),還是確認後再確定(手動提交)。

  1. 點選標題列的 ● 自動提交,切換為 ● 手動提交。會出現 提交 · 復原 按鈕。
  2. 執行 UPDATE·INSERT·DELETE 後會出現 ● 未提交。
  3. 沒問題就提交,不對就復原。
  • **交易以連線為單位。**同一個連線的 SQL 分頁會共用尚未提交的變更,在其中一個分頁提交,全部都會確定。
  • CREATE·ALTER·DROP 這類結構變更,依 DB 不同可能會立刻確定而無法復原(Oracle DDL 無法復原)。

在 SQL 編輯器中由人直接執行時沒有確認視窗。由 AI 執行,或用程式碼編輯器的 ▶ 執行時,會像下面這樣詢問。

危險程度對應的 SQL
不確認SELECT 等只讀取的 SQL
確認有 WHERE 的 UPDATE·DELETE、INSERT、MERGE、CREATE 等
強烈確認DROP、TRUNCATE、ALTER、沒有 WHERE 的 UPDATE·DELETE

AI 的 UPDATE·DELETE 會先算出受影響的列數給你看。

改動 DB 的執行(人·AI 都算)會留在變更歷史中,單純的 UPDATE·DELETE 會在執行前建立還原用的備份。

DB備份方式
SQLite把要變更的列保存在 Blyck 歷史檔案中(最多 1,000 列,UPDATE 需要主鍵)
Oracle · PostgreSQL · MSSQL · MySQL在 DB 內建立 blyck_bak_… 備份資料表並複製(僅限自動提交時)
  • 還原方式:Ctrl+Shift+H → DB 紀錄那一列 → [還原資料庫變更]。必須已連線到那個 DB。
  • 伺服器 DB 中產生的 blyck_bak_… 資料表,用 ChangeSet 視窗的 [清理備份表] 刪除。
  • JOIN·子查詢等複雜語句、INSERT、DROP·TRUNCATE 無法還原。

資料庫還原確認視窗 — 先顯示要執行的 SQL 和連線

  1. "連線:" — 要還原的資料庫。必須目前已連線到該資料庫
  2. 要執行的還原 SQL — 伺服器資料庫會從修改前建立的 blyck_bak_… 備份表還原
  3. "⚠ 正式環境資料將被實際變更。" 確認後按 [執行還原]
  • 切換連線:SQL 保持不變,只把要執行的 DB 換成別的連線(標題列最右邊的資料庫按鈕 ▾)。要把同一個查詢依序在開發 → 驗證 → 正式 DB 上跑時使用。清單中會同時列出已開啟的資料庫和儲存的資料庫連線。選擇儲存的連線時,會連線並在樹面板後面開啟該資料庫的樹(目前看的樹保持不變)。
  • 歷史:執行成功的 SQL 最近 300 筆。所有連線共用一個清單。
  • 程式片段:把常用 SQL 取名儲存(最多 500 個)。
  • 重新開啟時:會重新打開原本開著的 DB 面板和 SQL 編輯器內容。沒有儲存密碼的連線會跳出密碼視窗。

SQL 編輯器 AI(Ctrl+I)— 上(資料表資訊和剛才的錯誤以標籤一起送出)· 下(變更行正下方的小卡片,只檢查語法、不執行)

  1. 「AI」按鈕或 Ctrl+I — 在游標處開啟輸入框。上面一列是 ✦ 輸入欄 · ↑ · ×。有選取內容時只處理選取部分,否則是整段 SQL(Pro)
  2. 下面一列的標籤 — SQL 中出現的資料表欄位(orders 6 = 6 個欄位,滑鼠停留看詳情)和剛才的錯誤(ORA-00904,用 × 移除)。點右端的模型名稱可以選模型
  3. 修改結果 — 變更行正下方的小卡片:一行修改原因 · +1 −1 ·「語法已檢查 — 未執行」·「在聊天中繼續」·「捨棄 Esc」·「套用 Tab」

讓 AI 修改編輯區裡的 SQL,或是解釋它。

  1. 按標題列的 AI 按鈕或 Ctrl+I,游標處會直接開啟一個框。有選取內容就只處理那部分,否則是整個 SQL。
  2. 輸入框上面一列是 ✦ 輸入欄 · ↑(送出)· ×,下面一列是一起送出的 標籤:SQL 中出現的資料表(例:orders 6 = 6 個欄位,滑鼠停留看詳情)和剛才的錯誤(例:ORA-00904)。這些資料表的欄位名稱 · 型別 · 鍵 · 說明會一起送出,AI 不會去猜欄位名稱。錯誤可以用 × 移除。點右端的模型名稱可以選模型。
  3. 寫下要求,按 Enter。例如:修正這個錯誤 · 改成按使用者合計 · 解釋一下
  4. 改好的 SQL 不執行,只檢查語法(資料庫出錯時 AI 會再改,最多 2 次)。變更的行在原處用紅·綠顯示,並附上一行修改理由和 語法已檢查 — 未執行。套用 Tab · 放棄 Esc · 在聊天中繼續
  • 送出時輸入框裡會顯示步驟(資料表資訊 → AI 正在修改 → 語法檢查)。按 ↑ 位置上的 ■ 停止 會中止,但輸入框會保留,可以修改後再送出。
  • 請它解釋時,SQL 保持不變,用同樣樣式的卡片回答。有 複製回答、下方的 繼續提問… 欄(把前面的問題和回答一起送出再問)以及 在聊天中繼續。在聊天中繼續 會把請求 · 原本的 SQL · 修改後的 SQL · 原因 · 語法檢查 · 一起送出的資料表資訊和錯誤全部放進聊天輸入欄(送出由你按)。
  • 新查詢 請直接用文字告訴 AI 聊天。聊天會查看表結構、試跑 SQL 後給出程式碼區塊;按程式碼區塊上的 ⤓ 插入編輯器,SQL 就會放到該資料庫 SQL 編輯器的游標下方。執行由你來。
  • 表格儲存格 AI:在結果表中選取儲存格後,在表格中按 Ctrl+I → 像「分析這些值的異常點」這樣提問。選取的列超過 200 列時,只送出前 200 列。

在 AI 聊天中也能查看開著的 DB、檢查結構或執行 SQL(寫入需經核准卡片)。請看 AI 聊天。

Q. Oracle 出現 NJS-116 錯誤。 這是 Thin 方式不支援的密碼方式。請勾選 強制 Thick,並在用戶端路徑指定 64 位元 Instant Client 資料夾。

Q. Oracle 出現 NJS-118 錯誤。 因為已經用 Thin 連線過,無法再切換成 Thick。請重新開啟應用程式後,用強制 Thick 連線。

Q. Oracle 出現 ORA-12514 / ORA-12505。 服務名稱或 SID 不正確。請確認 Service 欄的值。

Q. MySQL 樹狀圖顯示「請指定資料庫(Schema)」。 Database 欄沒有填。請用已儲存連線的 ✎ 或在連線視窗中填入 Database。

Q. 結果停在 5,000 列。 一次只取得 5,000 列。請用結果列的 下 5,000 列 ▾ 或匯出圖示。

Q. 修改了儲存格,DB 卻沒有反映。 只會產生 UPDATE 語句。請用 Ctrl+Enter 執行編輯區最後的 UPDATE(手動提交模式下還要按提交)。

Q. 匯出的檔案沒有套用篩選。 匯出檔案會重新執行整個原本的 SQL。請在 SQL 中加上 WHERE,或改用複製到剪貼簿。

Q. 用 Excel 打開 CSV,文字變成亂碼。 請在 Excel 的「取得資料」中指定 UTF-8,或用剪貼簿(TSV)貼上。

Q. DB 裡多了 blyck_bak_… 資料表。 那是還原用的備份。請用 ChangeSet 視窗的 [清理備份表] 刪除。

Q. AI 改好的 SQL 沒有執行。 改好的 SQL 刻意不執行,只檢查語法。請用 套用 Tab 放入後按 Ctrl+Enter 執行。

Q. 重新開啟後 DB 面板是空的。 這是沒有儲存密碼的連線。請在跳出的視窗輸入密碼,下次連線時記得填入另存為(儲存名稱)。