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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> избежать обнуления id, Когда обнуляется id с авто инкрементом 
V
    Опции темы
Dima50
Дата 8.7.2009, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Всем доброго дня.

У меня примитивная таблица на 4 поля. С id int(11) RRI auto_increment. Составных ключей нет. По идее id не должно обнуляться при удалении всех строк. Таким образом id не должны повторяться. И если статья с определенным id удалена, то ее не заменит другая статья по этой же ссылке.

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

Не понимаю что могло произойти. Не подскажите.
PM MAIL   Вверх
lelik133
Дата 9.7.2009, 09:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 517
Регистрация: 5.2.2003
Где: Москва

Репутация: 2
Всего: 14



и когда это произошло после удаления отдельной строки или очистки всей таблицы?


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


Шустрый
*


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

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



Цитата(lelik133 @ 9.7.2009,  09:02)
и когда это произошло после удаления отдельной строки или очистки всей таблицы?

Это произошло при удаление отдельных полей. id было порядка 75,  я убирал записи по одной таблица отчистилась, потом обратил внимание что id==5. 

оппппа...

Вот вчера отчищал таблицу раз пять через "DELETE FROM news where 1=1" и ничего Id не обнулялось. На ночь выключил комп, утром включил, зашел  в форум решил проверить опять удалил все добавил поля, и id вновь обнуленный. 
Вот такая вот новость.

может это от того что компьютер выключается и презапускается MySQL? раньше я на такое внимание не обращал чтоб id обнулялись.

Не хорошо получается. Выходит по ссылке на удаленную статью челоевек может попасть не на уведомление об удалении, а на новую статью под старым id.
PM MAIL   Вверх
lelik133
Дата 9.7.2009, 11:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 517
Регистрация: 5.2.2003
Где: Москва

Репутация: 2
Всего: 14



нет выключении компа тут не причем.
либо где-то происходит 
Код

ALTER TABLE tbl AUTO_INCREMENT = новое_значение

либо
Код

TRUNCATE TABLE


форум какой самописный или нет?
PM ICQ   Вверх
Dima50
Дата 9.7.2009, 11:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Да все самописное. Так как начал писать с 0, то уверен на 100% что АLTER TABLE не присутствует.

Потому что его вообще в принципе нет.  в начале написания работы с табличкой базы данных я создал 3 функции посылающие запрос.
1) добавления 
2) удаление одной сточки по id
3) естественно получение того что создано

потом когда обнаружил странное обнуление. Добавил функцию удаление всех строк из таблицы.

Есть только INSERT INTO, SELECT, и DELETE.  Вся работа с таблицей в одном файле, я на всякий случай перепроверил, изменения в существующие строки таблицы  я точно не добавлял.

И TRUNCATE table тоже нет.

P.S.

Настоящая мистика  smile 


Это сообщение отредактировал(а) Dima50 - 9.7.2009, 12:59
PM MAIL   Вверх
bars80080
Дата 9.7.2009, 14:12 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 5
Всего: 315



всё же приведите show create table
PM MAIL WWW   Вверх
Dima50
Дата 9.7.2009, 19:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Код

mysql> show create table news \G
*************************** 1. row ***************************
       Table: news
Create Table: CREATE TABLE `news` (
  `id` int(11) NOT NULL auto_increment,
  `caption` varchar(255) NOT NULL,
  `news_date` date default NULL,
  `description` text,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

PM MAIL   Вверх
Бонифаций
Дата 10.7.2009, 04:15 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 827
Регистрация: 15.9.2005
Где: Brisbane

Репутация: 20
Всего: 40



У вас таблица типа innodb. Кторый (в отличии от myisam,) хранит счетчик автоинкремента в памяти. Поэтому при перезапуске сервера этот счетчик (один раз ) считается как select max(автоинкрементально поле), а затем уж при вставках значение берется из памяти.

Поэтому в innodb если вы удалили хвостовые записи и перезаупстили сервер, автоинкрементальный счетчик откатится.


--------------------
 Бонифаций.
 
PM MAIL ICQ Skype GTalk Jabber YIM   Вверх
Dima50
Дата 10.7.2009, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Бонифаций @  10.7.2009,  04:15 Найти цитируемый пост)
У вас таблица типа innodb.



Скажите, а есть ли возможность изменить тип движка таблицы не удаляя существующую таблицу?
 В операторе ALTER TABLE я не нашел возможности менять ENGINE.

P.S. 
За ответ благодарствую. Хотел добавить репутации, но к сожалению постов у меня маловато для этого.
PM MAIL   Вверх
Бонифаций
Дата 10.7.2009, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 827
Регистрация: 15.9.2005
Где: Brisbane

Репутация: 20
Всего: 40



Код

mysql> create table aa (i  int) engine=myisam;
Query OK, 0 rows affected (0,00 sec)

mysql> show create table aa\G
*************************** 1. row ***************************
       Table: aa
Create Table: CREATE TABLE `aa` (
  `i` int(11) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
1 row in set (0,00 sec)

mysql> alter table aa engine=innodb;
Query OK, 0 rows affected (0,02 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> show create table aa\G
*************************** 1. row ***************************
       Table: aa
Create Table: CREATE TABLE `aa` (
  `i` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0,00 sec)





В документации на ALTER TABLE оно спрятано в слове table_options




--------------------
 Бонифаций.
 
PM MAIL ICQ Skype GTalk Jabber YIM   Вверх
Dima50
Дата 10.7.2009, 15:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



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


 




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


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

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