我正在尝试执行这样的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命令中我缺少什么?
答案 0 :(得分:2)
create table语句中的 visible 潜在错误是索引定义使用关键字VISIBLE
。默认情况下,优化器可以看到MySQL中的索引。从MySQL 8+开始,可以使索引不可见。如果您使用的MySQL版本早于8+,则语法可能会导致错误。