如何确认SQL查询语句合法?下述CREATE TABLE建表语句为什么无效?
SQL语句无效的原因
你给出的建表语句无效的核心问题是列定义列表的最后一项存在多余的尾随逗号,标准SQL规范不允许在字段定义列表的最后一个字段后加逗号。
你提供的问题代码片段:
CREATE TABLE table_name ( user_id UUID PRIMARY KEY NOT NULL, additional_info JSONB, -- 此处的逗号为多余语法 );
修正后的合法语句
仅需要删除additional_info JSONB后面的逗号即可正常执行:
CREATE TABLE table_name ( user_id UUID PRIMARY KEY NOT NULL, additional_info JSONB );
补充说明
- 极少数数据库(如高版本MySQL、PostgreSQL)对这类尾随逗号做了非标准的语法兼容,但该写法不符合通用SQL规范,跨库执行必然报错,不建议使用
- 语句中用到的
UUID、JSONB属于PostgreSQL支持的合法数据类型,如果你使用的是其他不支持这两类类型的数据库,还需要对应调整字段类型,比如MySQL可以用CHAR(36)存储UUID、用JSON存储JSON类数据 - 补充提示:
PRIMARY KEY约束默认自带非空属性,后面加的NOT NULL属于冗余写法,虽然不会导致语法错误,但可以省略
内容的提问来源于stack exchange,提问作者Passaro
相关产品推荐
相关产品推荐

