LINUX.ORG.RU

MySQL INSERT и сравнение значений

 ,


0

1

Доброго времени суток! Имеется следующий запрос в базу

INSERT INTO SomeTable (CertificateID, HostName, SSLType, PurchaseDate, ExpireDate, IsExpired, Status, Years) 

        VALUE (22222, "example.tld", "somessltype", "9999-01-31", "9999-12-31", 0, "replaced", 1) ON DUPLICATE KEY UPDATE CertificateID=22222, HostName="example.tld", SSLType="somessltype", 

         PurchaseDate="9999-01-31", ExpireDate="9999-01-31", IsExpired=0, Status="replaced", Years=1;
За ним следует такой запрос
INSERT INTO SomeTable (CertificateID, HostName, SSLType, PurchaseDate, ExpireDate, IsExpired, Status, Years) 

        VALUE (11111, "example.tld", "somessltype", "9999-01-31", "9999-12-31", 0, "active", 1) ON DUPLICATE KEY UPDATE CertificateID=11111, HostName="example.tld", SSLType="somessltype", 

         PurchaseDate="9999-01-31", ExpireDate="9999-01-31", IsExpired=0, Status="replaced", Years=1;
После чего записи в БД имеют значения второго запроса (очевидно же!), есть ли возможность указать БД отбросить второй запрос, если CertificateID в первом запросе больше чем во втором, если же они совпадают просто выполнить так как есть. Заранее спасибо за помощь!

Where добавить можно же

anonymous
()

варианта 2:

1) открываешь транзакцию (с уровнем изоляции READ COMMITED - ЕМНИП), делаешь SELECT, сравниваешь CertificateID, инсертишь, если нужно, фиксируешь транзакцию

2) инсертишь как есть, а в проблемном месте используешь не простой SELECT, а срез последних по MAX(CertificateID)

bvn13 ★★★★★
()

Вариант с ```SELECT FOR UPDATE``` не устраивает? Такое даже на всяких галерах вроде как прокатывает. (если замешана одна строка, а тут как раз замешана ровно одна строка)

redixin ★★★★
()
Последнее исправление: redixin (всего исправлений: 1)

Можно ещё хранимую процедуру написать, чтобы она сравнивала данные и делала вставку если нужно

skyman ★★★
()

как-то странно
а по какому ключу идет тогда обновление?
скинь хотя бы describe SomeTable

kiotoze ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.