Ubuntu 22.4下使用CONSTRAINT创建MySQL表遇MariaDB语法错误求助
问题解决:MySQL创建主键时的语法错误
你的SQL语句报错核心是主键约束的关键字不完整,原语句里写了PRIMARY但漏掉了KEY,这是MySQL/MariaDB语法不允许的。另外,列级别带CONSTRAINT定义主键的语法也需要严格符合规范。
错误原因拆解
原语句里的IdEmpleado INTEGER CONSTRAINT IndicePrimario PRIMARY存在语法问题:
- 主键约束的完整关键字是
PRIMARY KEY,仅写PRIMARY会被数据库判定为无效语法 - 列级别使用
CONSTRAINT指定约束名时,必须紧跟完整的约束类型关键字
正确的几种写法
写法1:列级别直接定义主键(最简方式)
CREATE TABLE Empleados ( IdEmpleado INTEGER PRIMARY KEY, Nombre TEXT, Apellidos TEXT, FechaNacimiento DATETIME );
写法2:列级别带自定义约束名的主键
如果需要给主键约束指定自定义名称(比如你想用的IndicePrimario),要写完整PRIMARY KEY:
CREATE TABLE Empleados ( IdEmpleado INTEGER CONSTRAINT IndicePrimario PRIMARY KEY, Nombre TEXT, Apellidos TEXT, FechaNacimiento DATETIME );
写法3:表级别定义主键(适合复合主键场景)
如果是多列组成的主键,或者习惯在表末尾统一管理约束,可以用表级别的CONSTRAINT:
CREATE TABLE Empleados ( IdEmpleado INTEGER, Nombre TEXT, Apellidos TEXT, FechaNacimiento DATETIME, CONSTRAINT IndicePrimario PRIMARY KEY (IdEmpleado) );
补充说明
你之前尝试修改字段类型为int、添加NOT NULL这些操作不影响这个语法错误,因为问题根源是主键约束的关键字不完整,和字段类型、非空属性无关。
内容的提问来源于stack exchange,提问作者luis_castro
相关产品推荐
相关产品推荐

