SQL建表语句语法错误求助:CREATE TABLE ORDER处报错
问题排查:CREATE TABLE ORDER 语法错误解析
嘿,这个问题我太熟了!你遇到的语法错误根源很简单:ORDER是SQL的保留关键字——数据库引擎会把它识别成ORDER BY这类排序命令的一部分,而不是你要创建的表名,所以直接用它来定义表就会触发语法错误。
两种解决方案:
1. 更换表名(推荐)
最简单也最稳妥的方式是换一个非保留字的表名,比如把ORDER改成ORDERS,这样完全不会有语法冲突。修正后的完整SQL代码如下:
CREATE TABLE CLIENT( CLIENT_ID BIGINT AUTO_INCREMENT PRIMARY KEY, LAST_NAME VARCHAR(16) NOT NULL, FIRST_NAME VARCHAR(16) NOT NULL, STREET_ADDRESS VARCHAR(100) NOT NULL, APARTMENT_NUMBER VARCHAR(20) NOT NULL, CITY VARCHAR(50) NOT NULL, ZIP_CODE VARCHAR(10) NOT NULL ); CREATE TABLE ORDERS( ORDER_ID BIGINT AUTO_INCREMENT PRIMARY KEY, CLIENT_ID BIGINT NOT NULL, DATE_ORDERED BIGINT NOT NULL, ORDER_SUM FLOAT NOT NULL );
(顺便提一句:SUM也是SQL聚合函数的保留关键字,我把它改成了ORDER_SUM,避免后续可能出现的隐性问题)
2. 使用标识符引号包裹保留字(如果必须用ORDER作为表名)
如果你因为业务需求一定要用ORDER作为表名,可以用数据库对应的标识符引号把它括起来,告诉引擎这是一个标识符而非关键字:
- MySQL/MariaDB 使用反引号
`:
CREATE TABLE `ORDER`( ORDER_ID BIGINT AUTO_INCREMENT PRIMARY KEY, CLIENT_ID BIGINT NOT NULL, DATE_ORDERED BIGINT NOT NULL, `SUM` FLOAT NOT NULL );
- PostgreSQL/SQL Server(需开启QUOTED_IDENTIFIER选项)使用双引号
":
CREATE TABLE "ORDER"( ORDER_ID BIGINT AUTO_INCREMENT PRIMARY KEY, CLIENT_ID BIGINT NOT NULL, DATE_ORDERED BIGINT NOT NULL, "SUM" FLOAT NOT NULL );
内容的提问来源于stack exchange,提问作者Michael
相关产品推荐
相关产品推荐

