Реклама на сайте Advertise with us
Тема: Auto incriment в mysql Расширенный поиск по форуму
 
Внимание! В связи с устареванием топика эта страница была взята из кэша.
Автор Сообщение
Информация о пользователе atrius


Зарегистрирован: 24.06.03
Сообщения: 85
Ссылка на сообщениеДобавлено: 07/04/04 в 13:16     

Совсем я глупый стал или старый icon_sad.gif
Есть таблица типа field1, field2, field3
field1 - integer, autoincrement. Остальные - текстовые поля.
Добавляю в базу так: Insert into table values (0,'v1','v2');
Поле field1 замечательно инкременируется само и все хорошо. Но когда делаем Delete * from table, а потом опять Insert новых данных, то происходит забавная вещь: поле field1 начинает нумерацию не с 1, а с последнего номера, который был до выполнения Delete. Как бы сделать так, чтобы нумерация начиналась с начала?
Спасибо за внимание.

K началу

 
Информация о пользователе Core


Зарегистрирован: 07.09.03
Сообщения: 808
Ссылка на сообщениеДобавлено: 07/04/04 в 13:33     

atrius писал:
Совсем я глупый стал или старый icon_sad.gif
Есть таблица типа field1, field2, field3
field1 - integer, autoincrement. Остальные - текстовые поля.
Добавляю в базу так: Insert into table values (0,'v1','v2');
Поле field1 замечательно инкременируется само и все хорошо. Но когда делаем Delete * from table, а потом опять Insert новых данных, то происходит забавная вещь: поле field1 начинает нумерацию не с 1, а с последнего номера, который был до выполнения Delete. Как бы сделать так, чтобы нумерация начиналась с начала?
Спасибо за внимание.


А никак... :-) А зачем тебе? какая разница? Насильно передавай ему 1,2,3 и т.д.

K началу

 
Информация о пользователе atrius


Зарегистрирован: 24.06.03
Сообщения: 85
Ссылка на сообщениеДобавлено: 07/04/04 в 13:44     

На самом деле нумерация не так важна, просто за рамки integer выйдет скоро icon_smile.gif Вот я и подумал, может есть какое-нибудь красивое решение. Как-то не хочется делать Drop | Create table
icon_smile.gif

K началу

 
Информация о пользователе Core


Зарегистрирован: 07.09.03
Сообщения: 808
Ссылка на сообщениеДобавлено: 07/04/04 в 14:07     

atrius писал:
На самом деле нумерация не так важна, просто за рамки integer выйдет скоро icon_smile.gif Вот я и подумал, может есть какое-нибудь красивое решение. Как-то не хочется делать Drop | Create table
icon_smile.gif


Поставь тип поля не int а big int и забудь ... icon_smile.gif

K началу

 
Информация о пользователе WEBoy


Зарегистрирован: 10.04.03
Сообщения: 79
Ссылка на сообщениеДобавлено: 07/04/04 в 14:12     

TRUNCATE TABLE table_name

K началу

 
Информация о пользователе Core


Зарегистрирован: 07.09.03
Сообщения: 808
Ссылка на сообщениеДобавлено: 07/04/04 в 14:14     

WEBoy писал:
TRUNCATE TABLE table_name


Молодца! :-)

K началу

 
Информация о пользователе Jark


Зарегистрирован: 05.01.04
Сообщения: 92
Ссылка на сообщениеДобавлено: 07/04/04 в 16:49     

Вот это должно сработать:

Код:

ALTER TABLE `table_name` AUTO_INCREMENT = 1


Хотя после DELETE * и так должно всё ОК быть...

K началу

 
Информация о пользователе fly2k


Зарегистрирован: 17.03.03
Сообщения: 45
Ссылка на сообщениеДобавлено: 07/04/04 в 17:20     

atrius писал:
Совсем я глупый стал или старый icon_sad.gif


Скорее молодой, раз таким вещам удивляешься icon_smile.gif
Все по уму именно так и должно быть. Сам задумайся - для чего нужны автоинкременты? Как правило для primary key, то есть чтобы на запись можно было ссылаться (скажем из другой таблички) по этому _уникальному_ номеру... Ну а дальше есть два варианта:
1) Если DB взрослая и позволяет работать с тригерами, то как правило там вместо автоинкремента используются или тригеры или последовательности. В этом случае ты можешь сам написать тригер, который и будет рулить этими уникальными ключами как тебе надо, при этом поддерживая ссылочную целостность данных (удаляю или меняя автоматом данные в других таблицах)
2) Если база игрушечная(Mysql) то остается только надеятся что все будет целым и правильным icon_smile.gif А представь если у тебя была запись с примари кей 5, ты ее удалил, и новая запись тоже получит номер 5, правильно ли будет что на нее будут ссылаться те, которые раньше ссылались на предыдущую?

