MYSQL: Wie man NULL oder leere Daten während des Einfügens auf 0 setzt

8

Es scheint also, als wäre es ziemlich einfach und ich schwöre, ich habe das schon mal gemacht, aber aus irgendeinem Grund funktioniert es einfach nicht für mich.

Ich verwende MAMP und habe eine Tabelle mit ungefähr 200 Spalten und ich möchte, dass ungefähr 20 davon auf 0 gesetzt werden, wenn NULL oder leere Daten darin eingefügt werden.

Hier ist ein kleines Beispiel dafür, wie meine Tabelle aussieht und was ich für Spalten getan habe, die ich standardmäßig auf 0 setzen möchte.

%Vor%

Also bemerken Sie auf BathsFull Ich habe es auf NOT NULL DEFAULT '0' gesetzt Das Problem ist, dass wenn leere Daten an es übergeben werden, bekomme ich einen SQL-Fehler von SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'BathsFull' cannot be null .

Ich habe auch versucht, dass BathsFull accepts NULL and DEFAULT '0', aber wenn leere Daten übergeben werden, zeigt die Tabelle NULL anstelle von 0 .

Fehle ich hier etwas? Muss ich eine Art Trigger schreiben? Ich möchte nicht die Daten in meinem Skript scrubben, bevor ich es in die DB setze, wenn ich nicht muss.

    
bigmike7801 04.04.2013, 14:44
quelle

5 Antworten

2

Sie können definitiv einen Auslöser dafür verwenden

Angenommen, Sie machen das Feld nullable

%Vor%

Auslöser

%Vor%

Einfügen einiger Zeilen

%Vor%

Ergebnis

%Vor%     
peterm 04.04.2013, 15:10
quelle
3

Wenn Sie den Wert in Ihrer Einfügung explizit auf NULL setzen, aber MySQL die Null durch 0 ersetzen soll, können Sie die Spalte so definieren, dass in der CREATE TABLE -Anweisung NULL zulässig ist, und dann die Variable ersetzen NULL mit TRIGGER .

In etwa so:

%Vor%

Probieren Sie es in dieser SQL Fiddle

aus     
Ike Walker 04.04.2013 15:09
quelle
1

Sie können das Schlüsselwort default verwenden, um beim Einfügen den Standardwert der Spalte zu erhalten.

Beispiel:

%Vor%     
DessDess 04.04.2013 14:55
quelle
1

Vielleicht sollten Sie das versuchen:

%Vor%     
Doan Cuong 04.04.2013 14:55
quelle
1

Sie haben vergessen, die INSERT-Abfragen zu posten, aber ich bin mir sicher, dass das Problem da ist. Dies funktioniert wie erwartet:

%Vor%

... weil Sie BathsFull weglassen, so verwendet MySQL das defalt. Das tut nicht:

%Vor%

... weil Sie MySQL mitteilen, dass Sie NULL wollen.

    
Álvaro González 04.04.2013 15:01
quelle

Tags und Links