第 07 章表结构视图

表结构视图是只读的。要看看、要复制都行,但不能在这里改—— 改结构请用查询编辑器手写 DDL。

这一章没有「编辑」按钮

新增列、删列、加索引、改类型、加外键,这些操作在界面上完全不存在。 想改结构,开一个查询标签写 ALTER TABLE。 这个取舍的理由是:图形化的结构编辑器要处理的边界情况极多(数据迁移、默认值、字符集转换……), 而手写 DDL 对一个熟练用户来说又快又准确。

怎么打开

方式行为
对象树右键表 → 打开结构在新标签打开一个独立的结构标签
数据视图状态栏左边的 数据 / 结构 切换在同一个标签内切到结构视图

两种方式都可以,看你想同时对比几样东西。

结构视图:列 索引 外键 触发器 建表语句 users · 结构 表注释:用户账号表 序号 列名 类型 可空 默认值 主键 自增 字符集 / 排序规则 备注 1 id int unsigned 主键 2 name varchar(50)     utf8mb4 / utf8mb4_0900_ai_ci 显示名 3 email varchar(100) NULL     utf8mb4 / utf8mb4_0900_ai_ci 4 age smallint 18     5 status enum('draft','published','archived') 'draft'     utf8mb4 / utf8mb4_0900_ai_ci 状态 6 content longtext NULL     utf8mb4 / utf8mb4_0900_ai_ci 7 created_at datetime CURRENT_TIMESTAMP     主键列整行加粗并带淡蓝底。表的注释显示在这一页的顶部。 「—」表示没有默认值或没有备注;「NULL」表示默认值就是 NULL,两者不一样。 ● 本地开发 · app_dev 11 列 · 3 索引 · 1 外键 · 0 触发器 数据 / 结构 刷新 1 2 3 4 5 6 7
图 7-1 结构视图的「列」页。
#元素说明
1子页签 列 / 索引 / 外键 / 触发器 / 建表语句。当前页带下划线。表以外的对象只显示其中一两页。
2序号 列在表里的位置顺序。改列顺序要写 DDL。
3类型 完整类型,包括长度和精度:varchar(255)decimal(10,2)enum('a','b')
4可空与默认值 没有默认值时显示 ;默认值就是 NULL 时显示 NULL这两者含义不同,所以分开显示。
5主键 / 自增 / 字符集 属于主键和自增的打勾;字符集与排序规则只对文本类型显示,其它类型显示
6数据 / 结构 切换 在同一个标签内切换数据视图和结构视图。也可以让它俩各占一个标签。
7刷新 重新读取结构(⌘R)。在查询编辑器里执行过 DDL 之后,已经打开的结构视图会标上「可能过期」。

列页的字段

列名说明
序号列在表中的位置
列名
类型完整类型,含长度与精度
可空 /
默认值没有默认值 → ;默认值为 NULL → NULL
主键 表示属于主键
自增
字符集 / 排序规则仅文本类型显示
备注列的注释

索引与外键

结构视图:索引与外键 索引 索引名 类型 包含的列 基数 备注 PRIMARY PRIMARY `id` 12480 uniq_email UNIQUE `email` 11902 idx_status_created 普通 `status`, `created_at` desc 4 列表页查询用 ft_content 全文 `content` 「基数」是估算的唯一值数量,用来判断索引有没有被真正用上。`desc` 的列会明确标注。 外键 约束名 本表列 引用表 引用列 删除时 更新时 fk_orders_user `user_id` app_dev.users `id` CASCADE RESTRICT fk_articles_author `author_id` app_dev.users `id` SET NULL NO ACTION 引用表的表名可以点击,直接跳到那张表。删除时有 CASCADE / SET NULL / RESTRICT / NO ACTION 四种。
图 7-2 索引页与外键页。
索引页字段说明
索引名
类型PRIMARY / UNIQUE / 普通 / 全文 / 空间
包含的列按顺序列出,降序的列标注 desc
基数估算的唯一值数量
备注索引注释
外键页字段说明
约束名
本表列
引用表库.表,可点击跳转
引用列
删除时 / 更新时CASCADE / SET NULL / RESTRICT / NO ACTION

触发器与建表语句

结构视图:触发器与建表语句 触发器 名称 时机 事件 语句 trg_users_ai AFTER INSERT ▾ 展开 BEGIN  INSERT INTO audit_log … trg_users_bu BEFORE UPDATE ▸ 多行折叠显示 触发器体默认折叠,点一下展开。触发器不可编辑,要看内容就展开,要改就手写 DDL。 建表语句 复制 CREATE TABLE `users` (  `id` int unsigned NOT NULL AUTO_INCREMENT,  `name` varchar(50) NOT NULL COMMENT '显示名',  `email` varchar(100) DEFAULT NULL,  PRIMARY KEY (`id`), UNIQUE KEY `uniq_email` (`email`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; 对象是视图时,这个页签叫「定义」,显示的是创建视图的语句。
图 7-3 触发器页与建表语句页。建表语句用等宽字体 + 语法高亮。
触发器页字段说明
名称
时机BEFORE / AFTER
事件INSERT / UPDATE / DELETE
语句触发器体,多行折叠显示,点击展开

视图

不是所有对象都有五页。不同对象显示的内容不一样:

对象类型显示的子页签
列 / 索引 / 外键 / 触发器 / 建表语句(全部五页)
视图列 / 定义(两页),定义页就是创建该视图的完整语句
视图的定义页 app_dev.v_active_users 复制 在新查询标签中编辑 1 2 3 4 CREATE VIEW `v_active_users` AS SELECT `id`, `name`, `email` FROM `users` WHERE `status` = 'active' ORDER BY `id`; 只读文本视图,用和查询编辑器同一套高亮。「在新查询标签中编辑」把定义原文填进一个新查询标签,你改完自己执行。
图 7-4 视图的定义页。

结构可能过期时

你在查询编辑器里执行了 DDL(比如 ALTER TABLE ... ADD COLUMN)之后, 已经打开的结构视图内容就不再可靠了。这时视图顶部会出现一条提示:

过期提示条 这张表的结构可能已经改变(刚执行过 DDL),显示的内容可能不是最新的。 刷新 点「刷新」或者 ⌘R 重新读取。
图 7-5 过期提示条。不自动刷新,避免在你正在看的时候列表跳动。

明确不做

这一章的范围到此为止
  • 不在这里新增 / 修改 / 删除列、索引、外键、触发器
  • 没有图形化的建表向导
  • 没有表之间的 ER 关系图

这些都要手写 DDL,或者用专门的数据库设计工具。