FEHLER 1364 (HY000): Feld „id“ hat keinen Standardwert; während vorher alles normal warMySql

MySQL DBMS-Forum
Anonymous
 FEHLER 1364 (HY000): Feld „id“ hat keinen Standardwert; während vorher alles normal war

Post by Anonymous »

Mein SQL wirft plötzlich Folgendes aus:

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;
Ich habe versucht:

Code: Select all

INSERT INTO table1 (id ,company_id,account_id,amount) VALUES (516823,1,1,1);
Und:

Code: Select all

INSERT INTO table1 (company_id,account_id,amount) VALUES (1,1,1);
Immer noch

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;
mit Trigger wie

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
Das Problem? Ja, die ID in der Protokollierung ist nicht null und ich habe die ID nicht zum Trigger hinzugefügt; Zu meiner Verteidigung muss ich sagen, dass der Spaltenname die gleiche „ID“ ist, also wusste ich es nicht.
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.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post