2017-02-20 80 views
2

我有一個問題,這讓我瘋狂。我在互聯網上搜索,但所有我能找到的是:外鍵引用的數據沒有插入。好吧,我檢查了100次,他們插入。錯誤代碼:1452在更新MySQL

我的表是:

Stundenanfrage:

CREATE TABLE IF NOT EXISTS Stundenanfrage(
LehrerKuerzel CHAR(10), 
Anfangszeit TIMESTAMP, 
Endzeit TIMESTAMP, 
StundeGehalten TINYINT, 
Akzeptiert TINYINT, 
Lernprozess TEXT, 
Sterne INT, -- 1-5 1 schlecht; 5 gut 
BetrauNr INT REFERENCES ILB_Betrauung(BetrauNr), 
PRIMARY KEY(LehrerKuerzel, Anfangszeit, Endzeit, BetrauNr), 
FOREIGN KEY(LehrerKuerzel, Anfangszeit, Endzeit) REFERENCES Lehrerzeiten(LehrerKuerzel, Anfangszeit, Endzeit) 
); 

Lehrerzeiten:

CREATE TABLE IF NOT EXISTS Lehrerzeiten(
LehrerKuerzel CHAR(10) REFERENCES ILB_Lehrer, 
Anfangszeit TIMESTAMP , 
Endzeit TIMESTAMP , 
Einzelunterricht TINYINT(1) DEFAULT 0, 
Thema VARCHAR(100), 
PRIMARY KEY(LehrerKuerzel, Anfangszeit, Endzeit) 
); 

而且ilb_betrauung:

CREATE TABLE IF NOT EXISTS ILB_Betrauung(
BetrauNr INT PRIMARY KEY AUTO_INCREMENT, 
LehrerKuerzel CHAR(10) REFERENCES ilb_lehrer, 
MatNr CHAR(20) REFERENCES fw_schueler, 
zweckmaeßig_erachtet_Lehrer TINYINT, 
zweckmaeßig_erachtet_Schueler TINYINT, 
Betrauung_AV TINYINT, 
Eltern_informiert TINYINT 
); 

插入的數據:

Inserts

我的更新查詢看起來是這樣的:

UPDATE stundenanfrage SET Akzeptiert = 1 
WHERE LehrerKuerzel = "bb" AND Anfangszeit = "2017-02-20 12:20:00" AND 
Endzeit = "2017-02-20 13:00:00"; 

,並投擲了一個錯誤:

Error Code: 1452. Cannot add or update a child row: a foreign key constraint fails (`db_ilb`.`stundenanfrage`, CONSTRAINT `stundenanfrage_ibfk_1` FOREIGN KEY (`LehrerKuerzel`, `Anfangszeit`, `Endzeit`) REFERENCES `lehrerzeiten` (`LehrerKuerzel`, `Anfangszeit`, `Endzeit`) 

我也加入了所有表和選擇的特定記錄我想更新:

SELECT * FROM stundenanfrage s 
JOIN lehrerzeiten l ON s.Lehrerkuerzel = l.Lehrerkuerzel AND s.Anfangszeit = 
l.Anfangszeit AND s.Endzeit = l.Endzeit 
WHERE l.LehrerKuerzel = "bb" AND l.Anfangszeit = "2017-02-20 12:20:00" AND 
l.Endzeit = "2017-02-20 13:00:00" AND s.BetrauNr = 1; 

輸出結果是我想要更新的一條記錄。我也問過我的老師這個錯誤,她也沒有線索。

+0

刪除約束先再更新,更新之後的創建約束 –

+0

@SinghKailash什麼是有約束的,如果你更改前刪除它的意義呢?更不用說在大桌子上移除和重新創建約束可能需要相當長的時間。所以,這是一個非常糟糕的,甚至有害的建議! – Shadow

+2

也許你在該表上觸發,它正在更新更新的一些值?否則,這個錯誤是沒有意義的。 –

回答

2

檢查Extra

mysql> DESC `Stundenanfrage`; 
+----------------+------------+------+-----+-------------------+-----------------------------+ 
| Field   | Type  | Null | Key | Default   | Extra      | 
+----------------+------------+------+-----+-------------------+-----------------------------+ 
| LehrerKuerzel | char(10) | NO | PRI | NULL    |        | 
| Anfangszeit | timestamp | NO | PRI | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP | 
| Endzeit  | timestamp | NO | PRI | NULL    |        | 
| StundeGehalten | tinyint(4) | YES |  | NULL    |        | 
| Akzeptiert  | tinyint(4) | YES |  | NULL    |        | 
| Lernprozess | text  | YES |  | NULL    |        | 
| Sterne   | int(11) | YES |  | NULL    |        | 
| BetrauNr  | int(11) | NO | PRI | NULL    |        | 
+----------------+------------+------+-----+-------------------+-----------------------------+ 
8 rows in set (0.00 sec) 

參見:12.3.5 Automatic Initialization and Updating for TIMESTAMP and DATETIME

嘗試:

CREATE TABLE IF NOT EXISTS Stundenanfrage (
    LehrerKuerzel CHAR(10), 
    Anfangszeit TIMESTAMP DEFAULT CURRENT_TIMESTAMP, 
    Endzeit TIMESTAMP, 
    StundeGehalten TINYINT, 
    Akzeptiert TINYINT, 
    Lernprozess TEXT, 
    Sterne INT, -- 1-5 1 schlecht; 5 gut 
    BetrauNr INT REFERENCES ILB_Betrauung(BetrauNr), 
    PRIMARY KEY(LehrerKuerzel, Anfangszeit, Endzeit, BetrauNr), 
    FOREIGN KEY(LehrerKuerzel, Anfangszeit, Endzeit) 
    REFERENCES Lehrerzeiten(LehrerKuerzel, Anfangszeit, Endzeit) 
); 

mysql> DESC `Stundenanfrage`; 
+----------------+------------+------+-----+-------------------+-------+ 
| Field   | Type  | Null | Key | Default   | Extra | 
+----------------+------------+------+-----+-------------------+-------+ 
| LehrerKuerzel | char(10) | NO | PRI | NULL    |  | 
| Anfangszeit | timestamp | NO | PRI | CURRENT_TIMESTAMP |  | 
| Endzeit  | timestamp | NO | PRI | NULL    |  | 
| StundeGehalten | tinyint(4) | YES |  | NULL    |  | 
| Akzeptiert  | tinyint(4) | YES |  | NULL    |  | 
| Lernprozess | text  | YES |  | NULL    |  | 
| Sterne   | int(11) | YES |  | NULL    |  | 
| BetrauNr  | int(11) | NO | PRI | NULL    |  | 
+----------------+------------+------+-----+-------------------+-------+ 
8 rows in set (0.00 sec) 
+0

好點!我覺得這是由於時間戳,但不能讓我的頭在附近 – Shadow

+0

非常感謝!我不知道這是默認的。它現在有效。 –

+0

也謝謝你@Shadow。你的建議也起作用。 –