MariaDB,MySQL-我的创建表语法有什么问题?

时间:2020-04-20 11:49:56

标签: mysql sql mariadb

我正在尝试执行这样的SQL命令来为Maria DB创建表:

CREATE TABLE `sh_bom`.`stockmovements` (
  `MOVEMENTID` INT NOT NULL,
  `MOVEMENTDATE` DATETIME NULL,
  `MOVEMENTVALUE` INT NULL,
  `LEFTBEFORE` INT NULL,
  `LEFTAFTER` INT NULL,
  `COMMENTARY` VARCHAR(200) NULL,
  `PARTID_FK` INT NULL,
  PRIMARY KEY (`MOVEMENTID`),
  INDEX `PARTID_FKNAME_idx` (`PARTID_FK` ASC) VISIBLE,
  CONSTRAINT `PARTID_FKNAME`
    FOREIGN KEY (`PARTID_FK`)
    REFERENCES `sh_bom`.`detail` (`Id`)
    ON DELETE CASCADE
    ON UPDATE CASCADE);

但是我得到这样的错误:

ERROR 1064: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '
  CONSTRAINT `PARTID_FKNAME`
    FOREIGN KEY (`PARTID_FK`)
    REFERENCES `sh_b' at line 10
SQL Statement:
CREATE TABLE `sh_bom`.`stockmovements` (
  `MOVEMENTID` INT NOT NULL,
  `MOVEMENTDATE` DATETIME NULL,
  `MOVEMENTVALUE` INT NULL,
  `LEFTBEFORE` INT NULL,
  `LEFTAFTER` INT NULL,
  `COMMENTARY` VARCHAR(200) NULL,
  `PARTID_FK` INT NULL,
  PRIMARY KEY (`MOVEMENTID`),
  INDEX `PARTID_FKNAME_idx` (`PARTID_FK` ASC) VISIBLE,
  CONSTRAINT `PARTID_FKNAME`
    FOREIGN KEY (`PARTID_FK`)
    REFERENCES `sh_bom`.`detail` (`Id`)
    ON DELETE CASCADE
    ON UPDATE CASCADE)

我在此处查看了文档:https://mariadb.com/kb/en/foreign-keys/ 而且我确定外键定义正确:

[CONSTRAINT [symbol]] FOREIGN KEY
    [index_name] (index_col_name, ...)
    REFERENCES tbl_name (index_col_name,...)
    [ON DELETE reference_option]
    [ON UPDATE reference_option]

reference_option:
    RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT

此SQL命令中我缺少什么?

1 个答案:

答案 0 :(得分:2)

create table语句中的 visible 潜在错误是索引定义使用关键字VISIBLE。默认情况下,优化器可以看到MySQL中的索引。从MySQL 8+开始,可以使索引不可见。如果您使用的MySQL版本早于8+,则语法可能会导致错误。

相关问题