primary_key по двум полям в innodb

VIRUS

Новичок
primary_key по двум полям в innodb

Здравствуйте, есть таблица InnoDB с полями: page_id (autoincrement) и lang_id.
[SQL]CREATE TABLE `pages` (
`page_id` int(10) unsigned NOT NULL auto_increment,
`lang_id` int(10) unsigned NOT NULL,
`page_alias` varchar(255) collate utf8_unicode_ci default NULL,
PRIMARY KEY (`page_id`,`lang_id`),
UNIQUE KEY `page_id` (`page_id`,`lang_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;[/SQL]
Но при добавлении двух записей с разным `lang_id`, поле `page_id` тоже разное, а мне надо что бы autoincrement по полю page_id добавлял новый идентификатор только, если поле с `lang_id` уже существует.
Тоесть при запросах:
[SQL]
INSERT INTO `pages` SET `lang_id`=1;
INSERT INTO `pages` SET `lang_id`=2;
[/SQL]
В поле `page_id` должно быть значение 1.
 

damngood

Мозг был, но ушел...
Не может быть такого с такой структурой таблиц... У тебя PRIMARY KEY ( `page_id` , `lang_id` )
 

VIRUS

Новичок
А результата можно как-то по другому добиться, если немного изменить структуру таблиц, лишь бы ее тип оставался InnoDB ?
 

damngood

Мозг был, но ушел...
Если ты хочешь иметь данные после двух вставок такие:

1 | 1
1 | 2

то у тебя не должно быть первичного (Уникального) ключа на колонках `page_id` , `lang_id`. Имхо там должен быть индекс.
 

tardis

lazy
то у тебя не должно быть первичного (Уникального) ключа на колонках `page_id` , `lang_id`
там же составной первичный ключ, так что быть он вполне может
по-моему, там просто не должно быть автоинкремента, а инкрементить надо "ручками"
 

VIRUS

Новичок
Та не, инкрементится должно автоматом. Видно для InnoDB не судьба такое сделать :(
 

damngood

Мозг был, но ушел...
VIRUS
ты сам себе противоречишь. У тебя сейчас есть автоинкремент, тебе он не нужен, потому что "В поле `page_id` должно быть значение 1", но ты пишешь, что "инкрементится должно автоматом". Ты определись. Потому как или убирай автоинкремент и увеличивай там id записи вручную, или делай апдейт после записи.

Или явно укажи в запросе INSERT INTO `pages` SET `lang_id` = 2, `page_id`=1;
 

Макс

Старожил PHPClub
в innodb такое не работает, в myisam можно

Для innodb можно сделать отдельную табличку LangCounters(lang_id, counter) и убрав auto_increment из pages
Только непонятно зачем этот геморой нужен ? Чтобы page_id покороче был ?
 

nirex

Новичок
VIRUS
такое делается если page_id с автоинкрементом в другой таблице вместе с другой служебной инфой, а в таблице pages должно остаться page_id, lang_id, и столбцы зависимые от языка (содержимое страницы, алиасы ...)
 
Сверху