服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|数据库技术|

服务器之家 - 数据库 - Mysql - MySQL 大战 PostgreSQL :呆瓜模式的分歧

MySQL 大战 PostgreSQL :呆瓜模式的分歧

2024-03-12 16:02Bytebase Mysql

MySQL 命令行工具提供了一个选项 --safe-updates 或者 --i-am-a-dummy,默认是 false。开启之后如果 UPDATE, DELETE 不带 WHERE 或者 LIMIT 就会报错。此外 SELECT 语句也可以指定返回超过一定行数后报错。

今天再聊一个 MySQL 和 Postgres 之间小小的不同,呆瓜模式的实现。

1.MySQL 的呆瓜模式

MySQL 大战 PostgreSQL :呆瓜模式的分歧图片

MySQL 命令行工具提供了一个选项 --safe-updates 或者 --i-am-a-dummy,默认是 false。开启之后如果 UPDATE, DELETE 不带 WHERE 或者 LIMIT 就会报错。此外 SELECT 语句也可以指定返回超过一定行数后报错。

2.PostgreSQL 的呆瓜模式

Postgres 命令行 psql 没有提供呆瓜模式。社区曾经有用户尝试直接在 Server 端加一个类似的限制,但是被驳回了 https://www.postgresql.org/message-id/flat/1580673.1675373572%40sss.pgh.pa.us#48697ecc933fe79695d7bc5db7badf9f

MySQL 大战 PostgreSQL :呆瓜模式的分歧图片

社区于是又想了个曲线救国的方法,实现了一个 safeupdate extension,来达到类似的效果。

MySQL 大战 PostgreSQL :呆瓜模式的分歧图片

3.Bytebase 的呆瓜模式

Bytebase 也有类似的呆瓜模式,能同时应用到 MySQL 和 PostgreSQL 及其他支持的数据库上。用户在 Bytebase SQL Editor 的普通模式进行非 SELECT 操作是被禁止的。

MySQL 大战 PostgreSQL :呆瓜模式的分歧图片

如果是普通开发者的话,就必须走工单审核流程。

MySQL 大战 PostgreSQL :呆瓜模式的分歧图片

如果是 DBA,则也可以选择进入管理员模式再执行。

MySQL 大战 PostgreSQL :呆瓜模式的分歧图片

同时也可以在 SQL 审核规则中配置必须要有 WHERE,否则就报错。

MySQL 大战 PostgreSQL :呆瓜模式的分歧图片

MySQL 大战 PostgreSQL :呆瓜模式的分歧图片

回到 MySQL 和 PostgreSQL 在呆瓜模式上的区别,我自己还是更喜欢 MySQL 的方案,也希望在 psql 中也提供类似的选项。不过笔者觉得 PG 社区拒掉 Server 端加呆瓜模式的补丁是合理的,只是原因和审核官 Tom Lane 给的不同。Tom 说

The cases that I actually see reported are not "I left off the WHERE" but more like "I fat-fingered a variable in a sub-select so that it's an outer reference, causing the test to degenerate to WHERE x = x"

Tom 应该还是开发活干的少,低估了日常中低级错误发生的频率。比如下面这样只选中了一部分语句执行,漏了后面的 WHERE。

MySQL 大战 PostgreSQL :呆瓜模式的分歧图片

而我会拒绝那个 PG 补丁的理由是因为在 Server 端加限制的话,打击面太广,还是由不同的客户端根据各自场景来决定比较好。

原文地址:https://mp.weixin.qq.com/s/UqdECpvmuUKEiDUkkVSX-g

延伸 · 阅读

精彩推荐
  • Mysql基于MySQL在磁盘上存储NULL值

    基于MySQL在磁盘上存储NULL值

    这篇文章主要介绍了基于MySQL在磁盘上存储NULL值,NULL值列表,一行数据里可能有的字段值是NULL,比如nickname字段,允许为NULL,存储时,如果没赋值,这字...

    公众号JavaEdge7282022-09-27
  • Mysql基于SQL中的数据查询语句汇总

    基于SQL中的数据查询语句汇总

    以下是对SQL中的数据查询语句进行了汇总介绍,需要的朋友可以过来参考下 ...

    MYSQL教程网3042020-01-07
  • Mysqlmysql 8.0.11压缩包版本安装教程

    mysql 8.0.11压缩包版本安装教程

    这篇文章主要为大家详细介绍了mysql 8.0.11压缩包版本安装教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    花落任风舞3032020-09-01
  • Mysqlmysql不同数据库不同数据表导入数据

    mysql不同数据库不同数据表导入数据

    这篇文章主要介绍了mysql不同数据库不同数据表导入数据的相关资料,需要的朋友可以参考下 ...

    MYSQL教程网5122020-05-15
  • MysqlMySQL 到 ClickHouse 实时数据同步实操

    MySQL 到 ClickHouse 实时数据同步实操

    这篇文章主要分享的是MySQL 到 ClickHouse 实时数据同步实操,小编测试了测了一种方式,可以非常方便地完成 MySQL 数据实时同步到ClickHouse,跟大家分享一下...

    海拥4542022-09-08
  • MysqlMySQL的数据类型和建库策略分析详解

    MySQL的数据类型和建库策略分析详解

    无论是在小得可怜的免费数据库空间或是大型电子商务网站,合理的设计表结构、充分利用空间是十分必要的。这就要求我们对数据库系统的常用数据类型...

    mysql教程网2482019-10-21
  • Mysqlmysql 找回误删表的数据方法(必看)

    mysql 找回误删表的数据方法(必看)

    下面小编就为大家带来一篇mysql 找回误删表的数据方法(必看)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    MYSQL教程网9342020-07-23
  • Mysql图文结合带你搞定MySQL日志之Undo log(回滚日志)

    图文结合带你搞定MySQL日志之Undo log(回滚日志)

    Undo Log:数据库事务开始之前,会将要修改的记录放到Undo日志里,当事务回滚时或者数据库崩溃时,可以利用UndoLog撤销未提交事务对数据库产生的影响。...

    GreatSQL社区5502022-10-12