Странен проблем с MySQL!
5 отговора
286 прегледа
Странен проблем с MySQL!
От скоро един от PHP скриптовете ми спря да работи без видима причина. След кратко разследване установих, че причината може да е в странното поведение на една от таблиците. Странността му се заключава в това, че ако изтрия последния ред (т.е. този с най голямо ID) и той има примерно ID 18, то при следващия INSERT ID-то отново е 18, а не както може да се очаква 19. Възможно и да съм си дефинирал грешно индексите.
Колоната ID е първа в таблицата, от тип INT(255) e, дефинирана е като PRIMARY и има auto increment. Опитах и да създам UNIQUE индекс върху нея, но не помогна. Таблицата е BDB. MySQL-а ми е 4.0.не-помня-колко.
Благодаря предварително

Колоната ID е първа в таблицата, от тип INT(255) e, дефинирана е като PRIMARY и има auto increment. Опитах и да създам UNIQUE индекс върху нея, но не помогна. Таблицата е BDB. MySQL-а ми е 4.0.не-помня-колко.
Благодаря предварително
Re: И какво му е странното? Читать надо ...
[линк]
14.2.5 CREATE TABLE Syntax
...
An integer column can have the additional attribute AUTO_INCREMENT.
...
If you delete the row containing the maximum value for an AUTO_INCREMENT column, the value will be reused for an ISAM or BDB table, but not for a MyISAM or InnoDB table.
salle.online.bg/sig
14.2.5 CREATE TABLE Syntax
...
An integer column can have the additional attribute AUTO_INCREMENT.
...
If you delete the row containing the maximum value for an AUTO_INCREMENT column, the value will be reused for an ISAM or BDB table, but not for a MyISAM or InnoDB table.
salle.online.bg/sig
Re: И какво му е странното? Читать надо ...
Очевидно ми е убягнало, че има разлика при различните видове таблици...
А нима няма начин да се постигне ефект като при MyISAM таблица?
Все пак става въпрос за таблица с потребители и е доста кофти някой потребител да получи ID което е било на друг преди него? Разбира се в краен случай мога и да не ги изтривам от таблицата, а само да ги маркирам като изтрити, но тоя вариант не ми допада особено...
Ако някой се сети да каже.
Сърдечно благодаря на salle!
So long and thanks for all the fish!

А нима няма начин да се постигне ефект като при MyISAM таблица?
Все пак става въпрос за таблица с потребители и е доста кофти някой потребител да получи ID което е било на друг преди него? Разбира се в краен случай мога и да не ги изтривам от таблицата, а само да ги маркирам като изтрити, но тоя вариант не ми допада особено...
Ако някой се сети да каже.
Сърдечно благодаря на salle!
So long and thanks for all the fish!
Re: ами предимства и недостатъци ...
Всеки тип таблици си ги има
Ако държиш на транзакциите моят съвет е
ALTER TABLE tbl TYPE=InnoDB
InnoDB е много по-добра машина от BDB далеч не само заради auto_increment
salle.online.bg/sig
Ако държиш на транзакциите моят съвет е
ALTER TABLE tbl TYPE=InnoDB
InnoDB е много по-добра машина от BDB далеч не само заради auto_increment
salle.online.bg/sig
Re: ами предимства и недостатъци ...
Знам, но уви моя хост не поддържа този тип таблици и не съм в положение да предявявам претенции...
So long and thanks for all the fish!

So long and thanks for all the fish!
Re: интересно ...
Това е доста рядък случай.
По мои наблюдения на 1 потребител на BDB се падат около 10 000 потребители на InnoDB.
Ами в такъв случай ще трябва да се съобразяваш. Като например да прибегнеш до номера с отделна таблица само за auto_increment стойностите ... и да си усложниш почти всички заявки ама ... това е положението.
salle.online.bg/sig<P ID="edit"><FONT class="small"><EM>Редактирано от salle на 05.05.04 22:27.</em></font></p>
По мои наблюдения на 1 потребител на BDB се падат около 10 000 потребители на InnoDB.
Ами в такъв случай ще трябва да се съобразяваш. Като например да прибегнеш до номера с отделна таблица само за auto_increment стойностите ... и да си усложниш почти всички заявки ама ... това е положението.
salle.online.bg/sig<P ID="edit"><FONT class="small"><EM>Редактирано от salle на 05.05.04 22:27.</em></font></p>
Редактирано от salle на