【问题标题】:Mysql Syntax error on creating tableMysql 创建表时出现语法错误
【发布时间】:2018-06-14 10:39:26
【问题描述】:

我在 docker 容器中有一个 MySQL 数据库。 入口点执行创建数据库的脚本和创建表的脚本。

除了一张桌子外,一切都很好。

use db;

... creating other tables

CREATE TABLE mediametadata
(
id bigint not null  primary key,
title VARCHAR not NULL,
artist VARCHAR not NULL,
album VARCHAR,
releaseYear bigint,
mediaId bigint NOT NULL,
constraint fk__pk_metadata_objectid
        foreign key (id) references objectid (id),

constraint fk__metadata_media_id
        foreign key (mediaId) references media (id)
)
;

记录到控制台的错误是

mysql_1  | ERROR 1064 (42000) at line 150: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'not NULL,
mysql_1  | artist VARCHAR not NULL,
mysql_1  | album VARCHAR,
mysql_1  | releaseYear bigint,
mysql_1  | mediaId bi' at line 4

第 150 行是 CREATE TABLE mediametadata 之后的左括号

  • MySQL 版本:8.0.3-rc-log
  • 主机操作系统:Debian jessie

我开始认为yearmetadata 可能是保留关键字,所以我重命名了表和year 列,但错误仍然存​​在。

【问题讨论】:

  • 你需要给每个 VARCHAR 一个长度。我很确定我以前在 Stack Overflow 上回答过这个问题。
  • @Bill Karwin 是对的。只需将 VARCHAR 更改为 VARCHAR(length)。
  • 当你使用它时,不要创建这样的主键(未命名),而是像使用外键一样命名它们
  • 非常感谢...太明显了,因为所有其他表都忘记在此处设置 varchar 长度
  • @GuidoG,MySQL 不支持命名主键。他们都被称为PRIMARY。试试看:create table foo ( id int, constraint mypk primary key (id));,然后是show create table foo,你不会在任何地方看到“mypk”。

标签: mysql sql create-table mysql-8.0


【解决方案1】:

@Bill Karwin 在第一条评论中回答 Varchar 需要长度 [Varchar(number)]

【讨论】:

    猜你喜欢
    • 2014-04-29
    • 2012-10-22
    • 1970-01-01
    • 2020-01-12
    • 2012-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-03
    相关资源
    最近更新 更多