2016-11-23 3 views
0

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

Каждый раз, когда запускается мое приложение, я хотел бы спросить базу данных «эй, какое значение имеет наибольшее значение id во всех ваших таблицах?». Так что с этого момента я могу автоматически увеличивать его в своих сущностях.

Я пробовал: SELECT MAX(id) FROM (SHOW TABLES), но, конечно, это не сработало. Я хотел бы использовать запрос, где мне не нужно указывать в запросе, какие у меня есть таблицы, потому что я не хочу менять запрос каждый раз, когда добавляю таблицу в микс.

Может ли кто-нибудь помочь мне с этим?

+1

Это плохая идея imo и вызовет у вас проблемы с условиями гонки. –

+0

И нет способа решить это? – Evert

+1

Ну, это часть автоматического приращения. Идентификатор создается базой данных. Ваш случай использования немного расплывчато, чтобы прокомментировать вашу конкретную ситуацию. Однако это звучит как проблема X-Y. Что вы на самом деле пытаетесь исправить? –

ответ

0

Вы ищете последовательность, предоставляющую вам уникальные идентификаторы, независимо от того, используете ли вы их или нет. MySQL не использует это напрямую, но для таблицы с автоматически увеличивающимся идентификатором (для каждой новой записи создается новый ID).

Таким образом, вы могли бы, вероятно, создать фиктивную таблицу только для цели создания идентификаторов:

create table ids (id bigint not null auto_increment, primary key(id)); 

Добавить запись

insert into ids values(); 

и попросить нового ID

select last_insert_id(); 

работать с.

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