Trigger with definer error - mysql

I'm trying to create a trigger with a definer and some simple action inside, but doesn't get accepted by mysql and freezes the phpMyadmin without giving an error. Can someone help me to find the mistake
delimiter //
CREATE TRIGGER log_items after insert on Profiles
FOR EACH ROW
IF USER() LIKE 'admin#%' THEN
begin
INSERT INTO ItemsLog (`record_id`, `record_time`) VALUES (NEW.id, now());
end; //
END IF;
delimiter ;

Here is full trigger code that is accepted by phpmyadmin. It was generated when using the sql ide: SQLyog.
DELIMITER //
USE `testmysql`//
DROP TRIGGER /*!50032 IF EXISTS */ `log_items`//
CREATE
DEFINER = 'test'#'localhost'
TRIGGER `log_items` AFTER INSERT ON `profiles`
FOR EACH ROW IF USER() LIKE 'admin#%' THEN
BEGIN
INSERT INTO ItemsLog (`record_id`, `record_time`) VALUES (NEW.id, NOW());
END;
END IF;
//
DELIMITER ;
DELIMITER ;

Related

Error in MySQL trigger after insert

I am creating trigger for after insert but I am getting error.
DELIMITER //
CREATE TRIGGER ParticleTableInsert
AFTER INSERT
ON Particle FOR EACH ROW
BEGIN
INSERT INTO Particles_Log(Message) VALUES ('Pace_Particles_Log');
END;
DELIMITER ;
I am new to mysql, sonot understanding what is wrong with my query. Please help.
DELIMITER //
CREATE TRIGGER ParticleTableInsert
AFTER INSERT
ON Particle FOR EACH ROW
BEGIN
INSERT INTO Particles_Log(Message) VALUES ('Pace_Particles_Log');
END//
DELIMITER;

What is wrong with my mySQL Trigger?

I am trying to make a simple trigger that logs update events. However I get Error near " BEGIN ...". if I use single quotes, i.e. 'update_log' and 'customer', then the error is near ' 'update_log....'
use tal;
delimiter //
CREATE TRIGGER onUpdate
BEFORE UPDATE ON customer
BEGIN
INSERT INTO update_log VALUES(user(), 'An Udpdate operation against the customer table.', now());
END//
delimiter ;
Why does this not work?
Unlike Oracle mysql needs FOR EACH ROW
delimiter //
CREATE TRIGGER onUpdate
BEFORE UPDATE ON customer
FOR EACH ROW
BEGIN
INSERT INTO update_log VALUES(user(), 'An Udpdate operation against the customer table.', now());
END//
delimiter ;

Mysql create trigger throws error

I've tried to create trigger for each new post
here is my code
CREATE TRIGGER insertprod AFTER INSERT ON post
FOR EACH ROW
BEGIN
INSERT INTO attributes SET attrtext = 'sometext', post_id = NEW.id;
END;
I'm getting this error
You probably just need a delimiter:
DELIMITER $$
CREATE TRIGGER insertprod AFTER INSERT ON post
FOR EACH ROW
BEGIN
INSERT INTO attributes SET attrtext = 'sometext', post_id = NEW.id;
END;
$$
DELIMITER ;
However, you are also using a non-standard form of INSERT. I would suggest:
DELIMITER $$
CREATE TRIGGER insertprod AFTER INSERT ON post
FOR EACH ROW
BEGIN
INSERT INTO attributes(attrtext, post_id)
VALUES('sometext', NEW.id);
END;
$$
DELIMITER ;
The parser is confused by the ; that terminates the statement inside the trigger's BEGIN...END block. You need to use a DELIMITER statement to define a new delimiter, which you can then use to end the CREATE TRIGGER statement.
Your INSERT command is wrong. It should have been
INSERT INTO attributes (attrtext, post_id) VALUES ('sometext', NEW.id);

MYSQL trigger error 1064

I would like to check if a record is being created with a user id, if not then generate one. I can't figure out what I'm doing wrong?
delimiter $$
DROP TRIGGER IF EXISTS init_uuid_users;
CREATE TRIGGER init_uuid_users BEFORE INSERT ON `users`
FOR EACH ROW BEGIN
IF (NEW.username IS NULL) THEN
SET NEW.username = UUID();
END IF;
END;
$$
delimiter ;
DROP TRIGGER IF EXISTS init_uuid_users;
put it before delimiter.
And remove ; after END.

Perform insert or update on table using trigger

I am trying to fetch some values from php page and perform trigger in mysql database. Which is as below:
DELIMITER $$
DROP TRIGGER /*!50032 IF EXISTS */ `test`.`MysqlTrigger`$$
CREATE
/*!50017 DEFINER = 'root'#'localhost' */
TRIGGER `MysqlTrigger` AFTER INSERT OR UPDATE ON `table2`
FOR EACH ROW BEGIN
IF(NEW .flag=0) THEN
INSERT INTO temp(sent,pcount,ncount) VALUES (NEW.sent,NEW.pcount,NEW.ncount);
ELSE
UPDATE temp SET pcount=NEW.pcount AND ncount=NEW.ncount WHERE id = NEW.id;
END IF;
END;
$$
DELIMITER ;
Which gives error:
error Code : 1064
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'or update ON `table2`
FOR EACH ROW BEGIN
if(NEW .flag=0) then
INSERT INTO' at line 3
I tried to change = with =: but error persist. Any idea whaat the prob?
You can't define a trigger for update and insert at the same time. You have to define 2 triggers:
CREATE TRIGGER `Mysql_insert_Trigger` AFTER INSERT ON `table2` ...
CREATE TRIGGER `Mysql_update_Trigger` AFTER UPDATE ON `table2` ...
I count do it. There was problem in syntax. Here is the correct which perform update insert at same moment in different table and update-inset on same table but with if else:
DELIMITER $$
DROP TRIGGER /*!50032 IF EXISTS */ `test`.`MysqlTrigger2`$$
CREATE
/*!50017 DEFINER = 'root'#'localhost' */
TRIGGER `MysqlTrigger2` AFTER INSERT ON `table2`
FOR EACH ROW BEGIN
IF 'flag'=1 THEN
UPDATE record SET sent=NEW.sent WHERE id=NEW.id;
ELSE
INSERT INTO record VALUES (id,NEW.sent);
INSERT INTO temp VALUES ()
END IF;
END;
$$
DELIMITER ;