2015-01-14 5 views
0

Можно ли получить максимальное значение ключевого столбца, увеличить его и вставить его в качестве нового значения в базе данных, как это (псевдо-SQL)максимальное значение не столбце autonincrement в обновлении запроса

insert into mytable (mykeycolumn,col1,col2) 
    values((max(mykeycolumn)+1),'val1','val2'); 
+2

Почему вы это делаете, когда вы можете просто установить его, чтобы быть 'auto_increment'? –

+0

Поскольку у меня уже есть таблица в производстве и не могу ее изменить – Ferenjito

+0

Попробуйте ввести значения mytable (mykeycolumn, col1, col2) ((SELECT max (mykeycolumn) +1 FROM mytable), 'val1', 'val2'); ' –

ответ

1

Да, вы INSERT из SELECT, но ваши фиксированные поля должны "исходить от SELECT", а также, как например:

INSERT INTO mytable (mykeycolumn, col1, col2) 
    SELECT MAX(mykeycolumn)+1, 'val1', 'val2' 
    FROM mytable; 

В дополнение: как a_horse_with_no_name указал, MAX() + 1 может вызвать проблемы, если у вас есть одновременные транзакции в mytable. В какой-то момент два одинаковых значения mykeycolumn будут сгенерированы, и вы получите сообщение об ошибке. Идеальное решение состоит в том, чтобы преобразовать таблицу в таблицу auto_increment.

+1

Поскольку заявление требуется только один раз для простой операции импорта, я могу проигнорировать это, но спасибо за информацию! – Ferenjito

1

Вы можете с этим:

INSERT INTO mytable (mykeycolumn,col1,col2) VALUES 
    ((SELECT MAX(mykeycolumn) FROM mytable AS foo)+1,'val1','val2'); 
0

попробовать это

INSERT INTO mytable (mykeycolumn, col1, col2) 
    SELECT SCOPE_IDENTITY()+1, 'val1', 'val2' FROM mytable; 
+0

'SCOPE_IDENTITY' - это SQL Server, а не MySQL. Даже если бы он был изменен на 'LAST_INSERT_ID MySQL ', этот ответ был бы неправильным, потому что OP не работал из столбца автоинкремент. –

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