2015-11-27 6 views
3

У меня есть этот столбец первичного ключа в tbl:INSERT INTO таблица DEFAULT (key_col) вставляет ноль?

`id` INT(5) unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY 

Когда я запускаю ниже запроса, ноль вставляется вместо очередного номера автоматического инкремента:

INSERT INTO `tbl` (id, col1, ...) VALUES (DEFAULT(id), "value 1", ...) 

Самое смешное, это поведение Недавнее, заставив меня задаться вопросом, какие настройки я мог бы изменить, чтобы привести к этому.

Первое, что я рассматривал, было NO_AUTO_VALUE_ON_ZERO. Я добавил это в файл sql_mode в файле конфигурации, и теперь это то, что он есть: sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_VALUE_ON_ZERO .

Я знаю, что когда DEFAULT(id) заменяется на NULL, автоматический номер генерируется, как ожидалось; но, как и сейчас, мое приложение создает первое, а не последнее.

Мои вопросы:

  1. Есть параметр, который может позволить DEFAULT(id) генерировать следующий авто номер?

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

Я прошу их, потому что это поведение (вставка нуля) не было до недавнего времени.

+0

Зачем вам нужен ПО УМОЛЧАНИЮ (id)? Не можете ли вы опустить его, чтобы поле получало значение автоматического увеличения? –

+0

какая версия mysql вы используете? –

+0

@ user3571366: Я мог бы опустить, но это потребует значительных изменений в приложении. Если бы я мог избежать этого, это было бы лучше. –

ответ

3

не указывать идентификатор в качестве столбца для столбца P. Вы просто просите о неприятностях, когда вы это делаете. Возможно, драйвер обновился на каком-то слое. Когда вы сделаете это так, как вам было, неприятности придут в нокдаун. И это произошло.

CREATE TABLE myTable999 
( id int auto_increment primary key, 
    thing varchar(100) not null, 
    colC int not null 
); 

insert myTable999(thing,colC) values ('fish',5),('mustard',11),('gators',-12); 

select * from myTable999; 
+----+---------+------+ 
| id | thing | colC | 
+----+---------+------+ 
| 1 | fish | 5 | 
| 2 | mustard | 11 | 
| 3 | gators | -12 | 
+----+---------+------+ 

Вы можете придерживаться руководства или свертывать кости. Here is the Manual. Посмотрите на первый пример.

+0

Он говорит, что это из его заявления. Он хочет сохранить то же самое и получить автоматическое приращение для работы, как обычно. –

+1

Он может отключить все свои обновления системы, чтобы заставить его приложение, как вы говорите, работать так, как оно было раньше (используя рискованные методы). Или он может сделать это правильно. Полное возмещение, если он недоволен моим ответом. – Drew

+0

@ Drew: Я ценю ваш ответ, и я знаю, что он будет работать аккуратно. Но, как я уже объяснял, код DB создается сложным приложением. Я мог бы решить изменить приложение, но не хотел бы, чтобы его можно было заставить работать. Больше, почему он работал хорошо уже много лет? –

Смежные вопросы