MySQL 1064语法错误求助:新手学习项目中SQL建表语句报错
解决MySQL Error 1064语法错误问题
嘿,我一眼就瞅到你这报错的根源啦——问题出在new_table里的price字段定义上,你把数据类型和精度的顺序写反了!
在MySQL里,数值类型的正确写法是类型在前,精度/长度在后,你写的(10,0) INT NOT NULL完全搞反了顺序,这才触发了1064语法错误。另外还有个小细节:你用的ıd是带点的土耳其语字母i,虽然MySQL支持,但换成通用的id能避免后续可能遇到的字符编码小麻烦,不过这不是报错的直接原因。
下面是修正后的完整SQL代码,你直接运行就能正常创建表啦:
SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0; SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0; SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'; -- ----------------------------------------------------- -- Schema filmKategory -- ----------------------------------------------------- -- ----------------------------------------------------- -- Schema filmKategory -- ----------------------------------------------------- CREATE SCHEMA IF NOT EXISTS `filmKategory` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci ; USE `filmKategory` ; -- ----------------------------------------------------- -- Table `filmKategory`.`category` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `filmKategory`.`category` ( `category_id` INT NOT NULL, `name` VARCHAR(255) NOT NULL, PRIMARY KEY (`category_id`)); -- ----------------------------------------------------- -- Table `filmKategory`.`new_table` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `filmKategory`.`new_table` ( `id` INT NOT NULL, -- 换成通用的id,可选修改项 `name` VARCHAR(45) NOT NULL, `price` INT(10,0) NOT NULL, -- 修正后的字段定义 `images` VARCHAR(45) NULL DEFAULT NULL, `Stock` VARCHAR(45) NULL DEFAULT '5', `Category` VARCHAR(2000) NULL DEFAULT NULL, `category_category_id` INT NULL DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE INDEX `id_UNIQUE` (`id` ASC) VISIBLE, INDEX `fk_new_table_category_idx` (`category_category_id` ASC) VISIBLE, CONSTRAINT `fk_new_table_category` FOREIGN KEY (`category_category_id`) REFERENCES `filmKategory`.`category` (`category_id`) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB AUTO_INCREMENT = 33 DEFAULT CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci; SET SQL_MODE=@OLD_SQL_MODE; SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS; SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
如果之后还有类似语法问题,优先检查字段类型、约束的拼写和顺序,基本都能快速定位到问题~
内容的提问来源于stack exchange,提问作者Harun Emre Yaka




