FEHLER 1364 (HY000): Feld „id“ hat beim Einfügen von Daten keinen Standardwert
Alles ist normal, bevor meine automatische Inkrementierung bei 516822 liegt, also weit vom Limit entfernt. Davor ändere ich nur einen Trigger, der „BEFORE INSERT ON table1“ ausgelöst hat, und innerhalb des Triggers I hat nichts mit der ID gemacht
Ich habe den Auslöser zurückgesetzt und nichts hat sich geändert
Ich habe versucht, die automatische Inkrementierung zu entfernen, den Primärschlüssel zu entfernen und auf nullbar zu setzen und die automatische Inkrementierung zu entfernen, einen Standardwert hinzuzufügen usw. und habe immer noch Folgendes erhalten:
FEHLER 1364 (HY000): Feld „id“ hat keinen Standardwert
Mein SQL sieht so aus:
Code: Select all
CREATE TABLE `table1` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`company_id` int(10) DEFAULT NULL,
`account_id` int(10) DEFAULT NULL,
`amount` varchar(225) DEFAULT '0',
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
Code: Select all
INSERT INTO table1 (id ,company_id,account_id,amount) VALUES (516823,1,1,1);
Code: Select all
INSERT INTO table1 (company_id,account_id,amount) VALUES (1,1,1);
FEHLER 1364 (HY000): Feld „id“ hat keinen Standardwert
UPDATE: Ich habe den Trigger gelöscht und es hat funktioniert! Ich bin verwirrt, ich habe nichts geändert (ich habe es zurückgesetzt) und es funktioniert immer noch nicht, aber wenn ich es lösche, kann ich Daten einfügen.
Ich habe einen Auslöser, der auch Daten für Protokollierungszwecke für andere Tabellen als mit Definitionen wie
erstellt
Code: Select all
CREATE TABLE `logging` (
`log_id` int(10) NOT NULL AUTO_INCREMENT,
`company_id` int(10) DEFAULT NULL,
`account_id` int(10) DEFAULT NULL,
`id` int(10) unsigned NOT NULL,
`remark` varchar(225) DEFAULT NULL',
`created_at` timestamp DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
Code: Select all
CREATE DEFINER=`root`@`localhost` TRIGGER `database`.`insert_table1` BEFORE INSERT ON `database`.`table1` FOR EACH ROW BEGIN
INSERT INTO logging (company_id, account_id, remark)
VALUES (new.company_id, new.account_id, "Log for table1");
END
Wenn ich das weiß, warum habe ich es dann nicht verstanden? Die Feld-ID in der Protokollierung existierte vorher nicht, sie stammt von einer unvollständigen/schlecht geschriebenen Laravel-Migration, die ich unwissentlich in die Produktion verschoben und migriert habe, ohne es zu wissen
Warum habe ich es nicht getestet? I tat und es gab kein Problem, ich habe das Ding lange vor dem Fehler migriert, die „ID“ bei der Protokollierung wurde einfach 0.
Jetzt ist die Frage, warum?
Bearbeiten: Ich vermute, es liegt am strikten Modus? Aber ich habe das in der cPanel-Konfiguration nicht berührt, also habe ich die Datei „database.php“ in der Laravel-App überprüft und festgestellt, dass „strict“ auf „false“ gesetzt wurde (überschreibt das die cPanel-Konfiguration?). Wir haben gerade mit der Migration der App von Laravel 8 auf Laravel 12 begonnen, daher kann es sein, dass es viel Aufsicht gibt, und die vorherigen Entwickler hatten die unendliche Weisheit, ohne jegliche Dokumentation und viel unoptimierten Code mit viel „Klebeband“ aufzuhören.
Mobile version