I need to make a insert but only if similar record don\'t exists
for example:
INSERT INTO requests (\'user_id\',\'subject\',\'text\',\'time\') V
First, you can do the update. If the record doesn't exist, nothing will happen...
UPDATE
requests
SET
user_id = 56,
time = 6516516
WHERE
subject = 'test'
AND text = 'test 1234'
Then you can use SELECT instead of VALUES in the INSERT. If the record already exists, nothing will be inserted...
INSERT INTO
requests (
user_id,
subject,
text,
time
)
SELECT
56,
'test',
'test 1234',
6516516
WHERE
NOT EXISTS (SELECT * FROM requests WHERE subject = 'test' AND text = 'test 1234')
INSERT INTO requests ('user_id','subject','text','time')
VALUES (56,'test','test 1234',6516516)
ON DUPLICATE KEY UPDATE time = VALUES(time), user_id = VALUES(user_id)
Have the relevant columns set to index UNIQUE.
This will insert a row, but if subject or text (or both) already exist, you instead update the existing row with given time
and user_id
Replace your query from
INSERT INTO requests ('user_id','subject','text','time') VALUES (56,'test','test 1234',6516516)
To,
REPLACE INTO requests ('user_id','subject','text','time') VALUES (56,'test','test 1234',6516516)
This will add a small delay to the execution, but it is more efficient than any other method
You can use IGNORE
command
For example, use like this
INSERT IGNORE INTO requests ('user_id','subject','text','time') VALUES (56,'test','test 1234',6516516)
instead of,
INSERT INTO requests ('user_id','subject','text','time') VALUES (56,'test','test 1234',6516516)
IF NOT EXISTS (SELECT user_id, text from users where user_id = @user_id AND text = @text) BEGIN
INSERT INTO users ....
ELSE
UPDATE users SET xyz=uvw where user_id = @user_id AND text = @text
END
Look at the REPLACE
mysql statement?