Каков наиболее эффективный способ проверить, существует ли значение, затем обновить или вставить в SQL - PullRequest
2 голосов
/ 21 сентября 2009

Мне нужно обновить дату в таблице, если она не существует, тогда она должна быть вставлена

Каков наилучший способ сделать это в MySql

В настоящее время я использую

   SELECT Id INTO LId  FROM ATABLE WHERE ID = FID;
   IF LId IS NULL THEN
     INSERT INTO ATABLE(abc) Values (2)
   ELSE
     UPDATE ATABLE Set Abc = 2 Where Id = LId
   END IF;

Но это попадает в базу данных 3 раза

Есть ли лучший способ сделать это?

Ответы [ 3 ]

5 голосов
/ 21 сентября 2009
INSERT ... ON DUPLICATE KEY UPDATE

Это то, что вы ищете:)

Подробнее см. здесь .

3 голосов
/ 21 сентября 2009

Для MySql Upsert вы можете проверить это сообщение в блоге . Он выделяет несколько методов, включая обновление и вставку с левым соединением:

update t1 as l
    inner join t2 as r on l.a = r.d
    set l.b = r.e, l.c = r.f;

insert into t1 (a, b, c)
    select l.d, l.e, l.f
    from t2 as l
        left outer join t1 as r on l.d = r.a
    where r.a is null;

Одностороннее утверждение оператора возможно при использовании ON DUPLICATE KEY UPDATE:

insert into t1(a, b, c)
    select d, e, f from t2
    on duplicate key update b = e, c = f;
3 голосов
/ 21 сентября 2009

Здесь , если вам нужно.

Я использую INSERT ... ON DUPLICATE KEY UPDATE .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...