2013-11-04 126 views
0

當我嘗試將記錄添加到我的客戶端和/或站點表時,出現以下錯誤。MySQL外鍵錯誤1452

架構創建失敗:不能添加或更新子行,外鍵約束失敗(db_2_6ceafclient,約束client2offer外鍵(clientID)參考文獻offer_to_clientclientID)ON DELETE NO ACTION ON UPDATE NO ACTION):

模式:

SQL:

SET @[email protected]@UNIQUE_CHECKS, UNIQUE_CHECKS=0; 
SET @[email protected]@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0; 
SET @[email protected]@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES'; 


-- ----------------------------------------------------- 
-- Table `offer_to_category` 
-- ----------------------------------------------------- 
CREATE TABLE IF NOT EXISTS `offer_to_category` (
    `offerID` INT UNSIGNED NOT NULL , 
    `categoryID` INT UNSIGNED NOT NULL , 
    INDEX `offer_to_category` (`offerID` ASC, `categoryID` ASC) , 
    INDEX `o2c_categoryID` (`categoryID` ASC)) 
ENGINE = InnoDB; 


-- ----------------------------------------------------- 
-- Table `offer_to_client` 
-- ----------------------------------------------------- 
CREATE TABLE IF NOT EXISTS `offer_to_client` (
    `offerID` INT UNSIGNED NOT NULL , 
    `clientID` INT UNSIGNED NOT NULL , 
    INDEX `offer_to_client` (`offerID` ASC, `clientID` ASC) , 
    INDEX `o2cl_clientID` (`clientID` ASC)) 
ENGINE = InnoDB; 


