SQL 语法求解惑?

为什么兼容mysql的库 在where条件都没写全的情况下 可以执行SQL
TIDB:

mysql:

ali-drds:
c6ea586b36d52048403c7f1ec7b38bc
oracle:

ob-mysql
405a7073d859f8e0be2014002e9536c

ob-oracle
3e029aebed6e1dc0eabc1302226c201

mysql 里 where 后面的表达式没要求那么严格,where acct_id 就相当于 where 1

感觉这样容易出问题

字段存在语法上就没问题,相当于 where 后面接的表达式为 true。
是有隐患,所以靠 review 了,不然放到 delete 里就是全表删 :sweat:

是呢 万一条件和字段分成2行 ,条件被注释了就直接执行了

应该是按int来过滤的,我测试的是varchar(10)

不对,还要看acct_id的值,非0非空的时候 才相当于 where 1

mysql的语法是不怎么严谨,但是却有奇效,sql_mode全清空,验证全在开发和测试阶段。

1 个赞

可以设置sql_mode避免吧

where 1是整表数据,还需要看数据类型,字符类型是应该是转换成数字类型做判断,数字类型!=0 and is not null,时间类型 is not null

此话题已在最后回复的 60 天后被自动关闭。不再允许新回复。