Освободившиеся id строк

Статус
В этой теме нельзя размещать новые ответы.

phillip

Полезный
Регистрация
4 Сен 2007
Сообщения
411
Реакции
15
Не пойму от чего зависит. Есть таблица мускуль, в ней поле
id(PRIMARY, auto_increment)
Дак вот добавили в таблицу 6 строк, автоматически у них id расставились 1,2,3,4,5,6. Затем удаляем пятую строку, получаются строки с id 1,2,3,4,6. Как сделать чтобы теперь при вставке новой строке ей присвоился id 7 вместо освободившегося id 5?
Раньше у меня это само собой было, а счас не соблюдается такое правило, хз что не так и от чего это зависит
 
а зачем вам нужно?
суть UID в том, чтобы быть уникальным относительно существующих записей
осталное - неважно.
обычно выдается по порядку, но на это ориентироватся не стоит
в любом случае вопрос не по PHP, ибо это к базе данных надо настраивать
а на большинстве хостингов вам ее не дадут настраивать
 
Нужно выставить auto_increment в колонке
 
Нужно выставить auto_increment в колонке
Автор это уже указал в первом сообщении.



Цитата из ссылки. Может быть это поможет.

Обратите внимание, что в этом случае значение AUTO_INCREMENT будет использоваться повторно, если в какой-либо группе удаляется строка, содержащая наибольшее значение AUTO_INCREMENT.
 
Почитал, там сказано:
В таблицах MyISAM и BDB можно определить AUTO_INCREMENT для вторичного столбца составного ключа. В этом случае значение, генерируемое для автоинкрементного столбца, вычисляется как MAX(auto_increment_column)+1) WHERE prefix=given-prefix. Столбец с атрибутом AUTO_INCREMENT удобно использовать, когда данные нужно помещать в упорядоченные группы.

CREATE TABLE animals (grp ENUM('fish','mammal','bird') NOT NULL,
id MEDIUMINT NOT NULL AUTO_INCREMENT
PRIMARY KEY (grp,id));
INSERT INTO animals (grp,name) VALUES("mammal","dog"),("mammal","cat"),
("bird","penguin"),("fish","lax"),("mammal","whale");
SELECT * FROM animals ORDER BY grp,id;

Что вернет:

+--------+----+---------+
| grp | id | name |
+--------+----+---------+
| fish | 1 | lax |
| mammal | 1 | dog |
| mammal | 2 | cat |
| mammal | 3 | whale |
| bird | 1 | penguin |
+--------+----+---------+

Обратите внимание, что в этом случае значение AUTO_INCREMENT будет использоваться повторно, если в какой-либо группе удаляется строка, содержащая наибольшее значение AUTO_INCREMENT.
Не могу понять, что значит вторичный столбец составного ключа
 
Почитал, там сказано: Не могу понять, что значит вторичный столбец составного ключа
Так там как бы пример показан. Я честно не знаю как объяснить. :) Сделай экспорт структуры таблицы в phpMyAdmin. И запости сюда.
 
PHP:
-- phpMyAdmin SQL Dump
-- version 3.2.3
-- http://www.phpmyadmin.net
--
-- Host: localhost
-- Generation Time: Nov 23, 2010 at 06:51 AM
-- Server version: 5.1.40
-- PHP Version: 5.3.3

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

--
-- Database: `base`
--

-- --------------------------------------------------------

--
-- Table structure for table `objects`
--

CREATE TABLE IF NOT EXISTS `objects` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `ownerid` int(11) NOT NULL,
  `name` varchar(768) NOT NULL,
  `trans_name` varchar(768) NOT NULL,
  `object_type` enum('stand_alone','extended') NOT NULL,
  `town` varchar(60) NOT NULL,
  `address` varchar(768) NOT NULL,
  `desc` text NOT NULL,
  `beach_dist` varchar(20) NOT NULL,
  `add_comments` enum('on','off') NOT NULL,
  `date_add` int(11) NOT NULL,
  `paid_to` varchar(20) NOT NULL,
  `services` int(11) NOT NULL,
  `approved` enum('Y','N','FREEZE') NOT NULL,
  `count_images` int(11) NOT NULL,
  `rooms_count` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=cp1251 AUTO_INCREMENT=2 ;
 
Ключ у тебя не составной. И проверил, внес 4 записи через pma, затем с id=2 удалил и создал еще одну. Для вновь созданной id=5.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху