ОШИБКА 1364 (HY000): Поле «id» не имеет значения по умолчанию; хотя раньше все было нормальноMySql

Форум по Mysql
Ответить
Anonymous
 ОШИБКА 1364 (HY000): Поле «id» не имеет значения по умолчанию; хотя раньше все было нормально

Сообщение Anonymous »

Мой SQL внезапно выдает:

ОШИБКА 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «MySql»