Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Множественный AUTO_INCREMENT, Как сделать? 
:(
    Опции темы
Wowa
Дата 12.9.2005, 12:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

Репутация: нет
Всего: 290



Мне нужно сделать так, чтобы во одном столбце мог быть множественный AUTO_INCREMENT, который бы зависил от
другой колонки "grp", которая вместе с колонкой "id" играла бы роль PRIMARY KEY.

Так можно сделать?

Код

CREATE TABLE animals (
grp ENUM('fish','mammal','bird') NOT NULL,
id MEDIUMINT NOT NULL AUTO_INCREMENT,
name CHAR(30) NOT NULL,
PRIMARY KEY (grp,id)
);


Обязательно ли таблица при этом должна быть myisam?


Вот тут кое-что есть на эту тему: http://dev.mysql.com/doc/mysql/en/example-...-increment.html
PM WWW   Вверх
Akina
Дата 12.9.2005, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Цитата(manual)
For MyISAM and BDB tables you can specify AUTO_INCREMENT on a secondary column in a multiple-column index.

Так что ответ на ПОСТАВЛЕННЫЙ вопрос - не обязательно.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Mal Hack
Дата 12.9.2005, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 8
Всего: 261



Wowa как ты собираешься делать поле счетчик, которое должно зависеть от другого поля???
PM ICQ   Вверх
Akina
Дата 12.9.2005, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Mal Hack
А почему нет? тип поля "Счетчик" - это просто особый тип значения по умолчанию для поля типа "длинное целое". В остальном он ничем не отличается от других типов - в том числе он не обязан быть индексным, имеет право быть измененным в запросе, в т.ч. получить неуникальное значение или Null...


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Mal Hack
Дата 12.9.2005, 15:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 8
Всего: 261



Akina но ключом быть обязан. В MySQL...
Код

 CREATE TABLE `45646` (
`kjg` TINYINT NOT NULL AUTO_INCREMENT
) TYPE = MYISAM 

При попытке выполнить:
Код

#1075 - Incorrect table definition; There can only be one auto column and it must be defined as a key 


Я просто понять не могу, зачем делать два именно счетчика. Тогда получается, что второе поле - не надо просто ставит АВТО_ИНКРЕНЕНТОМ, а программным способом присваивать нужное значение.

Если оставить инкренимируемым поле, то тут имхо с целостностью траблы могут быть.
PM ICQ   Вверх
Akina
Дата 12.9.2005, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Цитата(Mal @ 12.9.2005, 16:11)
но ключом быть обязан. В MySQL...

Цитата(Manual)
Примечание: в таблице может быть только один столбец AUTO_INCREMENT, и он должен быть индексирован.
[skipped]
В таблицах MyISAM и BDB можно указать вторичный столбец AUTO_INCREMENT с многостолбцовым ключом.

т.е. в ключ входить - да, но БЫТЬ ключом или входить в ПЕРВИЧНЫЙ ключ - не обязательно. Кажется...


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Wowa
Дата 12.9.2005, 19:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

Репутация: нет
Всего: 290



Цитата(Mal @ 12.9.2005, 14:11)
Я просто понять не могу, зачем делать два именно счетчика.

А кто сказал, что их два? В этом и загвоздка! Я хочу только один auto_increment ! Но ключем этот столбец сам по себе являться не будет. Ключем должна считаться связка PRIMARY KEY (grp,id)
PM WWW   Вверх
Mal Hack
Дата 12.9.2005, 19:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 8
Всего: 261



Цитата(Wowa @ 12.9.2005, 20:00)
А кто сказал, что их два? В этом и загвоздка! Я хочу только один auto_increment ! Но ключем этот столбец сам по себе являться не будет. Ключем должна считаться связка PRIMARY KEY (grp,id)

ну это пожалуйста. Только сначала придется создать таблицу с одним ключом, потом создать нужный, а потом удалить первый.

Т.к. см. выше без ключа не создастся.
PM ICQ   Вверх
Wowa
Дата 12.9.2005, 19:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

Репутация: нет
Всего: 290



Цитата(Mal @ 12.9.2005, 18:17)
Только сначала придется создать таблицу с одним ключом

конечно, ты вообще без ключа ведь попробовал. А можно сразу с двумя ключами ведь. Типа:

Цитата(Wowa @ 12.9.2005, 11:22)
CREATE TABLE animals (
grp ENUM('fish','mammal','bird') NOT NULL,
id MEDIUMINT NOT NULL AUTO_INCREMENT,
name CHAR(30) NOT NULL,
PRIMARY KEY (grp,id)
);


Только для меня тут все равно загадкой является, как будет нумероваться..
PM WWW   Вверх
Akina
Дата 12.9.2005, 19:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Цитата(Wowa @ 12.9.2005, 20:19)
для меня тут все равно загадкой является, как будет нумероваться..

Цитата
Целочисленный столбец может иметь дополнительный атрибут AUTO_INCREMENT. При записи величины NULL (рекомендуется) или 0 в столбец AUTO_INCREMENT данный столбец устанавливается в значение value+1, где value представляет собой наибольшее для этого столбца значение в таблице на момент записи. Последовательность AUTO_INCREMENT начинается с 1. See Раздел 8.4.3.31, «mysql_insert_id()». Если удалить строку, содержащую максимальную величину для столбца AUTO_INCREMENT, то в таблицах типа ISAM или BDB эта величина будет восстановлена, а в таблицах типа MyISAM или InnoDB - нет. Если удалить все строки в таблице командой DELETE FROM table_name (без выражения WHERE) в режиме AUTOCOMMIT, то для таблиц всех типов последовательность начнется заново.


Цитата
В таблицах MyISAM и BDB можно определить AUTO_INCREMENT для вторичного столбца составного ключа. В этом случае значение, генерируемое для автоинкрементного столбца, вычисляется как MAX(auto_increment_column)+1) WHERE prefix=given-prefix. Столбец с атрибутом AUTO_INCREMENT удобно использовать, когда данные нужно помещать в упорядоченные группы.
.......
Обратите внимание, что в этом случае значение AUTO_INCREMENT будет использоваться повторно, если в какой-либо группе удаляется строка, содержащая наибольшее значение AUTO_INCREMENT.



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0620 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.