[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: auto_increment ++ как сделать?
sx000
Есть таблица такая


CREATE TABLE IF NOT EXISTS `city` (
`id` int(7) NOT NULL AUTO_INCREMENT,
`test` varchar(50) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `test` (`test`)
)
ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;


При работе с базой 90 процентов идет вставок именно новых значений, для дальнейшей работы скрипта нужен ID уникальный. Что я делаю. Я делаю вставку не проверяя уникальности значения: и получаю mysqli_insert_id() ID. Если ID получено != 0 значит вставка прошла успешно. Если вернулся 0 делаем запрос и выгребаем через SELECT ID существующей строки. Два вопроса:


- правильный ли алгоритм такой работы? Объем очень большой!
- при обращении ошибочного запроса который вернет 0 auto_increment увиличивается на 1. Я стал делать так перед каждым запросом:
alter table `city` auto_increment=1;
INSERT INTO city VALUES (NULL, 'Stuttgarwtredsdddss');

Но может есть другой способ более гуманный? Не трясти всю таблицу скажем на 150 гигов.
Valick
Цитата
Если вернулся 0 делаем запрос и выгребаем через SELECT ID существующей строки

это еще зачем? реально поставили себе задачу базу похерить?
если по каким-то причинам вставка не прошла (а это скорее всего проблемы с логикой скрипта), то просто повторите вставку. Не трогайте автоинкремент руками, как говорит один мудрый человек, он не ваш.


_____________
Стимулятор ~yoomoney - 41001303250491
salladec
и как? получилось ли решить задачу?
Valick
salladec, надеюсь получилось не создавать себе грабли на ровном месте


_____________
Стимулятор ~yoomoney - 41001303250491
mvg
Лучше сначала смотреть существование строки и при отсутствии делать вставку.
T1grOK
Если лень самому проверять существование строки, то пусть база это сделает за тебя, используй INSERT IGNORE.

_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.