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, '');

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.


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'
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.