ОШИБКА 1364 (HY000): поле «id» не имеет значения по умолчанию при вставке данных
Все нормально, пока мое автоматическое приращение не достигло 516822, поэтому оно далеко от предела, до этого я менял только триггер, который запускал «BEFORE INSERT ON table1», и внутри говорилось триггер. Я ничего не делал с идентификатором.
Я отменил триггер, и ничего не изменилось.
Я пытался удалить автоматическое приращение, удалить первичный ключ и установить значение NULL, удалить автоматическое приращение, добавить значение по умолчанию и т. д., но все равно получил:
ОШИБКА 1364 (HY000): поле «id» не имеет значения по умолчанию
Мой SQL такой:
Код: Выделить всё
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;
Код: Выделить всё
INSERT INTO table1 (id ,company_id,account_id,amount) VALUES (516823,1,1,1);
Код: Выделить всё
INSERT INTO table1 (company_id,account_id,amount) VALUES (1,1,1);
ОШИБКА 1364 (HY000): поле «id» не имеет значения по умолчанию
ОБНОВЛЕНИЕ: я удалил триггер, и он сработал! Я в замешательстве, я ничего не менял (я вернул его обратно) и все еще не работает, но когда я удаляю его, я могу вставить данные;
У меня есть триггер, который также создает данные для целей регистрации для другой таблицы с определением, например
Код: Выделить всё
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;
Код: Выделить всё
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
Если я это знаю, то почему я не уловил это, сынок? идентификатор поля в реальности ведения журнала не существовал раньше, он произошел из неполной/плохо написанной миграции laravel, которую я по незнанию отправил в производство и перенес, не зная
Почему я не проверил это? Я сделал, и не было никакого проблема, я перенес эту вещь задолго до ошибки, 'id' при регистрации стал равен 0.
Теперь вопрос: почему?
Изменить: я думаю, это из-за строгого режима? но я не трогал это в конфигурации cPanel, поэтому проверил файл data.php в приложении Laravel, и оказалось, что для параметра strict установлено значение false (это перезаписывает конфигурацию cPanel?). Мы только начали мигрировать приложение с Laravel 8 на Laravel 12, поэтому здесь может быть много надзора, а предыдущие разработчики обладали бесконечной мудростью выйти из игры без какой-либо документации и большого количества неоптимизированного кода с большим количеством «клейкой ленты».
Подробнее здесь: https://stackoverflow.com/questions/798 ... erything-n
Мобильная версия