2016-04-11 19 views
0

Ich versuche, einen NULL Wert in der deserved_slope_2 Spalte festzulegen, wenn der Benutzer den Wert in einem Formular bearbeitet. Leider ist diese Spalte ein Fremdschlüssel, der auf einen Primärschlüssel (Autoinkrement-Index) einer Spalte einer anderen Tabelle verweist.Mysql Set NULL-Wert in Fremdschlüssel Spalte

Wenn die Anfrage ausgeführt wird, erhalte ich:

Error Number: 1452 

Cannot add or update a child row: a foreign key constraint fails (`game_skisimulation`.`game_created_lifts`, CONSTRAINT `fk_game_created_lifts_game_created_slopes2` FOREIGN KEY (`deserved_slope_2`) REFERENCES `game_created_slopes` (`id_created_slopes`) ON DE) 

UPDATE game_created_lifts SET deserved_slope_2 = '0' WHERE id_created_lifts = '200' LIMIT 1 

ich gelesen habe, dass dies, weil die NULL-ID nicht in der genannten Tabelle vorhanden ist. Leider scheint es, dass ich in dieser Spalte auch NULL nicht setzen kann:

Eine Primärschlüsselspalte darf keine NULL-Werte enthalten.

Wie kann ich dieses Problem lösen? Ich möchte NULL in der deserved_slope_2 Spalte setzen (um es zurückzusetzen).

- Tabellenstruktur für Tabelle game_created_lifts

CREATE TABLE `game_created_lifts` (
    `id_created_lifts` int(11) NOT NULL, 
    `id_player` int(11) NOT NULL, 
    `deserved_slope_1` int(11) DEFAULT NULL, 
    `deserved_slope_2` int(11) DEFAULT NULL 

) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

-- 
-- RELATIONS FOR TABLE `game_created_lifts`: 
-- `deserved_slope_1` 
--  `game_created_slopes` -> `id_created_slopes` 
-- `deserved_slope_2` 
--  `game_created_slopes` -> `id_created_slopes` 

- Tabellenstruktur für Tabelle game_created_slopes

CREATE TABLE `game_created_slopes` (
    `id_created_slopes` int(11) NOT NULL, 
    `id_player` int(11) NOT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 
+0

Der Primärschlüssel kann nicht enthalten 'NULL', sondern ein Fremdschlüssel kann. Sie müssen nur die 'verdient_slope_1' Spalte' NULL' in der 'CREATE TABLE' deklarieren. – Barmar

+0

Wenn diese Aktualisierung im ersten Block die ist, die Sie versuchen, 'verdiente_slope_2 = '0' 'ist kein Versuch, das Feld auf' NULL' zu setzen; es ist ein Versuch, es auf "0" zu setzen, was nicht dasselbe ist. – Uueerdo

Antwort

0

Wert Einstellen einer Spalte auf Null in die einen Fremdschlüssel aufweist, der auf ein abhängt eindeutige und nicht null Spalte in sollte ziemlich einfach sein

UPDATE game_created_lifts SET deserved_slope_2 = NULL WHERE id_created_lifts = '200' LIMIT 1; 

Gehen Sie zu SQL Fiddle, um es online zu sehen.

Testdaten:

create table a (a int primary key); 
create table b (a int references a(a)); 

insert into a(a) values (1); 
insert into b(a) values (1); 

update b set a = null; 

Abfrage:

select * from b 

Ergebnis:

(null)