You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

创建MySQL users表遇#1064语法错误,咨询原因及规避方法

问题原因及解决方案

错误原因

你的SQL语法错误出在id字段的约束声明顺序上。在MySQL中,字段约束的声明有固定顺序:NOT NULL需要放在PRIMARY KEY之前,同时AUTO_INCREMENT必须依附于PRIMARY KEY或UNIQUE约束。你当前写的id int PRIMARY KEY NOT NULL AUTO_INCREMENT违反了这个语法规则,导致数据库无法正确解析语句。

修正后的SQL脚本

以下两种写法都可以正常执行:

写法一:调整字段约束顺序

CREATE TABLE `users` (
  `id` int NOT NULL AUTO_INCREMENT PRIMARY KEY,
  `user_role_id` int NOT NULL,
  `first_name` varchar(250) NOT NULL,
  `last_name` varchar(250) NOT NULL,
  `name` varchar(250),
  `email` varchar(250) NOT NULL,
  `dni_type` varchar(32) NOT NULL,
  `dni` int NOT NULL,
  `phone` int,
  `address` varchar(250),
  `city` varchar(125),
  `state` varchar(125),
  `country` varchar(32),
  `zip` varchar(32),
  `created_at` datetime,
  `created_by` int,
  `updated_at` datetime,
  `updated_by` int,
  `deleted_at` datetime,
  `deleted_by` int
);

写法二:将主键设为表级约束(更清晰)

CREATE TABLE `users` (
  `id` int NOT NULL AUTO_INCREMENT,
  `user_role_id` int NOT NULL,
  `first_name` varchar(250) NOT NULL,
  `last_name` varchar(250) NOT NULL,
  `name` varchar(250),
  `email` varchar(250) NOT NULL,
  `dni_type` varchar(32) NOT NULL,
  `dni` int NOT NULL,
  `phone` int,
  `address` varchar(250),
  `city` varchar(125),
  `state` varchar(125),
  `country` varchar(32),
  `zip` varchar(32),
  `created_at` datetime,
  `created_by` int,
  `updated_at` datetime,
  `updated_by` int,
  `deleted_at` datetime,
  `deleted_by` int,
  PRIMARY KEY (`id`)
);

未来避免此类问题的方法

  • 严格遵循MySQL字段定义的语法顺序:常规顺序为字段名 数据类型 [NOT NULL | NULL] [DEFAULT 默认值] [AUTO_INCREMENT] [PRIMARY KEY | UNIQUE],或者将主键、外键等约束单独作为表级约束声明,这种方式更不容易出错。
  • 写完SQL后,先用语法校验工具(比如MySQL Workbench的内置校验功能)检查语句,再执行。
  • 记住自增字段的硬性要求:MySQL中AUTO_INCREMENT必须搭配PRIMARY KEY或UNIQUE约束,且约束顺序不能乱。

内容的提问来源于stack exchange,提问作者Juan David Polo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 05:45:25