2012-02-23 66 views
1

我是初學者,在mysql中有一個簡單的問題。 我在我的模式(書店)中有三張桌子。我想要他們之間的關係。 我的表格:book(book_id,book_name,book_entity),customer(customer_id,customer_name),orders(book_id,customer_id,quantity)。 我設置的訂單表的外鍵如下:mysql工作臺中的外鍵

外鍵的名稱(book_id和CUSTOMER_ID),參考表( '書店', '書' '書店', '顧客')

起初我填的是books表,但是當我試圖插入客戶表中的數據我有以下錯誤:

ERROR 1452: Cannot add or update a child row: a foreign key constraint fails (`bookshop`.`customer`, CONSTRAINT `customer_id` FOREIGN KEY (`customer_id`) REFERENCES `order` (`customer_id`) ON DELETE NO ACTION ON UPDATE NO ACTION) 

SQL Statement: 

INSERT INTO `bookshop`.`customer` (`customer_id`, `customer_name`, `customer_address`) VALUES (2, 'helen', 'newyork') 

我該怎麼辦?

我的代碼:


-- Table `bookshop`.`books` 

-- ----------------------------------------------------- 

CREATE TABLE IF NOT EXISTS `bookshop`.`books` (

    `book_id` INT NOT NULL , 

    `book_name` VARCHAR(45) NOT NULL , 

    `book_price` DECIMAL NOT NULL , 

    `book_entity` INT NOT NULL , 

    PRIMARY KEY (`book_id`)) 

ENGINE = InnoDB; 





-- ----------------------------------------------------- 

-- Table `bookshop`.`customer` 

-- ----------------------------------------------------- 

CREATE TABLE IF NOT EXISTS `bookshop`.`customer` (

    `customer_id` INT NOT NULL , 

    `customer_name` VARCHAR(45) NOT NULL , 

    `customer_address` VARCHAR(45) NOT NULL , 

    PRIMARY KEY (`customer_id`)) 

ENGINE = InnoDB; 





-- ----------------------------------------------------- 

-- Table `bookshop`.`orders` 

-- ----------------------------------------------------- 

CREATE TABLE IF NOT EXISTS `bookshop`.`orders` (

    `book_id` INT NOT NULL , 

    `customer_id` INT NOT NULL , 

    `quantity` INT NOT NULL , 

    INDEX `book_id` (`book_id` ASC) , 

    INDEX `customer_id` (`customer_id` ASC) , 

    CONSTRAINT `book_id` 

    FOREIGN KEY (`book_id`) 

    REFERENCES `bookshop`.`books` (`book_id`) 

    ON DELETE NO ACTION 

    ON UPDATE NO ACTION, 

    CONSTRAINT `customer_id` 

    FOREIGN KEY (`customer_id`) 

    REFERENCES `bookshop`.`customer` (`customer_id`) 

    ON DELETE RESTRICT 

    ON UPDATE RESTRICT) 

ENGINE = InnoDB; 
+0

這是因爲您在主表中沒有相應的'customer_id',而您有'customer_id'作爲主鍵。 – 2012-02-23 11:29:57

+1

__foreign鍵名參考表book_id'bookshop','books'customer_id'bookshop','customer'__沒有太大意義。重新編寫你如何定義goreign鍵。 – 2012-02-23 11:31:01

+0

我只想在我的表格之間建立關係。我的訂單表中的外鍵:customer_id和book_id(它們也是主鍵) – samira 2012-02-23 11:36:51

回答

0

你的外鍵聲明似乎關閉,請您提供用於創建外鍵的聲明。

但是,您似乎創建了一個外鍵,只允許您在客戶訂單存在的情況下插入客戶。 你可能想要以相反的方式做。

+0

我使用工作臺,並在數據建模中設置訂單表的外鍵。 – samira 2012-02-23 11:42:25

+0

您提供的代碼看起來沒問題,我猜你可能還有其他外圍遊戲來玩弄遊戲或其他東西?您可能需要仔細檢查是否沒有定義其他約束,特別是customer.customer_id上的錯誤狀態 – Tim 2012-02-23 12:10:42

+0

謝謝Tim,我的問題已解決。我重置我的訂單表中的主鍵。我是初學者,在mysql中有瘋狂的錯誤。 – samira 2012-02-23 12:43:14

0

錯誤發生的原因是因爲integrity constraints。 問題是您正嘗試添加無效的參考數據集。這主要是因爲外鍵指向不存在的主鍵。在你的情況下,這可能是因爲你正在添加一個客戶,而客戶以某種方式有一個無效的參考。 你可能有混淆的關係。沒有關於你們關係的更多信息,這只是猜測。