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