How insert register if not exist - trigger mysql
up vote
0
down vote
favorite
I have a list of records that I have to insert, but I do not want duplicates to be inserted with the same fields, I need to verify if this record exists and do not insert it and continue to analyze the following
BEGIN
IF NOT EXISTS (SELECT * FROM Leads WHERE n_documento = new.n_documento AND programa = new.programa) THEN
INSERT INTO Leads
VALUES
(NULL, new.nombres, new.apellidos, new.n_documento, new.fecha_de_nacimiento, new.telefono, new.email, new.ciudad,
new.pais, new.anos_de_experiencia, new.origen, new.informacion_adicional, new.fecha, new.programa, new.estado, new.fecha_charla,
new.grado_de_estudio, new.empresa, new.cargo, null);
END IF;
my trigger does not work, it does not validate and it allows entering the duplicates
mysql
add a comment |
up vote
0
down vote
favorite
I have a list of records that I have to insert, but I do not want duplicates to be inserted with the same fields, I need to verify if this record exists and do not insert it and continue to analyze the following
BEGIN
IF NOT EXISTS (SELECT * FROM Leads WHERE n_documento = new.n_documento AND programa = new.programa) THEN
INSERT INTO Leads
VALUES
(NULL, new.nombres, new.apellidos, new.n_documento, new.fecha_de_nacimiento, new.telefono, new.email, new.ciudad,
new.pais, new.anos_de_experiencia, new.origen, new.informacion_adicional, new.fecha, new.programa, new.estado, new.fecha_charla,
new.grado_de_estudio, new.empresa, new.cargo, null);
END IF;
my trigger does not work, it does not validate and it allows entering the duplicates
mysql
Can you add the delimiter setting and the rest of the trigger please.
– P.Salmon
Nov 8 at 18:35
Is this a one off thing, or an on going check you want to perform for every insert?
– DarbyM
Nov 8 at 19:35
add a comment |
up vote
0
down vote
favorite
up vote
0
down vote
favorite
I have a list of records that I have to insert, but I do not want duplicates to be inserted with the same fields, I need to verify if this record exists and do not insert it and continue to analyze the following
BEGIN
IF NOT EXISTS (SELECT * FROM Leads WHERE n_documento = new.n_documento AND programa = new.programa) THEN
INSERT INTO Leads
VALUES
(NULL, new.nombres, new.apellidos, new.n_documento, new.fecha_de_nacimiento, new.telefono, new.email, new.ciudad,
new.pais, new.anos_de_experiencia, new.origen, new.informacion_adicional, new.fecha, new.programa, new.estado, new.fecha_charla,
new.grado_de_estudio, new.empresa, new.cargo, null);
END IF;
my trigger does not work, it does not validate and it allows entering the duplicates
mysql
I have a list of records that I have to insert, but I do not want duplicates to be inserted with the same fields, I need to verify if this record exists and do not insert it and continue to analyze the following
BEGIN
IF NOT EXISTS (SELECT * FROM Leads WHERE n_documento = new.n_documento AND programa = new.programa) THEN
INSERT INTO Leads
VALUES
(NULL, new.nombres, new.apellidos, new.n_documento, new.fecha_de_nacimiento, new.telefono, new.email, new.ciudad,
new.pais, new.anos_de_experiencia, new.origen, new.informacion_adicional, new.fecha, new.programa, new.estado, new.fecha_charla,
new.grado_de_estudio, new.empresa, new.cargo, null);
END IF;
my trigger does not work, it does not validate and it allows entering the duplicates
mysql
mysql
asked Nov 8 at 17:52
Bryan Rivera
83
83
Can you add the delimiter setting and the rest of the trigger please.
– P.Salmon
Nov 8 at 18:35
Is this a one off thing, or an on going check you want to perform for every insert?
– DarbyM
Nov 8 at 19:35
add a comment |
Can you add the delimiter setting and the rest of the trigger please.
– P.Salmon
Nov 8 at 18:35
Is this a one off thing, or an on going check you want to perform for every insert?
– DarbyM
Nov 8 at 19:35
Can you add the delimiter setting and the rest of the trigger please.
– P.Salmon
Nov 8 at 18:35
Can you add the delimiter setting and the rest of the trigger please.
– P.Salmon
Nov 8 at 18:35
Is this a one off thing, or an on going check you want to perform for every insert?
– DarbyM
Nov 8 at 19:35
Is this a one off thing, or an on going check you want to perform for every insert?
– DarbyM
Nov 8 at 19:35
add a comment |
2 Answers
2
active
oldest
votes
up vote
0
down vote
Handling this in a trigger is not the best or most efficient place to handle this.
What you could do is build a compound unique index. Which would then in turn NOT allow you to insert a second row where the selected column values match identically to another row.
eg.
ALTER TABLE `YourSchema`.`YourTableName`
ADD UNIQUE INDEX `CompoundUniqueIndexName` (`Col1` ASC, `Col2` ASC, `Col3` ASC);
Now running the following one time:
INSERT INTO `YourSchema`.`YourTableName` (`Col1`, `Col2`, `Col3`) VALUES ('Bob', 'Jim', 'Bill');
Will successfully add a row. But you run it a second time, and you will get the following error and the row will not be insert:
Error Code: 1062. Duplicate entry 'Bob-Jim-Bill' for key
'CompoundUniqueIndexName'
Caveat
I have found Every value in your compound index needs to have a value. So it is important to set each column involved in your compound index to be NOT NULL. Additionally it may be in your interest to also supply a default value like '0' or something if you can not control the input to assure a value is present.
The reason for this is I'm not entirely sure of, But I know the following two statements will NOT produce a 'Duplicate Entry' error, because Col3 will be NULL without the above precautions.
INSERT INTO `YourSchema`.`YourTableName` (`Col1`, `Col2`) VALUES ('Bob', 'Jim');
Then again,
INSERT INTO `YourSchema`.`YourTableName` (`Col1`, `Col2`) VALUES ('Bob', 'Jim');
add a comment |
up vote
-1
down vote
This type of condition may be more performance if you use it in queries.
SELECT TOP 1 1 FROM Leads
mysql equivalent of top is limit.But I don't see how this would help.
– P.Salmon
Nov 8 at 18:33
add a comment |
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
0
down vote
Handling this in a trigger is not the best or most efficient place to handle this.
What you could do is build a compound unique index. Which would then in turn NOT allow you to insert a second row where the selected column values match identically to another row.
eg.
ALTER TABLE `YourSchema`.`YourTableName`
ADD UNIQUE INDEX `CompoundUniqueIndexName` (`Col1` ASC, `Col2` ASC, `Col3` ASC);
Now running the following one time:
INSERT INTO `YourSchema`.`YourTableName` (`Col1`, `Col2`, `Col3`) VALUES ('Bob', 'Jim', 'Bill');
Will successfully add a row. But you run it a second time, and you will get the following error and the row will not be insert:
Error Code: 1062. Duplicate entry 'Bob-Jim-Bill' for key
'CompoundUniqueIndexName'
Caveat
I have found Every value in your compound index needs to have a value. So it is important to set each column involved in your compound index to be NOT NULL. Additionally it may be in your interest to also supply a default value like '0' or something if you can not control the input to assure a value is present.
The reason for this is I'm not entirely sure of, But I know the following two statements will NOT produce a 'Duplicate Entry' error, because Col3 will be NULL without the above precautions.
INSERT INTO `YourSchema`.`YourTableName` (`Col1`, `Col2`) VALUES ('Bob', 'Jim');
Then again,
INSERT INTO `YourSchema`.`YourTableName` (`Col1`, `Col2`) VALUES ('Bob', 'Jim');
add a comment |
up vote
0
down vote
Handling this in a trigger is not the best or most efficient place to handle this.
What you could do is build a compound unique index. Which would then in turn NOT allow you to insert a second row where the selected column values match identically to another row.
eg.
ALTER TABLE `YourSchema`.`YourTableName`
ADD UNIQUE INDEX `CompoundUniqueIndexName` (`Col1` ASC, `Col2` ASC, `Col3` ASC);
Now running the following one time:
INSERT INTO `YourSchema`.`YourTableName` (`Col1`, `Col2`, `Col3`) VALUES ('Bob', 'Jim', 'Bill');
Will successfully add a row. But you run it a second time, and you will get the following error and the row will not be insert:
Error Code: 1062. Duplicate entry 'Bob-Jim-Bill' for key
'CompoundUniqueIndexName'
Caveat
I have found Every value in your compound index needs to have a value. So it is important to set each column involved in your compound index to be NOT NULL. Additionally it may be in your interest to also supply a default value like '0' or something if you can not control the input to assure a value is present.
The reason for this is I'm not entirely sure of, But I know the following two statements will NOT produce a 'Duplicate Entry' error, because Col3 will be NULL without the above precautions.
INSERT INTO `YourSchema`.`YourTableName` (`Col1`, `Col2`) VALUES ('Bob', 'Jim');
Then again,
INSERT INTO `YourSchema`.`YourTableName` (`Col1`, `Col2`) VALUES ('Bob', 'Jim');
add a comment |
up vote
0
down vote
up vote
0
down vote
Handling this in a trigger is not the best or most efficient place to handle this.
What you could do is build a compound unique index. Which would then in turn NOT allow you to insert a second row where the selected column values match identically to another row.
eg.
ALTER TABLE `YourSchema`.`YourTableName`
ADD UNIQUE INDEX `CompoundUniqueIndexName` (`Col1` ASC, `Col2` ASC, `Col3` ASC);
Now running the following one time:
INSERT INTO `YourSchema`.`YourTableName` (`Col1`, `Col2`, `Col3`) VALUES ('Bob', 'Jim', 'Bill');
Will successfully add a row. But you run it a second time, and you will get the following error and the row will not be insert:
Error Code: 1062. Duplicate entry 'Bob-Jim-Bill' for key
'CompoundUniqueIndexName'
Caveat
I have found Every value in your compound index needs to have a value. So it is important to set each column involved in your compound index to be NOT NULL. Additionally it may be in your interest to also supply a default value like '0' or something if you can not control the input to assure a value is present.
The reason for this is I'm not entirely sure of, But I know the following two statements will NOT produce a 'Duplicate Entry' error, because Col3 will be NULL without the above precautions.
INSERT INTO `YourSchema`.`YourTableName` (`Col1`, `Col2`) VALUES ('Bob', 'Jim');
Then again,
INSERT INTO `YourSchema`.`YourTableName` (`Col1`, `Col2`) VALUES ('Bob', 'Jim');
Handling this in a trigger is not the best or most efficient place to handle this.
What you could do is build a compound unique index. Which would then in turn NOT allow you to insert a second row where the selected column values match identically to another row.
eg.
ALTER TABLE `YourSchema`.`YourTableName`
ADD UNIQUE INDEX `CompoundUniqueIndexName` (`Col1` ASC, `Col2` ASC, `Col3` ASC);
Now running the following one time:
INSERT INTO `YourSchema`.`YourTableName` (`Col1`, `Col2`, `Col3`) VALUES ('Bob', 'Jim', 'Bill');
Will successfully add a row. But you run it a second time, and you will get the following error and the row will not be insert:
Error Code: 1062. Duplicate entry 'Bob-Jim-Bill' for key
'CompoundUniqueIndexName'
Caveat
I have found Every value in your compound index needs to have a value. So it is important to set each column involved in your compound index to be NOT NULL. Additionally it may be in your interest to also supply a default value like '0' or something if you can not control the input to assure a value is present.
The reason for this is I'm not entirely sure of, But I know the following two statements will NOT produce a 'Duplicate Entry' error, because Col3 will be NULL without the above precautions.
INSERT INTO `YourSchema`.`YourTableName` (`Col1`, `Col2`) VALUES ('Bob', 'Jim');
Then again,
INSERT INTO `YourSchema`.`YourTableName` (`Col1`, `Col2`) VALUES ('Bob', 'Jim');
edited Nov 8 at 20:08
answered Nov 8 at 19:50
DarbyM
678416
678416
add a comment |
add a comment |
up vote
-1
down vote
This type of condition may be more performance if you use it in queries.
SELECT TOP 1 1 FROM Leads
mysql equivalent of top is limit.But I don't see how this would help.
– P.Salmon
Nov 8 at 18:33
add a comment |
up vote
-1
down vote
This type of condition may be more performance if you use it in queries.
SELECT TOP 1 1 FROM Leads
mysql equivalent of top is limit.But I don't see how this would help.
– P.Salmon
Nov 8 at 18:33
add a comment |
up vote
-1
down vote
up vote
-1
down vote
This type of condition may be more performance if you use it in queries.
SELECT TOP 1 1 FROM Leads
This type of condition may be more performance if you use it in queries.
SELECT TOP 1 1 FROM Leads
answered Nov 8 at 18:31
umutcakar
91
91
mysql equivalent of top is limit.But I don't see how this would help.
– P.Salmon
Nov 8 at 18:33
add a comment |
mysql equivalent of top is limit.But I don't see how this would help.
– P.Salmon
Nov 8 at 18:33
mysql equivalent of top is limit.But I don't see how this would help.
– P.Salmon
Nov 8 at 18:33
mysql equivalent of top is limit.But I don't see how this would help.
– P.Salmon
Nov 8 at 18:33
add a comment |
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53213487%2fhow-insert-register-if-not-exist-trigger-mysql%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Can you add the delimiter setting and the rest of the trigger please.
– P.Salmon
Nov 8 at 18:35
Is this a one off thing, or an on going check you want to perform for every insert?
– DarbyM
Nov 8 at 19:35