Eine Funktion zum Überprüfen, ob eine Spalte NULL zulässt

7

Gibt es eine Möglichkeit, eine Einfüge- / Aktualisierungsabfrage zu schreiben, die prüft, ob eine Spalte dies zulässt NULLs: Wenn die Spalte auf gesetzt ist NULL, und ''(leere Zeichenfolge) andernfalls?

Ich wäre so etwas wie:

UPDATE mytable 
SET field = IF(A_FUNCTION_TO_CHECK_IF_ALLOWS_NULL(), NULL, '');
Wolf480pl
quelle
Würde das für dich funktionieren? UPDATE mytable SET field = ''; UPDATE mytable SET field = NULL;(Die 2. Anweisung wird nicht erfolgreich sein, wenn die Spalte ein NOT NULLAttribut hat.
ypercubeᵀᴹ
@ypercube Ich versuche Fehler zu vermeiden.
Wolf480pl

Antworten:

7

Sie können INFORMATION_SCHEMA abfragen:

http://dev.mysql.com/doc/refman/5.0/en/columns-table.html

In der Tabelle INFORMATION_SCHEMA.COLUMNS befindet sich eine Spalte IS_NULLABLE.

Sie könnten es in eine Funktion verwandeln, wie ich mir vorstellen kann, aber ich würde diese Logik wahrscheinlich in einen äußeren Teil setzen.

Cade Roux
quelle
1
Das sollte es tun. Tatsächlich habe ich unter Verwendung von INFORMATION_SCHEMA.COLUMNS: dba.stackexchange.com/a/28745/877 geschrieben, wie alle Null- und Nicht-Null-Spaltennamen für eine bestimmte Tabelle erfasst werden . Ihre direkte Antwort erhält +1 !!!
RolandoMySQLDBA
Was meinst du mit "äußerer Teil"? Das Programm, das eine Verbindung zu MySQL herstellt?
Wolf480pl
@ Wolf480pl in was auch immer die SQL-Anweisung generiert. Normalerweise ändert sich Ihr Schema nicht so häufig. Ich dachte, Sie müssten diesen Code generieren. Weil das manuelle Einfügen nicht effizienter ist, als den Code zunächst nur dem Schema zuzuordnen.
Cade Roux
Also im Grunde ein clientseitiger Schema-Cache?
Wolf480pl
1
@ Wolf480pl Ich denke schon. Natürlich müssen Sie nicht bei jedem Aufruf nach dem Schema fragen.
Cade Roux
1

Cades Antwort ist richtig, aber die Informationen direkt vom Link:

SELECT COLUMN_NAME, DATA_TYPE, IS_NULLABLE, COLUMN_DEFAULT
  FROM INFORMATION_SCHEMA.COLUMNS
  WHERE table_name = 'mytable'
IcedDante
quelle