SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row on CONSTRAINT `fk_users_has_ratings_businesses1

StackOverflow https://stackoverflow.com/questions/23179709

Question

I'm getting this error when i try to insert new ratings

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)

below database table structure with some foreign keys. i'm confused with adding multiple primary and foreign keys. please help me to sort out this issue

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;
Was it helpful?

Solution

The problem is coming from this:

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

The record you're trying to insert / update - probably user_ratings - is foreign keyed to the businesses table; you can't create a user_ratings record without a business_id, and that business_id must actually exist as an id in the businesses table.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top