2012-08-27 2 views
0

간단한 업데이트 (업데이트/삽입)를 찾고 있습니다. 표는 다음과 같습니다.Upsert - 업데이트가 존재하면 다른 데이터베이스에 삽입하십시오.

+-------+-------------+------+-----+---------+-------+ 
| Field | Type  | Null | Key | Default | Extra | 
+-------+-------------+------+-----+---------+-------+ 
| id | int(11)  | YES | PRI | NULL |  | 
| name | varchar(20) | YES |  | NULL |  | 
| email | varchar(20) | YES |  | NULL |  | 
+-------+-------------+------+-----+---------+-------+ 

여기에는 키가 없습니다. 아이디어는 이메일이 다른 경우 삽입하고 그렇지 않으면 업데이트하는 것입니다. mysql의 Insert on duplicate key은 목적에 맞지 않습니다.

우아한 방법이 있나요?

+0

그래서 'id'는 고유하지 않은 필드입니까? 여러 명이 같은 ID를 가질 수 있습니까? –

+0

Upsert는 고유 한 키가 없으면 이해가되지 않습니다. 행이 있는지 어떻게 결정합니까? 모든 필드에서 일치하는 경우 이미 존재합니까 아니면 하나 또는 두 개의 필드에서만 일치해야합니까? –

+0

예 id가 기본 키이고 스키마가 업데이트되었습니다 – absessive

답변

0

것에 대해 : 레코드가 (바람직하게는 트랜잭션에) 처음으로 존재하는 경우

REPLACE INTO table VALUES(1,'hello', '[email protected]'); 
3

당신은 이메일 열에 고유 키를 추가 할 수없는 경우, 당신은 확인합니다 :

SELECT id FROM mytable WHERE email = '[email protected]' FOR UPDATE 
존재하는 경우

다음 레코드를 업데이트 :

UPDATE mytable SET name = 'my name' WHERE id = ? 

을 달리 삽입 :

INSERT INTO mytable (name, email) VALUES ('my name', '[email protected]') 
+2

단일 SQL 문에서이 작업을 수행하는 방법은 무엇입니까? – absessive

관련 문제