MySQL error after updating on - mysql

Here i am trying to insert into payment_table after updating the review_table only after the status in review_table is updated to 2 .But there is error after running this trigger i.e,
1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the
Trigger is:
CREATE TRIGGER payment_details_trig AFTER UPDATE ON review_table
FOR EACH ROW
BEGIN
IF NEW.status=2
INSERT INTO payment_table(paper_id, payment_mode, payment_refNo, payment_image,status)
VALUES (0,0,0,0,0);
END IF;
END;

Nothing sticks out except for the missing THEN. You might need delimiter statements:
DELIMITER $$
CREATE TRIGGER payment_details_trig AFTER UPDATE ON review_table
FOR EACH ROW
BEGIN
IF NEW.status = 2 THEN
INSERT INTO payment_table(paper_id, payment_mode, payment_refNo, payment_image,status)
VALUES (0, 0, 0, 0, 0);
END IF;
END;
$$
DELIMITER ;

The issue 1064 in SQL comes in following four cases:
1) Use of reserved words:
Every version of MySQL has its own list of reserved words. These are words that are used for specific purposes or perform specific functions within the MySQL engine. If you attempt to use one of these reserved words, you will receive the 1064 error.To fix the issue, you will want to surround the word with backticks “`”.
2) Missing Data:
Sometimes data in the database is missing. This can cause issues when this data is required for a query.
3) Mistyped or missing Commands:
One of the most common causes for the 1064 error is when a SQL statement uses a mistyped or missing command.
4) Deprecated Commands:
Some commands that were deprecated (slated for removal but still allowed for a period of time) eventually go obsolete. This means that the command is no longer valid in the SQL statement.
In your case third option is the answer is the reason of your error. You have missed writing THEN after IF.

Related

How execute procedure in trigget INSERT AFTER mysql?

I found a lot questions here, for example:
Execute procedure in a trigger
But can not post own comment here for specify some moments.
I have trigger INSERT AFTER, in phpmyadmin I wrote:
...
BEGIN
insert_log(1, :new.idArticle, :new.ArticleName, :new.ArticleTime, :new.ArticleCategory, :new.ArticleToUserID);
END
...
I get error:
MySQL: #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 '(1, :new.idArticle, :new.ArticleName,
:new.ArticleTime, :new.ArticleCategory, :n' at line 2
Can you advise me what is wrong?
Try this:
CREATE TRIGGER your_trigger
AFTER INSERT
ON table_name FOR EACH ROW
BEGIN
insert_log(1, NEW.idArticle, NEW.ArticleName, NEW.ArticleTime, NEW.ArticleCategory, NEW.ArticleToUserID);
END;
Also note, MySQL's documentation page titled, "Trigger Syntax and Examples" states:
Within the trigger body, the OLD and NEW keywords enable you to access columns
in the rows affected by a trigger. OLD and NEW are MySQL extensions to triggers;
they are not case sensitive.
Please let me know if you have any questions!

Trigger only if Table if updated

I want to trigger the table after update only if any change is made in the table.
I tried this
but it is giving error.
My code is
CREATE TRIGGER Trans_SubCategory_update AFTER UPDATE ON Trans_SubCategory
FOR EACH ROW
BEGIN
IF NEW.ts <> OLD.ts THEN
INSERT INTO Sync_activities (table_name,table_id,admin_id,action)
VALUES('Trans_SubCategory',New.id,New.admin_id,'update');
END IF;
END;
It is giving error
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 '' at line 6 .
But if I use
CREATE TRIGGER Trans_SubCategory_update AFTER UPDATE ON Trans_SubCategory
FOR EACH ROW
INSERT INTO Sync_activities (table_name,table_id,admin_id,action)
VALUES('Trans_SubCategory',New.id,New.admin_id,'update');
I add the trigger but triggers even if no change is made in table.
The thing is - you're forgetting to set proper delimiter. Your first syntax contains multiple operators inside trigger - and they need to be delimited by ; - but you're not changing global delimiter - thus, MySQL treats that as syntax end - and, therefore, that's an error (because trigger isn't completed, obviously).
Your second syntax is executed completely since it has only one operator (and that stands for trigger end as well) - you've not enclosed it by BEGIN..END
To fix the issue, just do:
DELIMITER //
CREATE TRIGGER Trans_SubCategory_update AFTER UPDATE ON Trans_SubCategory
FOR EACH ROW
BEGIN
IF NEW.ts != OLD.ts THEN
INSERT INTO Sync_activities (table_name,table_id,admin_id,action) VALUES ('Trans_SubCategory', NEW.id, NEW.admin_id,'update');
END IF;
END;//
DELIMITER ;

MySQL CREATE TRIGGER and DELIMITER ISSUES

I am trying to make a database that does some inventory checking, and I am working on some triggers to update everything as required. In this case, that I want to do is to take the current availability (disponibilidad) of an ingredient from the ingredients table, add to it how much is taken or added, and then save that value into the table stock_disponibilidad, as you can see from the trigger code I am trying to use.
DELIMITER $$
CREATE TRIGGER `update_disponibilidad_variacion` BEFORE INSERT ON `stock_disponibilidad`
FOR EACH ROW BEGIN
DECLARE old_disp DOUBLE DEFAULT 0;
SELECT disponibilidad INTO old_disp FROM ingredientes WHERE id = NEW.ingredientes_id;
NEW.disponibilidad = old_disp + NEW.variacion;
END$$
DELIMITER ;
However, whenever I execute the query to create the trigger, I get the following error:
#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 '.disponibilidad = old_disp + NEW.variacion; END' at line 5
I've done everything I read about this issue, still without result. What am I doing wrong?

MySQL stored proc not getting created

So I have this stored proc that will not get created when I run the file.
DELIMITER //
DROP PROCEDURE IF EXISTS msd.test_proc//
CREATE PROCEDURE msd.test_proc()
BEGIN
SELECT
'Hello proc'
FROM
msd.zipcode_lookup;
END//
DELIMITER ;
When I run this I get an error code 1064 at line 1 when I execute in RazorSQL. Here is the complete error message:
ERROR: 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 '//
CREATE PROCEDURE msd.test_proc()
BEGIN
SELECT
'Hello proc'
FROM ' at line 1
Error Code:1064
I've tried other variations and still get errors. I am sure this is something basic I am missing. I appreciate any help.
Thanks.
As stated on the RazorSQL website:
The DELIMITER statement is not part of the MySQL language. It is a command supported by certain MySQL tools. This command tells those MySQL programs to scan for a certain character that indicates the end of a query or statement.
RazorSQL does not support using the DELIMITER command. The SQL statement delimiter value used by RazorSQL can be changed using the preferences window. The default values is the semi-colon.

mysql trigger code deploying from TOAD but not from myphpadmin or from mysql console

I have a very simple trigger. I cretaed it from Toad for mysql tool and deployed it and its working perfect without any problem. when I gave it to the admin to deploy in the production server they are getting errors.
Phpmyadmin error:
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 '' at line 4
Mysql console error:
ERROR 1064 (42000): 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 'END' at line 1
When asked, they are running the code from phpmyadmin and also they tried to run from mysql console they are getting errors
Its really frustrating and irritating why the same thing is running from a GUI tool and not working from a webtool or a console. 3 different behaviors in from three different tools
Then I tried the same thing and I got the error too. Its suprising me why
DROP TRIGGER IF EXISTS TRG_ ;
CREATE TRIGGER TRG_ BEFORE INSERT ON users FOR EACH ROW
BEGIN
DECLARE X INTEGER;
SELECT COUNT(*) into X FROM users;
IF X >= 16 THEN -- CHANGE THIS NUMBER
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'cant create more users';
END IF;
END;
Can some one tell me what I am doing wrong? I am not sure but I guess its something to do with delimiter keyword which I never understood the purpose.
Have a look at this question - MySQL: How do I use delimiters in triggers?
You should use delimiters when create source objects like triggers. The DELIMITER is not a MySQL statement, it a console command, and many MySQL clients supports this command. You may try this code in the MySQL console -
DROP TRIGGER IF EXISTS TRG_ ;
DELIMITER $$
CREATE TRIGGER TRG_ BEFORE INSERT ON users FOR EACH ROW
BEGIN
DECLARE X INTEGER;
SELECT COUNT(*) INTO X FROM users;
IF X >= 16 THEN -- CHANGE THIS NUMBER
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'cant create more users';
END IF;
END$$
DELIMITER ;
As I know some old phpmyadmin versions do not support delimiters.