2011-01-26 3 views
0

У меня есть таблица MySql с полем 1 (id), поле2 (имя) и поле3 (фамилия).MySql - Вставить только в том случае, если некоторые поля еще не загружены

Id хотел бы вставить значение только в том случае, если поле пары 2 и поле 3 уже не вставлены. Как мне это сделать?

INSERT IGNORE не работает, потому что поле1 является intincincrement и каждый INSERT отличается.

P.S. Я хотел бы, чтобы избавиться о REPLACE INTO, потому что оно не имеет смысла "переписать" данные, если они уже существуют

Приветствия

EDIT

Структура таблицы ID = INT первичного имя = VARCHAR surname = VARCHAR

имя и фамилия не могут быть уникальными (я могу иметь 2 имени или фамилии с одинаковыми значениями). Я хочу, чтобы имя и фамилия пары не имели одинакового значения.

эс:

0 Marco Cordi (OK)

1 Marco Daghine (OK)

2 Фабио Cordi (OK)

3 Marco Cordi (NOT OK, уже определяемом)

ответ

1

Чтобы кто-то отвечал на этот вопрос, вам необходимо разместить свою фактическую структуру таблицы (включая любые существующие/уникальные ключи, которые существуют).

Если в вашей таблице нет первичных/уникальных ключей, то единственный способ сделать это - запустить SELECT и посмотреть, будут ли вы получать какие-либо строки, и выполнить INSERT, если строк нет.

Если вы хотите, чтобы строки в таблице были уникальными в поле2 и поле3, вам следует создать уникальный индекс для этих столбцов (что может быть сделано с помощью запроса ALTER TABLE).

EDIT: вам нужен уникальный индекс, а не по каждому из этих полей отдельно, но по обоим. Вы хотите запустить этот запрос:

ALTER TABLE `yourtable` 
ADD UNIQUE INDEX `unique_name` (`field2`, `field3`); 

Как только вы это сделаете, вы можете использовать INSERT IGNORE.

+0

Добавлена ​​дополнительная информация! Проверьте это – markzzz

+0

Edited - единственный уникальный индекс, который охватывает оба столбца, сделает именно то, что вы хотите! – TehShrike

+0

Uhm ok, славная стрелялка! но с этим методом у меня есть ключ на элементах VARCHAR. Не лучше ли иметь только INT на одном ключе и использовать замену? В сроки вычисления я имею в виду :) – markzzz

1
update myTable 
set name = coalesce(name, 'newname'), 
surname = coalesce(surname, 'newsurname') 
where id = myID; 

(Обновлено)

insert into myTable(name, surname) 
values ('newname', 'newsurname') 
where NOT EXISTS (select id from myTable where name = newname and surname = surname) ; 
+0

Я предполагаю, что вы имеете в виду UPDATE, если поля еще не имеют записей. –

+0

??? У меня нет ID ... Мне просто нужно искать в таблице, если значения имени и фамилии уже вставлены. Еще, я положил их на БД. – markzzz

+0

Если вы имеете в виду буквально ... обновляйте только в том случае, если поля «оба» пустые, то это будет: update myTable set name = 'newname', surname = 'newsurname' где id = myID и имя равно null, а фамилия - ноль ; –