2010-05-28 9 views
9

Jestem obecnie za pomocą zastąpić w oświadczeniu, mam wyjątkową dziedzinę, która spowoduje, że do UPDATE zamiast INSERT, jeżeli stwierdzi duplikat ...mysql zastąpić w alternatywnym

Problem jest, jeśli stwierdzi duplikat Nie mogę zaktualizować się w kilku kolumnach, po prostu zmywa całą partię.

Czy istnieje podobna metoda "jednego wyciągu", w której mogę po prostu AKTUALIZOWAĆ to, czego chcę?

Znalazłem scalić, ale nie undertsnad pierwszy bit o scalić tabeli przy użyciu tabeli

Odpowiedz

16

Będziesz chcesz użyć INSERT ... ON duplikat KEY UPDATE składni.

http://dev.mysql.com/doc/refman/5.1/en/insert-on-duplicate.html

Oto przykład, który będzie starał się utworzyć rekord z identyfikatorem, urodziny i nazwa. Jeśli rekord z polem identyfikatora istnieje, zostanie on określony. Tabela zawiera wiele innych pól, takich jak adres e-mail, kod pocztowy, itp. Chcę zostawić te pola sam, jeśli zaktualizuję. (REPLACE INTO spowoduje utratę tych danych, jeśli nie uwzględnię ich w instrukcji REPLACE INTO.)

INSERT INTO user (userid,birthday,first_name,last_name) 
    VALUES (1234,'1980-03-07','Joe','Smith') 
ON DUPLICATE KEY UPDATE 
    birthday = '1980-03-07', 
    first_name = 'Joe', 
    last_name = 'Smith'; 
+0

Świetnie! W ten sposób zachowuje klucz podstawowy ... – 472084

+0

Tak, wadą jest to, że wymaga dużo pisania. – Anonymous

+1

Istnieje również potencjalnie całkiem niezła wydajność w korzystaniu z INSERT ... O DUPLICATE KEY UPDATE: http://code.openark.org/blog/mysql/replace-into-think-twice. Powiedziałbym, że warto poświęcić minutę na pisanie kodu ... –