powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Уникальный номер (нестандартный autoincrement), нужен совет
18 сообщений из 43, страница 2 из 2
Уникальный номер (нестандартный autoincrement), нужен совет
    #36517158
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RXLmiksoft,

Что делает решение еще менее универсальным и повышает вероятность появления трудно находимых ошибок.Я уже высказывал свое мнение , что идеального решения тут существовать не может. Т.е. остается только выбирать из неидеальных.
LOCK TABLE - одно из таких решений. И не такое уж плохое, если в обсуждаемой транзакции не происходит больше ничего, кроме инсерта.
Другое решение , которое предложил Alex_Ustinov, более подходяще в случае сложных и/или длительных транзакций.
А больше серьезных вариантов я в топике не вижу, возможно, пропустил.
...
Рейтинг: 0 / 0
Уникальный номер (нестандартный autoincrement), нужен совет
    #36517207
RXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoft,

Мое предложение .
Позжее опишу подробно.
...
Рейтинг: 0 / 0
Уникальный номер (нестандартный autoincrement), нужен совет
    #36517249
RXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Более надежным решением я бы назвал такое, которое можно поместить в функцию или процедуру и которое не мешало бы транзакции и не зависело бы от нее. Еще более идеальный вариант должен корректно реплицироваться.
...
Рейтинг: 0 / 0
Уникальный номер (нестандартный autoincrement), нужен совет
    #36517259
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RXLmiksoft,

Мое предложение .
Позжее опишу подробно.Имхо, GET_LOCK/RELEASE_LOCK лучше блокировки таблицы только тем, что не блокирует апдейты этой же таблицы. И хуже тем, что в случае появления двух таких "дурацких" таблиц в системе и, одноврменно, в случае необходимости работать сразу с обеми таким таблицами из одной сесси, они будут мешать друг другу.

Кстати, вопрос топикстартеру - а апдейты этой таблицы бывают?
...
Рейтинг: 0 / 0
Уникальный номер (нестандартный autoincrement), нужен совет
    #36517680
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RXLБолее надежным решением я бы назвал такое, которое можно поместить в функцию или процедуру и которое не мешало бы транзакции и не зависело бы от нее. Еще более идеальный вариант должен корректно реплицироваться.вижу только один выход, чтобы не было "общей точки блокировки", как заметил miksoft - для КАЖДОГО СИКВЕНСА создавать отдельную таблицу MyIsam
seq_mytable(
curr_value BIGINT UNSIGNED NOT NULL,
inc_value BIGINT UNSIGNED NOT NULL);
здесь уже можно лочить почти спокойно
...
Рейтинг: 0 / 0
Уникальный номер (нестандартный autoincrement), нужен совет
    #36517683
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
епрст, забыл добавить
или же использовать общую таблицу-InnoDB для всех сиквенсов но только в режиме READ_UNCOMMITED (но могут возникнуть дырки в СиКВенсе)
...
Рейтинг: 0 / 0
Уникальный номер (нестандартный autoincrement), нужен совет
    #36517690
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кстати, по-моему насколько помню в Оракле так и происходит:
если после Инсерта идет откат транз-ии - задействованный в триггере (до 11g) сиквенс все-равно увеличивается.
...
Рейтинг: 0 / 0
Уникальный номер (нестандартный autoincrement), нужен совет
    #36517755
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_Ustinovвижу только один выход, чтобы не было "общей точки блокировки", как заметил miksoft - для КАЖДОГО СИКВЕНСА создавать отдельную таблицу MyIsam
seq_mytable(
curr_value BIGINT UNSIGNED NOT NULL,
inc_value BIGINT UNSIGNED NOT NULL);
здесь уже можно лочить почти спокойноЗависит от характера данных. Если значение cat во вставляемых записях меняется редко, например, раз в день и одно на всю систему, то этот вариант ситуацию не улучшит.
...
Рейтинг: 0 / 0
Уникальный номер (нестандартный autoincrement), нужен совет
    #36518337
myproga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кстати, вопрос топикстартеру - а апдейты этой таблицы бывают?
Да, конечно, хотя и не часто.

Как я понял, все решения сводятся к созданию дополнительной MYISAM таблицы.
Если создать MYISAM таблицу соответствий `cat`, `последнее значение`, то ее в любом случае надо блокировать, что тоже может создать проблемы. Создавать полный дубликат таблицы `cat`, `id` с primary key (`cat`, `id`) не рационально...

