Таблица: [sql]create table properties(id int unsigned auto_increment, object int unsigned, name varchar(100), primary key(id, object));[/sql] Инсерты: [sql]insert into properties (object, name) values (28, 'Свойство номер один объекта 28'); insert into properties (object, name) values (28, 'Свойство номер два объекта 28'); insert into properties (object, name) values (35, 'Свойство номер один объекта 35'); insert into properties (object, name) values (44, 'Свойство номер один объекта 44'); insert into properties (object, name) values (44, 'Свойство номер два объекта 44');[/sql] Результат: [sql]select * from properties;[/sql] Код (Text): +----+--------+--------------------------------+ | id | object | name | +----+--------+--------------------------------+ | 1 | 28 | Свойство номер один объекта 28 | | 2 | 28 | Свойство номер два объекта 28 | | 3 | 35 | Свойство номер один объекта 35 | | 4 | 44 | Свойство номер один объекта 44 | | 5 | 44 | Свойство номер два объекта 44 | +----+--------+--------------------------------+ Что хотелось/ожидалось: Код (Text): +----+--------+--------------------------------+ | id | object | name | +----+--------+--------------------------------+ | 1 | 28 | Свойство номер один объекта 28 | | 2 | 28 | Свойство номер два объекта 28 | | 1 | 35 | Свойство номер один объекта 35 | | 1 | 44 | Свойство номер один объекта 44 | | 2 | 44 | Свойство номер два объекта 44 | +----+--------+--------------------------------+ Т.е. хотелось бы чтобы авто-инкремент работал с учетом значений первичных ключей Лучшее из решений, что я нашел: [sql]insert into properties (id, object, name) select ifnull(max(id)+1,1), 28, "Свойство номер один объекта 28" from properties where object=28 for update;[/sql] То, что max(id) действительно max на момент вставки гарантируется выражением (for update), которое начинает транзакцию. Соответственно работает только с движками бд, поддерживающими транзакции. Может, кому-то будет полезно… ЗЫ: только заметил: круглое число постов: 1024
Дело не в том, что мне нужен какой-то порядок в числах. Проблема в том, что при количестве объектов в несколько миллионов штук и количестве свойств в количестве нескольких десятков тысяч, которые еще и удаляются, добавляются и т.д. 4 миллиарда быстро заканчиваются Поэтому и используется составной первичный ключ.
dark-demon А я и не жалуюсь. Мне просто не нравится как оно работает в MySQL. Для себя приемлимое решение нашел, поделился. Все armadillo это трудно определить Сам процесс mysqld занимает порядка 70 метров. Однако кеш файловой системы занимает всю оставшуюся память.