-3

我用 MySQL Workbench 创建了几个表,但外键有问题。如果我在下面导出代码,我会收到错误,但是如果我不使用外键导出,我不会收到错误,您能否帮我看看代码。

SQL 代码:

DROP TABLE IF EXISTS `mydb`.`users` ;
CREATE  TABLE IF NOT EXISTS `mydb`.`users` (
`uuserid` INT NOT NULL AUTO_INCREMENT ,
`ufname` VARCHAR(25) NULL ,
`ulname` VARCHAR(25) NULL ,
`uuname` VARCHAR(45) NULL ,
`upass` CHAR(64) NOT NULL ,
`uemail` VARCHAR(254) NOT NULL ,
`urole` INT NULL DEFAULT 0 ,
PRIMARY KEY (`uuserid`) )
ENGINE = InnoDB;


DROP TABLE IF EXISTS `mydb`.`photos` ;
CREATE  TABLE IF NOT EXISTS `mydb`.`photos` (
`pphotoid` INT NOT NULL ,
`pname` VARCHAR(4) NULL ,
`plat` FLOAT(10,6) NULL ,
`plng` FLOAT(10,6) NULL ,
`pflag` DECIMAL(10,0) NULL DEFAULT 0 ,
`pext` VARCHAR(4) NULL ,
`plike` DECIMAL(10,0) NULL DEFAULT 0 ,
PRIMARY KEY (`pphotoid`) ,
CONSTRAINT `uuserid`
FOREIGN KEY ()
REFERENCES `mydb`.`users` ()
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;

错误:

#1064 - 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 ') REFERENCES `mydb`.`users` () ON DELETE NO ACTION ON UPDAT' at line 21

我的数据库有更多的表,但这段代码也中断了。我尝试使用 phpmyadmin 插入它。

4

3 回答 3

3

这里需要指定列名

FOREIGN KEY (present_table_column_name)

参考文献mydbusers(foriegn_key_column_name)

于 2013-03-05T21:12:22.340 回答
1

尝试运行此脚本。我使用您的脚本构建它并在SQLFiddle中运行它,所以我知道它可以工作。为了添加外键,您必须有一个合适的字段。在此示例中,我uuserid在表中添加了一列photosuuserid此列对表中的列具有外键约束users

DROP TABLE IF EXISTS `mydb`.`users` ;
CREATE  TABLE IF NOT EXISTS `mydb`.`users` (
`uuserid` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
`ufname` VARCHAR(25) NULL ,
`ulname` VARCHAR(25) NULL ,
`uuname` VARCHAR(45) NULL ,
`upass` CHAR(64) NOT NULL ,
`uemail` VARCHAR(254) NOT NULL ,
`urole` INT NULL DEFAULT 0
) ENGINE = InnoDB;

DROP TABLE IF EXISTS `mydb`.`photos` ;
CREATE  TABLE IF NOT EXISTS `mydb`.`photos` (
`pphotoid` INT NOT NULL PRIMARY KEY,
`pname` VARCHAR(4) NULL ,
`plat` FLOAT(10,6) NULL ,
`plng` FLOAT(10,6) NULL ,
`pflag` DECIMAL(10,0) NULL DEFAULT 0 ,
`pext` VARCHAR(4) NULL ,
`plike` DECIMAL(10,0) NULL DEFAULT 0,
`uuserid`INT NOT NULL
) ENGINE = InnoDB;

Alter Table `photos` add constraint foreign key(`uuserid`) references `users`(`uuserid`);

在上面的示例中,我将设置主键的语句移动到列本身,而不是在 SQL 末尾创建语句。

我认为向您展示如何在表创建之外添加外键约束会更清楚一些,这样您就可以看到导致语法错误的原因。您的外键引用中没有列名。添加后,上述代码将完美运行。

于 2013-03-05T21:30:27.393 回答
0

在错误消息告诉您有语法错误的地方,您有一个语法错误。

问题是您没有在约束中引用任何字段。子句的形式CONSTRAINT应该是这样的:

CONSTRAINT `fkuuserid`
FOREIGN KEY `fkuuserid` (some_field_in_this_table)
REFERENCES `mydb`.`users` (uuserid)
ON DELETE NO ACTION
ON UPDATE NO ACTION

老实说,我什至看不到照片表上的逻辑外键在哪里,因为该表中没有 uuserid 字段。

于 2013-03-05T21:21:35.217 回答