MySQL的按列的索引插入唯一记录

问题描述:

我有一个表:MySQL的按列的索引插入唯一记录

table user(
    id_user, 
    userName, 
    email, 
    primary key(id_user) 
); 

我添加唯一索引就可以了:

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

现在我对表中的两个指数法:

Index: 
Keyname  Unique  Field 
PRIMARY  Yes   id_user 
userName Yes   userName, email 

该任务是查找MySQL语句以最快的方式插入新的唯一的记录。 声明应该返回新的或存在的记录的Id_user

我正在考虑这2种选择,不知道哪个好或者是有一些更好的三分之一的方式来做到这一点?:

1.

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

问:凡在本语句应该被指定为唯一插入所需的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; 

问:在此声明 - 如何与键名索引=用户应考虑采取?

谢谢!

从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?

答:MySQL已经知道这一点,因为该信息是表定义的一部分。

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