2014-02-27 61 views
0

模式是如下圖所示插入到子表有外鍵AUTO_INCREMENT列

  CREATE TABLE `country` (
      `id` int(11) NOT NULL AUTO_INCREMENT, 
      `country_name` varchar(45) DEFAULT NULL, 
      PRIMARY KEY (`id`) 
      ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; 

      CREATE TABLE `state_table` (
       `id` int(11), 
       `state_name` varchar(45) DEFAULT NULL, 
       `country_id` int(11) NOT NULL AUTO_INCREMENT, 
       PRIMARY KEY (`country_id`), 
       CONSTRAINT `country_fk` FOREIGN KEY (`country_id`) 
       REFERENCES `country` (`id`) ON DELETE CASCADE on update cascade 
      ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COMMENT=''; 

當我試圖將數據插入到兩個表,將數據插入到父表,但它不插入在這裏的子表和錯誤是

Schema Creation Failed: Cannot add or update a child row: a foreign key constraint fails (`db_2_3b712`.`state_table`, CONSTRAINT `country_fk` FOREIGN KEY (`country_id`) REFERENCES `country` (`id`) ON DELETE CASCADE ON UPDATE CASCADE): 

根據我的想法有country_id作爲auto_increment創建問題。

我試圖插入這樣

 INSERT INTO country (country_name) VALUES ('US of A'); 

     INSERT INTO state_table (state_name,id) VALUES 
     ('Minnesota', 2), 
     ('Arizona', 2); 

幫助我。

回答

0

您插入的ID必須存在於國家/地區表中,並且必須是國家/地區的有效ID。

顯然沒有id = 2的國家。

您可以使用函數mysql_insert_id()

所以它會看起來像這樣得到的插入ID:

INSERT INTO country (country_name) VALUES ('US of A'); 

INSERT INTO state_table (state_name,id) VALUES 
    ('Minnesota', mysql_insert_id()), 
    ('Arizona', mysql_insert_id()); 

甚至更​​好,可以將這個ID分配給一個變量,並插入。

INSERT INTO country (country_name) VALUES ('US of A'); 
$id = mysql_insert_id(); 

INSERT INTO state_table (state_name,id) VALUES 
    ('Minnesota', $id), 
    ('Arizona', $id); 
0

爲什麼你有AUTO_INCREMENT到外鍵約束列?從country_id列刪除AUTO_INCREMENT列,然後重試。