mysql外键

时间:2011-07-27 16:19:58

标签: mysql foreign-keys

您好我有两个mysql表,其中包含用户名和密码,其中包含用户信息。以下是表格:

CREATE  TABLE IF NOT EXISTS `test`.`dbo.users` (
  `userId` INT(11) NOT NULL AUTO_INCREMENT ,
  `userUsername` VARCHAR(45) NULL ,
  `userPassword` VARCHAR(45) NULL ,
  `dbo.userProfiles_userProfileId` INT(11) NOT NULL ,
  PRIMARY KEY (`userId`, `dbo.userProfiles_userProfileId`) ,
  INDEX `fk_dbo.users_dbo.userProfiles` (`dbo.userProfiles_userProfileId` ASC) ,
  CONSTRAINT `fk_dbo.users_dbo.userProfiles`
    FOREIGN KEY (`dbo.userProfiles_userProfileId` )
    REFERENCES `test`.`dbo.userProfiles` (`userId` )
    ON DELETE CASCADE
    ON UPDATE CASCADE)
ENGINE = InnoDB;

CREATE  TABLE IF NOT EXISTS `test`.`dbo.userProfiles` (
  `userProfileId` INT(11) NOT NULL AUTO_INCREMENT ,
  `userId` INT(11) NOT NULL ,
  `userFirstName` VARCHAR(45) NULL ,
  `userMidleName` VARCHAR(45) NULL ,
  `userLastName` VARCHAR(45) NULL ,
  `userBirthDate` VARCHAR(45) NULL ,
  `userCountry` VARCHAR(45) NULL ,
  `userState` VARCHAR(45) NULL ,
  `userCity` VARCHAR(45) NULL ,
  `userZipCode` VARCHAR(45) NULL ,
  `userPrimaryAddress` VARCHAR(45) NULL ,
  `userSecondaryAddress` VARCHAR(45) NULL ,
  `userThirdAddress` VARCHAR(45) NULL ,
  `userFirstPhone` VARCHAR(45) NULL ,
  `userSecondaryPhone` VARCHAR(45) NULL ,
  `userThirdPhone` VARCHAR(45) NULL ,
  `userFirstEmail` VARCHAR(45) NULL ,
  `userSecondaryEmail` VARCHAR(45) NULL ,
  `userThirdEmail` VARCHAR(45) NULL ,
  `userDescription` VARCHAR(45) NULL ,
  PRIMARY KEY (`userProfileId`, `userId`) )
ENGINE = InnoDB;

我对这个表的问题是fk键不起作用,我不知道为什么我在这里遗漏了一些东西..(我没有太多使用外键)。

错误:

  

在服务器

中执行SQL脚本      

错误:错误1005:无法创建表'test.dbo.users'(错误号:150)

你能帮忙解决这个问题,这样我就可以在这张桌子和其他桌子上使用fk吗?如果你有时间来解释我fk键是如何工作的(请使用mysql workbench在图表上创建它们然后转发工程师)。谢谢你的帮助

1 个答案:

答案 0 :(得分:1)

您必须先创建根表(userProfiles)。您可以通过使用set foreign_key_checks=0禁用外键检查来暂时绕过此限制。如果要创建带循环引用的多个表,则必须执行此操作。