DBeaver 不支持客户端实时校验,所有校验均由数据库约束(如 NOT NULL、UNIQUE、CHECK)在执行 INSERT/UPDATE 时由服务端触发并返回错误,DBeaver 仅展示原始报错信息。

不能直接给字段加“编辑校验提示”——DBeaver 本身不提供客户端表单级的实时输入校验(比如输入非数字时立刻红框警告),它依赖数据库约束和元数据反馈来实现校验行为。
为什么改数据时没看到校验提示?
DBeaver 的数据编辑器是直连数据库执行 UPDATE 或 INSERT 的,所有校验逻辑由数据库服务端控制。如果你双击单元格修改后点击保存却报错,那不是 DBeaver 在“提示”,而是数据库返回了约束违反错误,DBeaver 只是把错误信息原样展示出来。
- 常见错误如:
ERROR: duplicate key value violates unique constraint(唯一约束冲突) - 或
ERROR: new row for relation "xxx" violates check constraint "xxx_check"(CHECK 约束失败) - 这些都不是前端拦截,而是 SQL 执行失败后的服务端反馈
真正起作用的校验来源:数据库约束
你看到的“校验效果”,本质是 DBeaver 正确读取并应用了数据库已定义的约束。必须提前在库中建好,DBeaver 才会在保存时触发它们:
-
PRIMARY KEY和NOT NULL:修改为空值 → 报column "xxx" violates not-null constraint -
UNIQUE:填重复值 → 报duplicate key value violates unique constraint -
CHECK:比如age >= 0 AND age → 输入 -5 或 200 → 报具体 CHECK 名称错误 -
FOREIGN KEY:填不存在的外键 ID → 报insert or update on table "xxx" violates foreign key constraint
⚠️ 注意:MySQL 5.7 及更早版本对 CHECK 约束实际不生效(语法接受但忽略),必须用 8.0.16+ 才真正校验;PostgreSQL、SQL Server、Oracle 则默认支持。
怎么让 DBeaver 编辑时“提前知道”会出错?
没有实时提示,但可以靠两个动作降低试错成本:
- 右键表名 → 打开声明:查看
CREATE TABLE语句,确认哪些列有NOT NULL、UNIQUE、CHECK等定义 - 双击表 → 切到顶部【属性】标签页:在“约束”面板里逐条检查已启用的约束类型和表达式
- 如果发现某列该有约束但缺失,需手动在数据库中添加(例如:
ALTER TABLE user ADD CONSTRAINT chk_age CHECK (age BETWEEN 0 AND 150);),DBeaver 下次刷新元数据就会识别
别指望“自定义弹窗提示”,重点放在约束定义和驱动兼容性上
DBeaver 不支持 JavaScript 式的前端校验规则注入,也不允许你在 UI 里配置“输入格式提示”。所谓“校验”,就是数据库是否认这条 SQL。容易被忽略的关键点是:
- 某些数据库(如 GBase8s、达梦)的约束元数据可能未被 DBeaver 插件完整解析,导致【属性】页不显示 CHECK 规则,但执行时仍会报错
- JDBC 驱动版本太旧可能导致约束信息读取失败,建议在连接设置 → “编辑驱动”中升级到匹配数据库服务端大版本的驱动(如 MySQL 8.0 服务端配 mysql-connector-java 8.0.x)
- 如果用的是 MySQL 并启用了严格模式(
STRICT_TRANS_TABLES),约束校验才真正生效;否则部分违规会被静默转成默认值