-- ----------------------------------------------------- 
-- Table `offer` 
-- ----------------------------------------------------- 
CREATE TABLE IF NOT EXISTS `offer` (
    `offerID` INT UNSIGNED NOT NULL AUTO_INCREMENT , 
    `offerName` VARCHAR(255) NULL , 
    `offerDescription` LONGTEXT NULL , 
    `offerAction` TEXT NULL , 
    `offerStart` BIGINT NULL , 
    `offerEnd` BIGINT NULL , 
    `offerStatus` TINYINT(1) NULL , 
    PRIMARY KEY (`offerID`) , 
    CONSTRAINT `offer2cat` 
    FOREIGN KEY (`offerID`) 
    REFERENCES `offer_to_category` (`offerID`) 
    ON DELETE CASCADE 
    ON UPDATE NO ACTION, 
    CONSTRAINT `offer2client` 
    FOREIGN KEY (`offerID`) 
    REFERENCES `offer_to_client` (`offerID`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION) 
ENGINE = InnoDB; 


-- ----------------------------------------------------- 
-- Table `category` 
-- ----------------------------------------------------- 
CREATE TABLE IF NOT EXISTS `category` (
    `categoryID` INT UNSIGNED NOT NULL AUTO_INCREMENT , 
    `categoryName` VARCHAR(255) NULL , 
    `categoryDescription` LONGTEXT NULL , 
    `categoryStatus` TINYINT(1) NULL , 
    PRIMARY KEY (`categoryID`) , 
    CONSTRAINT `cat2offer` 
    FOREIGN KEY (`categoryID`) 
    REFERENCES `offer_to_category` (`categoryID`) 
    ON DELETE CASCADE 
    ON UPDATE NO ACTION) 
ENGINE = InnoDB; 


-- ----------------------------------------------------- 
-- Table `user` 
-- ----------------------------------------------------- 
CREATE TABLE IF NOT EXISTS `user` (
    `userID` INT UNSIGNED NOT NULL AUTO_INCREMENT , 
    `clientID` INT UNSIGNED NOT NULL , 
    `userEmail` VARCHAR(255) NULL , 
    `userFirstName` VARCHAR(255) NULL , 
    `userLastName` VARCHAR(255) NULL , 
    `userRegistered` BIGINT NULL , 
    `userStatus` TINYINT(1) NULL , 
    PRIMARY KEY (`userID`) , 
    INDEX `client` (`clientID` ASC, `userEmail` ASC)) 
ENGINE = InnoDB; 


-- ----------------------------------------------------- 
-- Table `client` 
-- ----------------------------------------------------- 
CREATE TABLE IF NOT EXISTS `client` (
    `clientID` INT UNSIGNED NOT NULL AUTO_INCREMENT , 
    `siteID` INT UNSIGNED NOT NULL , 
    `clientName` VARCHAR(255) NULL , 
    `clientDescription` LONGTEXT NULL , 
    `clientUrl` LONGTEXT NULL , 
    `clientStatus` TINYINT(1) NULL , 
    PRIMARY KEY (`clientID`) , 
    INDEX `clientsiteid` (`siteID` ASC) , 
    CONSTRAINT `client2offer` 
    FOREIGN KEY (`clientID`) 
    REFERENCES `offer_to_client` (`clientID`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION, 
    CONSTRAINT `client2user` 
    FOREIGN KEY (`clientID`) 
    REFERENCES `user` (`clientID`) 
    ON DELETE CASCADE 
    ON UPDATE NO ACTION) 
ENGINE = InnoDB; 


-- ----------------------------------------------------- 
-- Table `admins` 
-- ----------------------------------------------------- 
CREATE TABLE IF NOT EXISTS `admins` (
    `adminID` INT UNSIGNED NOT NULL AUTO_INCREMENT , 
    `adminName` VARCHAR(255) NULL , 
    `adminEmail` LONGTEXT NULL , 
    `adminUsername` VARCHAR(255) NULL , 
    `adminStatus` TINYINT(1) NULL , 
    PRIMARY KEY (`adminID`)) 
ENGINE = InnoDB; 


-- ----------------------------------------------------- 
-- Table `site` 
-- ----------------------------------------------------- 
CREATE TABLE IF NOT EXISTS `site` (
    `siteID` INT UNSIGNED NOT NULL AUTO_INCREMENT , 
    `siteName` VARCHAR(255) NULL , 
    `siteURL` LONGTEXT NULL , 
    `siteStyles` LONGTEXT NULL , 
    `siteImages` LONGTEXT NULL , 
    `sitesStatus` TINYINT(1) NULL , 
    PRIMARY KEY (`siteID`) , 
    CONSTRAINT `site2client` 
    FOREIGN KEY (`siteID`) 
    REFERENCES `client` (`siteID`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION) 
ENGINE = InnoDB; 




SET [email protected]_SQL_MODE; 
SET [email protected]_FOREIGN_KEY_CHECKS; 
SET [email protected]_UNIQUE_CHECKS; 

-- ----------------------------------------------------- 
-- Data for table `client` 
-- ----------------------------------------------------- 
START TRANSACTION; 

INSERT INTO `client` (`clientID`, `siteID`, `clientName`, `clientDescription`, `clientUrl`, `clientStatus`) VALUES (NULL, 1, 'Weight Watchers', 'Weight Watchers microsite', 'weightwachers', 1); 
INSERT INTO `client` (`clientID`, `siteID`, `clientName`, `clientDescription`, `clientUrl`, `clientStatus`) VALUES (NULL, 1, 'A Uni', NULL, NULL, 1); 
INSERT INTO `client` (`clientID`, `siteID`, `clientName`, `clientDescription`, `clientUrl`, `clientStatus`) VALUES (NULL, 2, 'Ollie Biz', '', NULL, 1); 
INSERT INTO `client` (`clientID`, `siteID`, `clientName`, `clientDescription`, `clientUrl`, `clientStatus`) VALUES (NULL, 2, 'Ollie Uni', NULL, 'ollieuni', 1); 

COMMIT; 

-- ----------------------------------------------------- 
-- Data for table `site` 
-- ----------------------------------------------------- 
START TRANSACTION; 

INSERT INTO `site` (`siteID`, `siteName`, `siteURL`, `siteStyles`, `siteImages`, `sitesStatus`) VALUES (1, 'We Love Rewards', 'http://www.weloverewards.co.uk', NULL, NULL, 1); 
INSERT INTO `site` (`siteID`, `siteName`, `siteURL`, `siteStyles`, `siteImages`, `sitesStatus`) VALUES (2, 'Ollie Rewards', 'http://www.olliesrewards.co.uk', NULL, NULL, 1); 

COMMIT; 
+0

如果您的客戶端<->服務約束不適用於client2offer表,而不是客戶端表? (您可以通過在client_to_offer中添加一個條目來檢查此情況,以匹配您的新客戶端,然後插入客戶端記錄,這將在客戶端上填充約束條件。) – ModulusJoe

+0

我認爲您的所有外鍵約束都在錯誤的表格中聲明。他們應該是相反的方式。 –

回答

0

我相信這個約束:

CONSTRAINT `client2offer` 
FOREIGN KEY (`clientID`) 
REFERENCES `offer_to_client` (`clientID`) 
ON DELETE NO ACTION 
ON UPDATE NO ACTION, 

應移至是在client_to_offer表的約束,而不是在客戶端表。目前,客戶端中的任何插入都必須在client_to_offer中有匹配的記錄,我相信這是錯誤的。

+0

我也必須爲客戶端 - >用戶關係做同樣的事情,以便它成爲客戶端< - 用戶 – rockfreak