if в mysql

Тема в разделе "Базы данных", создана пользователем rijy, 29 июл 2010.

Статус темы:
Закрыта.
Модераторы: latteo
  1. rijy

    rijy

    Регистр.:
    3 ноя 2007
    Сообщения:
    249
    Симпатии:
    82
    Здравствуйте, форумчане!
    Подскажите плз оптимальное решение следующего вопроса.

    Хочу согласовать 1С с интернет-магазом. При добавлении какого-либо товара 1С формирует команду INSERT с необходимыми полями. Товаров может добавляться много одним дампом. При изменении какого либо товара формируется команда UPDATE, в которой указывается, какие поля товара поменять в БД магазина.

    Возникает такой вопрос. Если при добавлении большого кол-ва товаров произойдет какой-то сбой и например один товар не добавится - получится рассинхронизация БД 1С и БД магазина. В 1С товар будет добавлен и его можно будет изменять, и при изменении такого товара в 1С сформируется команда UPDATE. Но, насколько я понимаю, она не сработает при импорте такого дампа в БД магазина, т.к. товара в БД магазина нет изза глюка при добавлении.

    Можно ли использовать для проверки наличия товара в БД оператор IF прямо в sql-дампе? Т.е. условие: если товар с таким-то ID присутствует в БД магазина - значит проводится команда UPDATE, если нет - пропуск.

    Понимаю что решение наверняка не оптимальное. Что вы посоветуете в данном случае? Есть ли альтернативные варианты решения вопроса?
    Очень хотелось бы при решении вопроса ограничиться возможностями mysql, без привлечения php.
     
  2. chang

    chang

    Регистр.:
    20 ноя 2009
    Сообщения:
    363
    Симпатии:
    117
    а если INSERT and UPDATE объеденить в

    PHP:
    INSERT ***** 
    ON DUPLICATE KEY UPDATE **** 
    Перейти по ссылке

    и это бы решило проблему с россинхровкой БД в случае некорректного завершения работы скрипта с INSERT-ами
     
    rijy нравится это.
  3. rijy

    rijy

    Регистр.:
    3 ноя 2007
    Сообщения:
    249
    Симпатии:
    82
    цитата из приведенной ссылки:
    Как определить какое поле является UNIQUE ? Или как его сделать UNIQUE ?
     
  4. ZCFD

    ZCFD

    Регистр.:
    16 янв 2008
    Сообщения:
    989
    Симпатии:
    437
    в phpmyadmin ( ну или чем ты БД администрируешь )
     
  5. jo0o00nyy

    jo0o00nyy Постоялец

    Регистр.:
    12 май 2010
    Сообщения:
    65
    Симпатии:
    27
    При указании поля как UNIQUE создается индекс типа UNIQUE.
    Его можно задать самому.
    Вот пример составного уникального индекса
    Код:
    ALTER TABLE `db`.`table` ADD UNIQUE (`field1` , `field2`) 
    Кстати, PRIMARY индекс также считается уникальным.
     
  6. RomAndry

    RomAndry Постоялец

    Регистр.:
    21 ноя 2007
    Сообщения:
    102
    Симпатии:
    24
    используйте REPLACE и трансакции
     
  7. rijy

    rijy

    Регистр.:
    3 ноя 2007
    Сообщения:
    249
    Симпатии:
    82
    можно подробнее про это? или пару ссылочек по теме..
     
  8. RomAndry

    RomAndry Постоялец

    Регистр.:
    21 ноя 2007
    Сообщения:
    102
    Симпатии:
    24
    REPLACE есть в мануале MySQL
    этот оператор делает INSERT если нету записи по ключу или UPDATE - если есть.

    О трансакциях тоже лучше почитать, что бы понимать для чего они.
    в бухгалтерии и работе с важныи данными, деньгами и прочем - очень нужно.
    Они позволяют избежать ошибок в расчетах в случае сбоя сервера:
    Вася заплатил Пете 100 USD (UPDATE ПЕТЯ SET balance= balance + 100USD)
    с Васи снять 100USD с баланса (UPDATE ВАСЯ SET balance= balance - 100USD)
    так вот если между запросами сбой, то Пете деньги ушли, а с Васи не снялись.
    Трансакция поможет ЛИБО выполнить ОБА запроса либо НИ ОДНОГО (откатить Васе 100 баксов обратно)
     
    rijy нравится это.
Статус темы:
Закрыта.