FEHLER 1048 (23000) Die Spalte darf nicht NULL sein, es werden jedoch gültige Daten eingefügt

Es gibt Unmengen dieser Posts auf Stack Overflow, aber seit den 20 oder so habe ich mir angesehen, dass es sich entweder um Codierungsfehler bei der Anbindung an MySQL handelt (was ich nicht versuche) oder einfach um Nullwerte, deren Tabelle jedoch falsch definiert wurde .

In MySQL 5.6.19 wird ein Fehler angezeigt, bei dem eine Spalte keinen Nullwert haben darf. Dies ist in Ordnung, da es keinen Nullwert haben sollte. Hier ist die Tabelle unten.

    mysql> describe z; 
    +-------+----------+------+-----+---------+----------------+
    | Field | Type     | Null | Key | Default | Extra          |
    +-------+----------+------+-----+---------+----------------+
    | a     | int(11)  | NO   | PRI | NULL    | auto_increment |
    | data  | char(30) | NO   |     | NULL    |                |
    | t     | datetime | YES  |     | NULL    |                |
    +-------+----------+------+-----+---------+----------------+
    3 rows in set (0.00 sec)

Mein Problem ist, dass ich gültige Daten einfüge ....

    mysql> insert into z (data, t) values('helloworld', sysdate());
    ERROR 1048 (23000): Column 'data' cannot be null

Es gibt noch eine andere Information, die von Belang sein könnte ... oder auch nicht.

Ich habe einen Auslöser und eine Prozedur, die bei der Implementierung von Einfügungen in diese Spalte ausgeführt werden. Ich sehe jedoch nicht, dass dies ein Problem sein sollte, da der Trigger nach Abschluss der insert-Anweisung aktiviert wird.

Hier ist der Auslöser:

    mysql> show triggers\G
    *************************** 1. row ***************************
                 Trigger: insertuser
                   Event: INSERT
                   Table: z
               Statement: begin
    call triggerproc(sysdate(),user(),(select data from z where a = last_insert_id()));
    end
                  Timing: AFTER
                 Created: NULL
                sql_mode: NO_ENGINE_SUBSTITUTION
                 Definer: root@localhost
    character_set_client: utf8
    collation_connection: utf8_general_ci
      Database Collation: latin1_swedish_ci
    1 row in set (0.00 sec)

Und die Vorgehensweise:

    mysql> show create procedure triggerproc\G
    *************************** 1. row ***************************
               Procedure: triggerproc
                sql_mode: NO_ENGINE_SUBSTITUTION
        Create Procedure: CREATE DEFINER=`root`@`localhost` PROCEDURE `triggerproc`(in a datetime, in b char(30), in c char(30))
    begin
    insert into record (t,u,data) values(a,b,c);
    end
    character_set_client: utf8
    collation_connection: utf8_general_ci
      Database Collation: latin1_swedish_ci
    1 row in set (0.00 sec)

Nur zum besseren Verständnis werde ich auch die Definition für die Aufzeichnungstabelle aufnehmen.

    mysql> desc record;
    +-------+----------+------+-----+---------+-------+
    | Field | Type     | Null | Key | Default | Extra |
    +-------+----------+------+-----+---------+-------+
    | t     | datetime | NO   |     | NULL    |       |
    | u     | char(30) | NO   |     | NULL    |       |
    | data  | char(30) | NO   |     | NULL    |       |
    +-------+----------+------+-----+---------+-------+
    3 rows in set (0.00 sec)

Ich habe im MySQL-Referenzhandbuch nach Informationen gesucht, die hilfreich sein könnten, es scheint jedoch keine weiteren Details zu diesem Fehler zu geben und zu überprüfen, ob Ihre Spalte nicht als nicht null definiert ist ... oder ich es verpasst...

Auf jeden Fall wäre ich sehr dankbar, wenn mir jemand helfen könnte, entweder den Grund für diesen Fehler herauszufinden oder wie ich den Grund finden kann.

Danke im Voraus.

EDIT: Meine Frage wurde wunderbar von beantwortetTheConstructor Er teilte mir mit, dass der Operator NEW.column verwendet werden kann, um neue Informationen aus einer Spalte abzurufen, die gerade durch einen Trigger eingefügt wurde. Darüber hinaus hat er eine Dokumentation erstellt, die das Verständnis dieses Problems unter erleichtertAuslösersyntax.

Ich frage mich nur, warum der Trigger, den ich hatte, mit der insert-Anweisung nicht funktioniert, obwohl er nach der vorherigen Anweisung aktiviert werden sollte, was mich glauben lässt, dass er (theoretisch) funktionieren sollte.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage