Navicat 是图形客户端,不是数据库。 它把「连接、看表、改字段、跑 SQL」这些动作画成界面,
背后发给服务端的还是 SQL。
Demo 把左边那棵对象树的来源查出来了:
表的清单来自 sqlite_master(MySQL 是 SHOW TABLES),
字段清单来自 PRAGMA table_info(MySQL 是 DESC)——
图形工具没有魔法,就是把这两句查出来画成树。
上一章装的是服务端,这一章装的是「用的那一头」。 两者完全独立:服务端只有一个, 客户端可以装好几个。 本篇也不写查询,只讲工具在做什么、为什么还得会 SQL。
一、Navicat 是什么:一个收费的图形客户端
它的定位:连上 MySQL/MariaDB/PostgreSQL/SQLite 等一堆数据库, 用界面管理表、跑查询、导数据、看结构。 它不是免费的(有 14 天试用;后来出了免费的 Navicat Premium Lite)。 要免费的替代:DBeaver(社区版免费、跨库)、MySQL Workbench(Oracle 官方免费)、 DataGrip(JetBrains,收费)。 选哪个都行,因为它们干的事一样:管理连接、画对象树、编辑表结构、跑 SQL、导出结果。 学会一个,换另一个半小时就能上手。
二、左边那棵树,数据从哪来
第一层「连接」是你自己建的,名字随便起,不影响连到哪台机器。
第二层「数据库」来自 SHOW DATABASES。 第三层「表」来自 SHOW TABLES。
第四层「字段」来自 DESC 表名。
这四句在沙箱里都能找到对应:sqlite_master 给表与视图清单,PRAGMA table_info 给字段清单。
Demo 就是把这两句真跑了一遍。
知道这一点有个实际好处:树刷不出来的时候,
你能自己去敲那句 SQL 看看到底是「没权限」还是「真空库」,而不是干瞪着转圈。
三、为什么装了 Navicat 还得会 SQL
图形工具擅长「看得见的操作」:改个字段类型、看十行数据、导个 CSV,点两下就完。 它不擅长三件事:批量(给一百张表加同一个字段)、复现(同事问你「上次那个数怎么来的」, 截图说不清)、排查(查询慢、锁住了、权限不对)。这三件全靠 SQL。 更关键的是:界面上每个动作都会翻译成 SQL 发出去, 看不懂那句 SQL,就不知道它到底改了什么。 生产库上「点错一下」和「敲错一句」后果一样重。
四、小结
教材小结: Navicat 是图形化的 MySQL 客户端,装上、连上就能管理数据库;它适合看结构和做日常操作。 本课补三条:一是客户端与服务端是两回事,客户端可以随便换; 二是对象树背后就是几句查系统表的 SQL;三是批量、复现、排查这三件事,图形工具替不了 SQL。
五、动手 Demo:把对象树和字段清单查出来
Demo 四段:建一张小表,然后查「对象树」和「字段清单」——这正是 Navicat 左侧面板显示的两层内容。 每一段后面都标了 MySQL 里对应的那句。
import sqlite3
c = sqlite3.connect(":memory:")
# 建一张小表,才有东西可看
c.execute("CREATE TABLE goods (id INTEGER PRIMARY KEY, "
"name TEXT, price REAL)")
# 对象树:所有表与视图
c.execute("SELECT type, name FROM sqlite_master "
"WHERE type IN ('table','view') ORDER BY type, name")
# 展开一张表:字段名、类型、能不能空、默认值
c.execute("PRAGMA table_info(goods)")
实跑输出:
--------------------------------------------------------------------
第三课:Navicat 这类图形工具,替你做的是哪几句 SQL
--------------------------------------------------------------------
左边那棵对象树,数据来自一张系统表
SQL> SELECT type, name FROM sqlite_master WHERE type IN ('table','view') ORDER BY type, name
type name
-----------------------
table classes
table goods
table order_detail
table orders
table scores
table students
(6 行)
**MySQL 里对应的是** `SHOW TABLES;`**,它查的是**
`information_schema` **那套系统库。图形工具没有魔法,就是把这几句查出来画成树。**
展开一张表,看到的字段清单来自 PRAGMA
位置 字段名 类型 允许空 默认值
--------------------------------------------------
0 id INTEGER 是 NULL
1 name TEXT 否 NULL
2 cat TEXT 是 NULL
3 price REAL 否 NULL
4 stock INTEGER 否 0
5 on_sale INTEGER 否 1
(6 行)
**MySQL 里是** `DESC goods;`**(`DESCRIBE` 的缩写),输出几乎一模一样。**
图形界面上每个动作,背后都是一句 SQL
点「新建数据库」 → `CREATE DATABASE shop;`
点「新建表」 → `CREATE TABLE goods (...);`
点「设计表」改字段 → `ALTER TABLE goods MODIFY ...;`
点「运行」那个绿色三角 → 把编辑区里的 SQL 发给服务端
**会用 SQL 的人用图形工具是图快;只会图形工具的人,出了错就查不下去。**
所以本课的路线:图形工具当放大镜,SQL 当手
**每一节先给 SQL,再说图形工具里点哪里。** 沙箱里没有 Navicat,
**但每一句 SQL 都能真跑,跑出来的数就是图形工具里会看到的数。**
第一段建表。 三个字段,简单到能一眼看完。
第二段查对象树。 sqlite_master 里躺着六张样例表加这张 goods,
MySQL 里对应 SHOW TABLES;,查的是 information_schema 那套系统库。
第三段查字段。 位置、名字、类型、能不能空、默认值五列,这就是「设计表」界面里那个表格。
第四段讲每个点击背后的 SQL。 新建库、新建表、改字段、运行——四句话全在正文里列出来了。
30 秒实验
sqlite_master里type有哪几种值?index和table有什么不同?- (先想再跑)
PRAGMA table_info的第五列是默认值,那NOT NULL体现在哪一列? - MySQL 里
SHOW TABLES和DESC 表名分别对应这里的哪一句?
常见误区
- 以为 Navicat 是数据库。 它只是客户端,卸了它数据一行不少,卸了服务端才真没了。
- 只会在界面上点,不会看它发出的 SQL。 点错一下就是一条 DROP,界面不会问你第二次。
- 树刷不出来就重装客户端。 先敲一句
SHOW TABLES/PRAGMA table_info, 分清是权限问题还是空的。
自测三问(点开对答案)
1. Navicat 属于哪一头? —— 客户端。它连服务端、发 SQL、显示结果,自己不存数据。 2. Navicat 左边那棵树的数据从哪来? —— 来自查系统表的 SQL:库来自 SHOW DATABASES,表来自 SHOW TABLES,字段来自 DESC 表名。 3. 为什么装了图形工具还要会 SQL? —— 批量操作、复现别人的查询、排查慢与锁,这三件图形工具替不了; 而且界面上每个动作背后都是一句 SQL。工具装好了,下一章就按它那四个格子一步步来:连接、建库、建表、跑代码。
- ☐ (本篇完,下一篇 1.4 使用 Navicat for MySQL)