Что значит режим MySQL NO_AUTO_VALUE_ON_ZERO?
SET SQL_MODE='NO_AUTO_VALUE_ON_ZERO'
Какие настройки изменятся в базе данных после установки этого режима?
P.S. документацию читала, но на английском, и поняла очень смутно. Будет здорово, если будут ссылки на русскую документацию...
create table test_ai(id int auto_increment primary key, val int) engine=innodb;
insert into test_ai (id, val) values (0, 1);
Вот какой результат будет в поле id и зависит от этого sql_mode:
Без NO_AUTO_VALUE_ON_ZERO будет сгенерировано следующее значение auto_increment. С установленным флагом NO_AUTO_VALUE_ON_ZERO будет записан именно 0.
mysql> SET SQL_MODE='';
Query OK, 0 rows affected (0,00 sec)
mysql> insert into test_ai (id, val) values (0, 1);
Query OK, 1 row affected (0,01 sec)
mysql> SET SQL_MODE='NO_AUTO_VALUE_ON_ZERO';
Query OK, 0 rows affected (0,00 sec)
mysql> insert into test_ai (id, val) values (0, 2);
Query OK, 1 row affected (0,01 sec)
mysql> select * from test_ai;
+----+------+
| id | val |
+----+------+
| 0 | 2 |
| 1 | 1 |
+----+------+
2 rows in set (0,00 sec)
mysql> insert into test_ai (id, val) values (0, 3);
ERROR 1062 (23000): Duplicate entry '0' for key 'PRIMARY'
На запросы такого вида настройка не влияет:
insert into test_ai (id, val) values (NULL, 1);
insert into test_ai (val) values (1);
Общий смысл: не надо полю auto_increment вообще пытаться присваивать явные значения.
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники