MySQL Cannot Add Foreign Key Constraint

后端 未结 22 2202
时光取名叫无心
时光取名叫无心 2020-11-22 08:35

So I\'m trying to add Foreign Key constraints to my database as a project requirement and it worked the first time or two on different tables, but I have two tables on which

22条回答
  •  暖寄归人
    2020-11-22 08:54

    NOTE: The following tables were taken from some site when I was doing some R&D on the database. So the naming convention is not proper.

    For me, the problem was, my parent table had the different character set than that of the one which I was creating.

    Parent Table (PRODUCTS)

    products | CREATE TABLE `products` (
      `productCode` varchar(15) NOT NULL,
      `productName` varchar(70) NOT NULL,
      `productLine` varchar(50) NOT NULL,
      `productScale` varchar(10) NOT NULL,
      `productVendor` varchar(50) NOT NULL,
      `productDescription` text NOT NULL,
      `quantityInStock` smallint(6) NOT NULL,
      `buyPrice` decimal(10,2) NOT NULL,
      `msrp` decimal(10,2) NOT NULL,
      PRIMARY KEY (`productCode`),
      KEY `productLine` (`productLine`),
      CONSTRAINT `products_ibfk_1` FOREIGN KEY (`productLine`) REFERENCES `productlines` (`productLine`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1
    

    Child Table which had a problem (PRICE_LOGS)

    price_logs | CREATE TABLE `price_logs` (
      `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
      `productCode` varchar(15) DEFAULT NULL,
      `old_price` decimal(20,2) NOT NULL,
      `new_price` decimal(20,2) NOT NULL,
      `added_on` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
      PRIMARY KEY (`id`),
      KEY `productCode` (`productCode`),
      CONSTRAINT `price_logs_ibfk_1` FOREIGN KEY (`productCode`) REFERENCES `products` (`productCode`) ON DELETE CASCADE ON UPDATE CASCADE
    );
    

    MODIFIED TO

    price_logs | CREATE TABLE `price_logs` (
      `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
      `productCode` varchar(15) DEFAULT NULL,
      `old_price` decimal(20,2) NOT NULL,
      `new_price` decimal(20,2) NOT NULL,
      `added_on` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
      PRIMARY KEY (`id`),
      KEY `productCode` (`productCode`),
      CONSTRAINT `price_logs_ibfk_1` FOREIGN KEY (`productCode`) REFERENCES `products` (`productCode`) ON DELETE CASCADE ON UPDATE CASCADE
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1 
    

提交回复
热议问题