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.