Что значит режим MySQL “NO_AUTO_VALUE_ON_ZERO”?

247
26 ноября 2016, 20:20

Что значит режим MySQL NO_AUTO_VALUE_ON_ZERO?

SET SQL_MODE='NO_AUTO_VALUE_ON_ZERO'

Какие настройки изменятся в базе данных после установки этого режима?

P.S. документацию читала, но на английском, и поняла очень смутно. Будет здорово, если будут ссылки на русскую документацию...

Answer 1
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 вообще пытаться присваивать явные значения.

READ ALSO
как создать мессенджер для android? [закрыто]

как создать мессенджер для android? [закрыто]

Здравствуйте / Есть ли хорошие и ясный учебник? Или , по крайней мере , Кто-нибудь можете помочь мне с говоря мне , где я должен начать с создать...

557
Отношения между таблицами SQL

Отношения между таблицами SQL

Имеются 4 таблицы: Магазины, Учебники, Поставки, Школы

232
Выбрать записи не содержащие теги ( sql )

Выбрать записи не содержащие теги ( sql )

Есть 3 таблицы: посты ( post ) теги ( tag ) связь тегов и постов ( post_tag )

298