· 8 years ago · Aug 20, 2018, 09:26 PM
1MySQL insert unique record by index of columns
2table user(
3 id_user,
4 userName,
5 email,
6 primary key(id_user)
7);
8
9alter table user add unique index(userName, email);
10
11Index:
12Keyname Unique Field
13PRIMARY Yes id_user
14userName Yes userName, email
15
16INSERT INTO `user` (`userName`, `email`)
17VALUES (u1,'u1@email.me' )
18ON DUPLICATE KEY Ignore
19
20IF EXISTS(SELECT `userName`, `email` FROM user WHERE `userName` = u1 AND `email` = u1@email.me)
21BEGIN
22
23END
24ELSE
25BEGIN
26 INSERT INTO user(`userName`, `email`)
27 VALUES (u1, u1@email.me);
28END IF;
29
30DELIMITER $$
31
32CREATE FUNCTION ForceUser(pUsername varchar(255), pEmail varchar(255))
33RETURNS integer
34BEGIN
35 DECLARE MyId INTEGER;
36
37 /*First do a select to see if record exists:*/
38 /*because (username,email) is a unique key this will return null or a unique id.*/
39 SELECT id INTO MyId FROM user
40 WHERE username = pUsername
41 AND email = pEmail;
42 IF MyId IS NULL THEN
43 /*If not then insert the record*/
44 INSERT INTO user (username, email) VALUES (pUserName,pEmail);
45 SELECT LAST_INSERT_ID() INTO MyId;
46 END IF;
47 RETURN MyID;
48END $$
49
50DELIMITER ;