I want to create a trigger in mysql which insert a row in a table change_history when there is any update in another table event_data if event_data.title='event_media'.
DELIMITER $$
CREATE TRIGGER `after_evdata_update`
AFTER UPDATE ON event_data
FOR EACH ROW
BEGIN
if OLD.title <=> 'event_media'
INSERT INTO change_history (badge,city,country,venue,company,
date,rehosted,type,cancelled,name,tagline,description,agenda,pricing,
edition,photo_video,exhibitors,speakers,official_url,twitter_handle,
twitter_hashtag,facebook_url,contact,post_review_id) values(1,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,null);
end if;
END $$
DELIMITER ;
I think this should work. Please try.
BEGIN
IF (OLD.title <> 'event_media')
THEN
INSERT INTO `change_history` (`xxx_id`,`and_all_other_fields_similar_way`)
VALUES (old.xxx_id,old.and_all_other_fields_similar_way);
END IF;
END
I am new to trigger and I need to insert 7 entries in a table. '_blood_bank_record' when one entry in table '_blood_bank' get inserted. So for that I had made a trigger which looks as follows:
DELIMITER $$
USE `blooddirdb`$$
DROP TRIGGER /*!50032 IF EXISTS */ `TrBloodRecord`$$
CREATE /*!50017 DEFINER = 'root'#'localhost' */ TRIGGER `TrBloodRecord` AFTER INSERT
ON `_blood_bank` FOR EACH ROW
BEGIN
DECLARE i INT ;
SET i = 0 ;
WHILE
i < 7 DO
INSERT INTO `_blood_bank_record` (
`BBId`,
`BloodGroupId`,
`BloodRecord`
)
VALUES
(new.BBId, i, 0) ;
SET i = i + 1 ;
END WHILE ;
END ;
$$
DELIMITER ;
When I create this trigger, I am not getting any error but it also restrict the insert operation in '_blood_bank' which actually works when I drop this trigger.
I want a trigger that deletes the row in user_briefcases after a row is inserted in user_briefcases_sold
both tables have briefcase_id and user_id
I have no idea why this wont work:
CREATE TRIGGER delete_user_briefcase_when_sold
DELIMITER $$
AFTER INSERT ON user_briefcases_sold FOR EACH ROW BEGIN
DELETE FROM user_briefcases WHERE briefcase_id = NEW.briefcase_id && user_id = NEW.user_id;
END;
$$ DELIMITER ;
You have syntax error
try this
DELIMITER $$
CREATE
TRIGGER delete_user_briefcase_when_sold AFTER INSERT
ON user_briefcases_sold
FOR EACH ROW BEGIN
DELETE FROM user_briefcases WHERE briefcase_id = NEW.briefcase_id AND user_id = NEW.user_id;
END$$
DELIMITER ;
My trigger will not work.
Basically when a user_briefcase is created i want to also create a row in user_complementary_info if it not already exist, where user_complementay.user_id = the newly created user_briefcase.user_id
My trigger
DROP TRIGGER IF EXISTS complementary_user_info
DELIMITER $$
CREATE TRIGGER complementary_user_info AFTER INSERT user_briefcases FOR EACH ROW
BEGIN
IF (SELECT COUNT(*) user_complementary WHERE user_id=NEW.user_briefcases.user_id) = 0 THEN
INSERT INTO user_complementary (user_id)
VALUES (NEW.user_briefcases.user_id)
END $$
DELIMITER ;
DROP TRIGGER IF EXISTS complementary_user_info;
DELIMITER $$
CREATE TRIGGER complementary_user_info AFTER INSERT user_briefcases FOR EACH ROW
BEGIN
IF NOT EXISTS (SELECT 1 FROM user_complementary_info WHERE user_id = NEW.user_id) THEN
INSERT INTO user_complementary (user_id)
VALUES (NEW.user_briefcases.user_id);
END IF;
END $$
DELIMITER ;
I have created a trigger , and this trigger updating the field value , but not checking the if condition ,
DELIMITER $$
create trigger `njsystem`.`test` BEFORE UPDATE on `njsystem`.`tbl_users`
for each row
BEGIN
IF (NEW.user_failed_logins > 3) THEN
UPDATE tbl_users SET user_active = 0;
END IF;
END; $$
DELIMITER ;
What I understand from your problem statement is that, you wanted to set user_active to 0 if user_failed_logins count goes above 3. Here is solution for that, you can also change values using new.
DELIMITER $$
create trigger `test` BEFORE UPDATE on `tbl_users`
for each row
BEGIN
IF (NEW.user_failed_logins > 3) THEN
SET NEW.user_active = 0;
END IF;
END; $$
DELIMITER ;