2012-06-04 52 views
0

我一直在閱讀一些問題同樣的問題我有,但還沒有找到解決辦法MySQL的錯誤:當插入和更新:無法添加或更新子行,外鍵約束失敗

數據庫Estructure

CREATE TABLE material (
    cve_mat varchar(12), 
    type_mat varchar(20), 
    author_mat varchar(40), 
    status varchar(2), 
    primary key(cve_mat) 
) ENGINE = INNODB; 

CREATE TABLE users (
    cve_user varchar(8), 
    name_user varchar(25), 
    lastn_user varchar(25), 
    email_user varchar(25), 
    primary key(cve_user) 
)ENGINE = INNODB; 

CREATE TABLE material_user (
    cve_mat varchar(8), 
    cve_user varchar(8), 
    start_mat date, 
    end_mat date, 
    foreign key(cve_mat) references material(cve_mat) 
    ON UPDATE CASCADE 
    ON DELETE CASCADE, 
    foreign key(cve_user) references users(cve_user) 
    ON UPDATE CASCADE 
    ON DELETE CASCADE 
) ENGINE = INNODB; 

當執行這些指令:

...... 
$query = "INSERT INTO material_user VALUES ('$cvemat','$ncontrol',NOW(),DATE_ADD(current_date, interval '$days' day))"; 
$result = mysql_query($query) or die(mysql_error()); 

if ($result) { 
$query = "UPDATE material SET status = 'YES' WHERE material.cve_mat = '$cvemat'"; 
$result = mysql_query($query) or die(mysql_error()); 

if ($result){ 
    return true; 
} else { 
    return false; 
} 
} else { 
return false; 
} 

並顯示此錯誤:

Cannot add or update a child row: a foreign key constraint fails (`biblioteca/material_prestamo`, CONSTRAINT `material_prestamo_ibfk_1` FOREIGN KEY (`cve_mat`) REFERENCES `material` (`cve_mat`) ON DELETE CASCADE ON UPDATE CASCADE) 

我將非常感謝您的幫助!

+0

有兩種說法,在裏面做你看到提到的錯誤? –

+0

根據錯誤,是爲語句插入! – SoldierCorp

+0

您是否確定''cvemat'存在於'material'表中?此外,數據類型的長度不material_user.cve_mat'之間的匹配'和'material.cve_mat' –

回答

0

首先,列類型爲外鍵應該匹配引用表:

material_user

cve_mat varchar(8), 

材料

cve_mat varchar(12), 

這兩列類型應該相等。

insert語句之前,你可以進行一些調試:

SELECT * FROM material WHERE cve_mat='$cvemat' 

如果一切正常,你可以運行這個命令可以找到更多的細節:

SHOW INNODB STATUS; 
+0

我已經匹配的數據類型的大小到八,但現在@SoldierCorp您還沒有解釋你的代碼是如何掛接到任何可以使用Firebug – SoldierCorp

+0

錯誤whith或無螢火蟲在這個問題是相同的!...但是,我使用螢火蟲。 –

+0

我不解釋,但在調試顯示此錯誤「NULL」(我用螢火蟲) – SoldierCorp

0

在有外鍵約束,所以你需要先執行你的第二個查詢,然後你最前一頁查詢第二。這可能是幫助你

$query = "UPDATE material SET status = 'YES' WHERE material.cve_mat = '$cvemat'"; 
$result = mysql_query($query) or die(mysql_error()); 

if ($result) { 
    $query = "INSERT INTO material_user VALUES ('$cvemat','$ncontrol',NOW(),DATE_ADD(current_date, interval '$days' day))"; 
    $result = mysql_query($query) or die(mysql_error()); 
+0

錯誤,我會嘗試我們的代碼,稍候... – SoldierCorp

+0

對不起的人,但與UR答案錯誤..是一樣的! – SoldierCorp

相關問題