P.S.
Что касается сикуенсов, то насколько я помню, их в Postgres, например, нужно создавать для КАЖДОЙ последовательности, что решение не упрощает, т.к. `cat` может периодически появляться новый. Могу ошибаться, т.к. с Postgres работал давно. Если же sequence`ом можно генерировать для разных `cat`, то я бы перешел на Postgres :)
...
Рейтинг: 0 / 0
Уникальный номер (нестандартный autoincrement), нужен совет
    #36518401
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
myprogaКак я понял, все решения сводятся к созданию дополнительной MYISAM таблицы.
Если создать MYISAM таблицу соответствий `cat`, `последнее значение`, то ее в любом случае надо блокировать, что тоже может создать проблемы.Блокировать MYISAM таблицу не нужно, она и так блокируется на время инсерта.
...
Рейтинг: 0 / 0
Уникальный номер (нестандартный autoincrement), нужен совет
    #36518418
myproga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft,

Блокировать MYISAM таблицу не нужно, она и так блокируется на время инсерта.
Нужно, если таблица:

`cat` | `last_id`, а `cat` - уникальный ключ в этой таблице.

Т.е. не дублирующая основную, а содержащая только счетчик для каждого `cat`.
...
Рейтинг: 0 / 0
Уникальный номер (нестандартный autoincrement), нужен совет
    #36518431
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
myprogamiksoft,

Блокировать MYISAM таблицу не нужно, она и так блокируется на время инсерта.
Нужно, если таблица:

`cat` | `last_id`, а `cat` - уникальный ключ в этой таблице.

Т.е. не дублирующая основную, а содержащая только счетчик для каждого `cat`.Все равно не вижу зачем ее специально блокировать.
...
Рейтинг: 0 / 0
Уникальный номер (нестандартный autoincrement), нужен совет
    #36518806
RXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
myproga,

Блокировать не надо.

Код: plaintext
1.
2.
3.
INSERT INTO tab (id) VALUES (NULL); -- по окончанию уже имеем LAST_INSERT_ID()
DELETE FROM tab WHERE id < LAST_INSERT_ID(); -- удалить ненужное
SELECT LAST_INSERT_ID(); -- считать наше
...
Рейтинг: 0 / 0
Уникальный номер (нестандартный autoincrement), нужен совет
    #36518810
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В ЛОКЕ
INSERT INTO CLONE_MY_TAB ( cat ,id) VALUES ("cat", NULL);
можно пот'ом
DELETE
возвращаем LAST_INSERT_ID()

нет времени пока разбираться...
...
Рейтинг: 0 / 0
Уникальный номер (нестандартный autoincrement), нужен совет
    #36519383
myproga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alex_Ustinov, RXL,

Похоже, что так и придется делать, раз лучшего решения нет.
Всем спасибо, кто принял участие в обсуждении.
...
Рейтинг: 0 / 0
Уникальный номер (нестандартный autoincrement), нужен совет
    #36519390
myproga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
RXL,

Блокировать не надо.
В этом случае нет, конечно.
...
Рейтинг: 0 / 0
Уникальный номер (нестандартный autoincrement), нужен совет
    #36520786
RXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
myproga,

Кстати, если включить эти операторы в функцию, то в запросе с ее участием все таблицы, использованные в функции блокируются для записи. Включая и те, из которых производится только чтение.

Скажем, если сделать генератор в UDF, то блокировки можно избежать. Жаль вот только, что интерфейс UDF такой примитивный, а то столько дел можно было бы натворить... :)
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Уникальный номер (нестандартный autoincrement), нужен совет
    #39133564
skywriter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
javajdbcmyproga,

1. серилизовать доступ к раздатчику ИД -- например сериализе в жаве

2. предпологаю (неплохо бы доказать) что такой вариант будет атомарно-безопасным:

insert into ABC
values (new_val1, new_val2, (select max(id) from ABC where cat=CAT1) + 1)

если будет ругатся про мутируюшую таблицу, то сделать ето в подселекте

Объясните, почему решение с подзапросом (как вариант, оформленным в функцию) - плохо? Разве такой insert не будет обработан как транзакция?
...
Рейтинг: 0 / 0
18 сообщений из 43, страница 2 из 2
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Уникальный номер (нестандартный autoincrement), нужен совет
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]