Так что все прально!

K началу

 
Информация о пользователе sexvendor


Зарегистрирован: 07.10.03
Сообщения: 66
Ссылка на сообщениеДобавлено: 08/04/04 в 06:01     

fly2k писал:
Скорее молодой, раз таким вещам удивляешься icon_smile.gif
Все по уму именно так и должно быть. Сам задумайся - для чего нужны автоинкременты? Как правило для primary key, то есть чтобы на запись можно было ссылаться (скажем из другой таблички) по этому _уникальному_ номеру... Ну а дальше есть два варианта:
1) Если DB взрослая и позволяет работать с тригерами, то как правило там вместо автоинкремента используются или тригеры или последовательности. В этом случае ты можешь сам написать тригер, который и будет рулить этими уникальными ключами как тебе надо, при этом поддерживая ссылочную целостность данных (удаляю или меняя автоматом данные в других таблицах)
2) Если база игрушечная(Mysql) то остается только надеятся что все будет целым и правильным icon_smile.gif А представь если у тебя была запись с примари кей 5, ты ее удалил, и новая запись тоже получит номер 5, правильно ли будет что на нее будут ссылаться те, которые раньше ссылались на предыдущую?
Так что все прально!


По первому пункту не очень понял, причём тут замена автоинкремента тригером. Ссылочной целосностью рулят, как правило, FOREIGN KEYS,
и в MySQL они есть для таблиц типа InnoDB, причем с вариантами поведений при UPDATE и DELETE (почти тригеры). Тригеры позволяют не только следить за целостностью данных, а так же выполнять хуеву тучу всяких действий. Конечно этих вкусностей, таких как тригеры, условия на значения полей, хранимые процедуры, которые есть в большенстве бд Enterprise класса, MySQL'ю ой как не хватает.
Я вообще после 3 лет програмирования под MSSQL вообще зачастую чуствую себя беспомощным из-за отсутствия этих инструментов. Можно конечно реализовать тоже самое с помощью скриптов, но по хорошему многие вещи должны делаться на уровне базы данных.

K началу

 
Информация о пользователе Quantum[Tau]


Зарегистрирован: 15.03.04
Сообщения: 618
Ссылка на сообщениеДобавлено: 08/04/04 в 16:58     

MySQL не предназначен для замены взрослых реляционных баз данных уровня предприятия и никогда так не позиционировался. "Если бы у бабушки был х#й она была бы дедушкой".

В своей нише он лучший. Если жизнь не мила без триггеров, хранимых процедур и прочих полезных примочек, а денег на Oracle или другие серьезные СУБД нет, то юзайте фришный стабильный PostgreSQL.

K началу

 
Информация о пользователе Jark


Зарегистрирован: 05.01.04
Сообщения: 92
Ссылка на сообщениеДобавлено: 08/04/04 в 22:59     

Цитата:

...то юзайте фришный стабильный PostgreSQL

и узнайте что происходит с триггерами и прочими "прелесями" на большом числе запросов icon_biggrin.gif

K началу

 
Информация о пользователе Quantum[Tau]


Зарегистрирован: 15.03.04
Сообщения: 618
Ссылка на сообщениеДобавлено: 08/04/04 в 23:28     

Jark писал:
и узнайте что происходит с триггерами и прочими "прелесями" на большом числе запросов icon_biggrin.gif


А что с ними происходит? icon_smile.gif Аппетиты к памяти и остальному железу растут или целостность данных нарушается? О втором никогда не слышал (postgreSQL).

K началу

 
Текстовая реклама в форме ответа
Заголовок и до четырех строчек текста
Длина текста до 350 символов
Купить рекламу в этом месте!
Внимание! В связи с устареванием топика эта страница была взята из кэша.

Спонсор раздела Стань спонсором этого раздела!

Реклама на сайте Advertise with us

Опросы

Рецепт новогоднего блюда 2022



Обсудите на форуме обсудить (11)
все опросы »