2017-02-20 84 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。你的建议也起作用。 –