2016-05-27 9 views
1

Ich versuche, ein "ON DELETE SET NULL" auf meinem SQL-Skript zu schreiben, aber es funktioniert nicht ...
Hier sind meine Tabelle:Fehler mit "ON DELETE SET NULL" mysql MAMP

enter image description here

Serie Tabelle ist für die Beschreibung der Serie und Typ-Tabelle ist für die Art dieser Serie (Drama, Komödie, etc.) der sQL-Skript ist:

#------------------------------------------------------------ 
    #  Script MySQL. 
    #------------------------------------------------------------ 


    #------------------------------------------------------------ 
    # Table: serie 
    #------------------------------------------------------------ 

    CREATE TABLE serie(
      id_serie   Int NOT NULL , 
      original_name_serie Varchar (256) , 
      french_name_serie Varchar (256) , 
      creation_date_serie Int , 
      end_date_serie  Int , 
      status_serie  Varchar (256) , 
      duration_serie  Int , 
      synopsis_serie  Varchar (2024) , 
      countries_serie  Varchar (128) , 
      PRIMARY KEY (id_serie) 
    )ENGINE=InnoDB; 


    #------------------------------------------------------------ 
    # Table: type 
    #------------------------------------------------------------ 

    CREATE TABLE type(
      id_type Int NOT NULL , 
      name_type Varchar (128) , 
      PRIMARY KEY (id_type) 
    )ENGINE=InnoDB; 


    #------------------------------------------------------------ 
    # Table: have 
    #------------------------------------------------------------ 

    CREATE TABLE have(
      id_type Int , 
      id_serie Int NOT NULL , 
      PRIMARY KEY (id_type ,id_serie) 
    )ENGINE=InnoDB; 

    ALTER TABLE have ADD CONSTRAINT FK_have_id_type FOREIGN KEY (id_type) REFERENCES type(id_type) ON DELETE SET NULL; 
    ALTER TABLE have ADD CONSTRAINT FK_have_id_serie FOREIGN KEY (id_serie) REFERENCES serie(id_serie) ON DELETE CASCADE; 

Mit diesem Skript I will wenn ich einen 'typ' in der löschen type table, der Wert von 'type' in 'have' table wird an 'null' übergeben, deshalb füge ich "ON DELETE SET NULL" hinzu. Aber es funktioniert nicht, ich habe: "# 1005 - Kann Tabelle nicht erstellen 'zz. # Sql-16527_272' (errno: 150) (Details ...)"

Ich denke, es ist vielleicht habe ich versucht zu setzen Ein Null-Wert in einem Primärschlüssel in der 'have' Tabelle und es ist nicht möglich ... Aber wer kann ich das tun?

Antwort

0

Der Spaltentyp ist als NOT NULL definiert, daher können Sie NULL nicht einfügen. Entferne das von der Definition und es sollte funktionieren.

+0

Ich habe das versucht, aber es funktioniert nicht, weil 'id_type' in 'haben' war der Primärschlüssel und Sie können keinen Nullwert in einen Primärschlüssel setzen. Danke trotzdem, ich habe den Primärschlüssel mit einer einzigartigen Einschränkung geändert und es funktioniert :) – piupiu34

1

Die Spalte id_type in der Tabelle type ist der Primärschlüssel der Tabelle und kann daher nicht auf null eingestellt werden.

Eine Möglichkeit, dies zu lösen, könnte darin bestehen, die Logik des Fremdschlüssels zu ändern (z. B. on delete cascade verwenden oder Löschvorgänge nur dann zulassen, wenn die referenzierte Zeile noch vorhanden ist).

Ein andere Möglichkeit wäre, den Primärschlüssel aus der type Tabelle zu entfernen und stattdessen nur noch einen unique Schlüssel für diese Spalte, so dass null s. Sie müssten auch die explizite not null Einschränkung für diese Spalte entfernen.

+1

Danke! Ich entferne den Primärschlüssel in 'have' und ersetze ihn durch unique, es funktioniert :). – piupiu34