Моя таблица db выглядит как этот рис. http://prntscr.com/22z1n
Недавно я создал страницу delete.php. он работает правильно, но когда я удалил 21-го пользователя, следующий зарегистрированный пользователь получит 24-й идентификатор вместо 21.
Можно ли поместить вновь зарегистрированных пользователей в первую пустую строку? (В этой ситуации 21-я строка)
В моей регистрационной форме вновь регистрирующий пользователь может писать имена существующих пользователей и дружить с ними после регистрации. Для этой дружбы у меня есть другая таблица, которая связывает идентификатор только что зарегистрированного пользователя и существующего пользователя.
Для этого я использую mysql_insert_id во время регистрации, чтобы получить идентификатор для нового пользователя. Но после удаления 21-й строки в процессе регистрации nex mysql_insert_id дал мне номер 21. но сохранен в 24-й строке. И поместите в таблицу 21 ассоциаций для нового пользователя. Я хочу решить эту проблему
Столбец auto_increment
MySQL поддерживает число внутри и всегда увеличивает его даже после удаления. Если вам нужно заполнить пустое пространство, вы должны обработать его самостоятельно в PHP, а не использовать ключевое слово auto_increment
в определении таблицы.
Откат назад, чтобы заполнить пустые идентификаторы строк, может вызвать всевозможные трудности, если у вас есть отношения с внешним ключом, и это действительно не рекомендуется.
auto_increment
можно сбросить с помощью инструкции SQL, но это не рекомендуется, так как это приведет к дублированию ключевых ошибок.
-- Doing this will cause problems! ALTER table AUTO_INCREMENT=12345;
РЕДАКТИРОВАТЬ Чтобы обеспечить соблюдение отношений с внешним ключом, как описано в комментариях, вы должны добавить к определению своей таблицы:
FOREIGN KEY (friendid) REFERENCES registration_table (id) ON DELETE SET NULL;
Заполните правильные имена таблиц и столбцов. Теперь, когда пользователь удаляется из регистрации, их ассоциация друзей обнуляется. Если вам нужно повторно связать себя с другим пользователем, это должно быть обработано с помощью PHP. mysql_insert_id()
больше не является полезным.
Если вам нужно найти идентификатор с наивысшим номером в базе данных после удаления для связи с друзьями, используйте следующее.
SELECT MAX(id) FROM registration_table;
Когда вы используете столбец идентификатора автоинкремента, значение, которое будет присвоено следующей записи, не будет уменьшено путем удаления записи. Это не то, для чего используется столбец автоинкремента. Механизм базы данных всегда будет увеличивать этот номер на новой вставке и никогда не уменьшать этот номер при удалении.
Auto increment – это последовательность, которая отслеживается как часть таблицы. Когда вы удаляете строку, она не возвращается.
Легко, нет. То, что вы можете сделать (но я не предлагаю делать), делает SQL-функцию для определения самого низкого числа, которое в настоящее время не занято. Или вы можете создать таблицу идентификаторов, которые были удалены, и получить наименьшее число оттуда. Или, и это лучшая идея, игнорировать пробелы и реализовать базу данных в порядке.
То, что вы хотите сделать, возможно, добавив дополнительный столбец в вашу таблицу, называемый как user_order. Затем вы можете написать код для управления вставками и удалениями, чтобы этот столбец был всегда последовательным без пробелов.
Таким образом, вы избегаете проблем, с которыми вы могли бы столкнуться с колонкой auto_increment.
Неправильная практика сброса значения auto_increment, но если вам действительно нужно это сделать, вы можете:
ALTER TABLE mytable AUTO_INCREMENT = 1;
Запускайте этот запрос после каждого удаления. Значение Auto_increment не будет установлено в 1
, это автоматически установит минимально возможное значение.