Как вставить данные в таблицу (и вернуть их), когда оператор выбора не выводит строк? - PullRequest
0 голосов
/ 03 сентября 2018

У меня есть таблица MySql, которая создается следующим образом;

CREATE TABLE test_contacts
(
    id int PRIMARY KEY AUTO_INCREMENT,
    name varchar(16) NOT NULL,
    databit int NOT NULL
);
CREATE UNIQUE INDEX test_contacts_name_uindex ON test_contacts (name);

Когда я хочу получить данные, я делаю SELECT * FROM test_contacts WHERE name = '{name}';

В моем текущем Java-приложении я делаю следующее: (псевдокод)

Object result = SELECT * FROM test_contacts WHERE name = '{name}';
if (result == null) {  
   INSERT INTO test_contacts (`name`, `databit`) VALUES ('{name}', 2);
   result = SELECT * FROM test_contacts WHERE name = '{name}';
}

Есть ли способ сжать эти 3 вызова базы данных в 1 оператор, который всегда возвращает строку для указанного имени? (Мне нужен id, который вставлен)

1 Ответ

0 голосов
/ 03 сентября 2018

Поскольку у вас есть уникальный индекс в любом случае, вместо того, чтобы проверять код, если ваш первый выбор имел какой-либо результат, вы просто делаете

INSERT IGNORE test_contacts (`name`, `databit`) VALUES ('{name}', 2);

Тогда вы получите id с

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