2011-10-09 2 views
2

나는 테이블이MySQL은 컬럼의 인덱스 고유의 레코드를 삽입

Index: 
Keyname  Unique  Field 
PRIMARY  Yes   id_user 
userName Yes   userName, email 
: 지금은 테이블에 두 indexs을

alter table user add unique index(userName, email); 

작업은 새로운 고유 한 레코드를 삽입하는 가장 빠른 방법을 찾기 위해 MySQL 구문을 찾는 것입니다. 문구는 새 레코드 또는 기존 레코드 Id_user을 반환해야합니다.

나는이 두 가지 옵션을 고려하고, 더 나은 또는이 작업을 수행하는 몇 가지 세번째 더 나은 방법이 어떤 모른다는

1.

INSERT INTO `user` (`userName`, `email`) 
VALUES (u1,'[email protected]') 
ON DUPLICATE KEY Ignore 

Q를? : : 곳에서 고유 한 삽입에 필요한 KEY가 Keyname = uesrName입니까?

2.

IF EXISTS(SELECT `userName`, `email` FROM user WHERE `userName` = u1 AND `email` = [email protected]) 
BEGIN 

END 
ELSE 
BEGIN 
     INSERT INTO user(`userName`, `email`) 
     VALUES (u1, [email protected]); 
END IF; 

Q :이 문장에서 - 키 이름과 인덱스 = 사용자 이름을 고려하여 촬영하는 방법?

감사합니다.

답변

1

MySQL의 테이블에서 데이터를 가져 오는 유일한 방법은 선택하는 것입니다.

DELIMITER $$ 

CREATE FUNCTION ForceUser(pUsername varchar(255), pEmail varchar(255)) 
RETURNS integer 
BEGIN 
    DECLARE MyId INTEGER; 

    /*First do a select to see if record exists:*/ 
    /*because (username,email) is a unique key this will return null or a unique id.*/ 
    SELECT id INTO MyId FROM user 
    WHERE username = pUsername 
    AND email = pEmail; 
    IF MyId IS NULL THEN 
    /*If not then insert the record*/ 
    INSERT INTO user (username, email) VALUES (pUserName,pEmail); 
    SELECT LAST_INSERT_ID() INTO MyId; 
    END IF; 
    RETURN MyID; 
END $$ 

DELIMITER ; 

질문 : 어디에서이 문에 고유의 삽입에 필요한 키가 키 이름 = uesrName 것을 지정해야합니다?

A : 정보가 테이블 정의의 일부이기 때문에 이미 알고 있습니다.

참조 : http://dev.mysql.com/doc/refman/5.0/en/getting-unique-id.html

관련 문제