Работа с MySQL в PHP
Возможно ли в PHP при удалении поля из таблицы в базе данных MySQL, сбрасывать значение ячейки со свойством auto_increment на ближайшее число. Например, есть строка со значением 5, за ней идет строка с номером 7, т.к. 6-ая была удалена ранее. Теперь если удалить 7-ую строку, то когда будем добавлять в эту таблицу новой значение, ее номер стал не 8, а 6.
Если не понятно объяснил, то попробую объяснить по-другому.
Заранее спасибо.
Автоинкремент можно менять в служебных данных таблицы. Но делать этого не надо, а надо понимать, что такое автоинкремент и для чего он служит.
PHP FAQ: MySQL. Просто и понятно.
то это уже не будет auto_increment.
Надо поставить INT без auto_increment
и посылать два запроса
1) SELECT MAX(`id`) FROM `table1` - находить максимальный id
2) а потом вставлять в id уже максимальный
- если потом трудно и не красиво выводятся индексы строк в таблице ) то для такого случая это более чем глупо.
- для сортировки... да всё равно будет работать сортировка, даже если id не по порядку, ну это же AUTO_INCREMENT....
для чего такое понадобилось даже не представляю....
по-моему вы что-то перемудрили... :)
Автоинкремент на то и авто, что ничего ты не сделаешь. Заводи целое поле и организуй процедуру его заполнения/индексирования/поиска.
Всё это не нужно, всё от неграмотного проектирования и ограниченности мышления (не в обиду). Во-первых, такой алгоритм реализован далеко не случайно, так как автоинкрементные поля предназначены для индексации. Если производить подобную замену, это нарушит целостность данных.
Скажем раньше у тебя в таблице "типа оборудования" было 1;Видеокарты, 2;Процессоры, 3;Жесткие диски... Теперь представь, у тебя 20000 позиций оборудования с этими типами. Удалишь ты "Жесткие диски", а на его место поставишь какие нибудь "Кулеры". И что получится - целостнось данных будет нарушена. Это конечно самый простой пример, в сложных БД последствия могут быть гораздо хуже...
Вывод: если уж прям убейся как нужен какой-то строгий порядок, нумерация - сделай одтельное поле, но индексы на рабочей базе менять глупо и опасно.
С индексами можно играть в случае, если InnoDB и есть физические каскадные связи между полями двух таблиц. Тогда при смене индекса в одной таблице автоматически будет меняться и в другой.
Кодировка полей : "cp1251_general_ci". Вроде должно работать.
При использовании кодировки UTF-8 в html, все латинские буквы имеют длину 1 байт, а русские - по 2 байта.
Когда пишешь инфу с русскими буквами, например Коля, то в базу пишется 8байт невзирая на cp1251_... в базе.
Есть 3 выхода:
1. Использовать кодировку Windows-1251 в html
2. Перед записью строки в базу воспользоваться функцией iconv
3. Перед записью задать директивами MySQL SET character_set_client и SET character_set_results перекодировку информации, но что-то этот способ у меня не работает