SQLSTATE [23000]:完整性约束违规:1452无法在CONSTRAINT上添加或更新子行`fk_users_has_ratings_businesses1

时间:2014-04-20 07:43:23

标签: mysql sql foreign-keys constraints foreign-key-relationship

当我尝试插入新的评分时,我收到此错误

Error: SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`yuldi`.`users_ratings`, CONSTRAINT `fk_users_has_ratings_businesses1` FOREIGN KEY (`business_id`) REFERENCES `businesses` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION)

在数据库表结构下面有一些外键。我很困惑添加多个主键和外键。请帮我解决这个问题

CREATE TABLE IF NOT EXISTS `yuldi`.`businesses` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `state` VARCHAR(100) NOT NULL,
  `slug` VARCHAR(250) NOT NULL,
  `city` VARCHAR(100) NOT NULL,
  `suburb` VARCHAR(100) NOT NULL,
  `business_name` VARCHAR(100) NOT NULL,
  `business_address` VARCHAR(250) NOT NULL,
  `business_postal` VARCHAR(10) NOT NULL,
  `business_postal_id` INT(11) NOT NULL,
  `business_phone` VARCHAR(50) NOT NULL,
  `business_phone1` VARCHAR(50) NOT NULL,
  `business_phone2` VARCHAR(50) NOT NULL,
  `business_email` VARCHAR(100) NOT NULL,
  `business_website` VARCHAR(200) NOT NULL,
  `business_details` VARCHAR(5000) NOT NULL,
  `business_openinghours` VARCHAR(200) NOT NULL,
  `business_service` VARCHAR(200) NOT NULL,
  `business_addtionalinfo` VARCHAR(200) NOT NULL,
  `business_lat` FLOAT(10,6) NOT NULL,
  `business_lng` FLOAT(10,6) NOT NULL,
  `identity` VARCHAR(100) NOT NULL,
  `status` INT(11) NOT NULL,
  PRIMARY KEY (`id`))
ENGINE = InnoDB
AUTO_INCREMENT = 232
DEFAULT CHARACTER SET = utf8;

CREATE TABLE IF NOT EXISTS `yuldi`.`ratings` (
  `id` VARCHAR(36) NOT NULL,
  `model` VARCHAR(255) NOT NULL,
  `value` FLOAT(8,4) NULL DEFAULT '0.0000',
  `comment` TEXT NULL DEFAULT NULL,
  `created` DATETIME NULL DEFAULT NULL,
  `modified` DATETIME NULL DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE INDEX `UNIQUE_RATING` (`model` ASC))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8;


CREATE TABLE IF NOT EXISTS `yuldi`.`users` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `user_email` VARCHAR(255) NULL DEFAULT NULL,
  `user_password` CHAR(100) NULL DEFAULT NULL,
  `user_name` VARCHAR(255) NULL DEFAULT NULL,
  `user_code` VARCHAR(255) NULL DEFAULT NULL,
  `user_status` TINYINT(4) NULL DEFAULT '0',
  `created` DATETIME NULL DEFAULT NULL,
  `modified` DATETIME NULL DEFAULT NULL,
  `ip_address` VARCHAR(15) NOT NULL,
  PRIMARY KEY (`id`))
ENGINE = InnoDB
AUTO_INCREMENT = 14
DEFAULT CHARACTER SET = utf8;

CREATE TABLE IF NOT EXISTS `yuldi`.`users_ratings` (
  `user_id` INT(11) NOT NULL,
  `rating_id` VARCHAR(36) NOT NULL,
  `business_id` INT(11) NOT NULL,
  PRIMARY KEY (`user_id`, `rating_id`, `business_id`),
  INDEX `fk_users_has_ratings_ratings1_idx` (`rating_id` ASC),
  INDEX `fk_users_has_ratings_users1_idx` (`user_id` ASC),
  INDEX `fk_users_has_ratings_businesses1_idx` (`business_id` ASC),
  CONSTRAINT `fk_users_has_ratings_businesses1`
    FOREIGN KEY (`business_id`)
    REFERENCES `yuldi`.`businesses` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_users_has_ratings_ratings1`
    FOREIGN KEY (`rating_id`)
    REFERENCES `yuldi`.`ratings` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_users_has_ratings_users1`
    FOREIGN KEY (`user_id`)
    REFERENCES `yuldi`.`users` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8;

1 个答案:

答案 0 :(得分:1)

问题来自于此:

 CONSTRAINT `fk_users_has_ratings_businesses1`
  FOREIGN KEY (`business_id`)
  REFERENCES `yuldi`.`businesses` (`id`)
  ON DELETE NO ACTION
  ON UPDATE NO ACTION,

您尝试插入/更新的记录 - 可能是user_ratings - 是businesses表的外键。您无法在没有business_id的情况下创建user_ratings记录,并且该business_id实际上必须在business表中以id存在。