MySQL before insert trigger filling omitted column - mysql

I am trying to make make a trigger, that will fill column B with value from column A if column B was not explicitly set in insert query. (column B is set to allow NULL and to default to NULL value)
DELIMITER $$
CREATE TRIGGER trigger_name BEFORE INSERT ON my_table FOR EACH ROW
BEGIN
IF (NEW.valueB IS NULL) THEN SET NEW.valueB = NEW.valueA ;
END
$$
But I am getting this error (not very helpful).
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 '' at line 4
When I tried to locate this problematic empty string '' making the query like one word per line, mysql marked the line with '=' character as problematic.
I double checked the query for any non-ascii characters.
I am using mysql version 5.5.37-0ubuntu0.12.10.1 through commandline (eg not phpmyadmin).

You need to close the IF with END IF
DELIMITER $$
CREATE TRIGGER trigger_name BEFORE INSERT ON my_table
FOR EACH ROW
BEGIN
IF NEW.valueB IS NULL THEN
SET NEW.valueB = NEW.valueA ;
END IF ;
END;$$
delimiter ;
Check the example here http://dev.mysql.com/doc/refman/5.5/en/trigger-syntax.html

You forgot to close the IF statement. Read the syntax here. I think the code below will work for you.
DELIMITER $$
CREATE TRIGGER trigger_name BEFORE INSERT ON my_table
FOR EACH ROW
BEGIN
IF (NEW.valueB IS NULL) THEN
SET NEW.valueB = NEW.valueA ;
END IF
END $$
DELIMITER

Related

How to insert a value from a in another table via trigger

I want to create a trigger to insert a value in another table when a value is inserted in the first table.
So far my trigger looks like this:
CREATE TRIGGER tgIdPass
AFTER INSERT
ON tbuser FOR EACH ROW
BEGIN
DECLARE vIdPass INT
SET vIdPass = NEW.id
INSERT INTO tbpass.fkUser VALUES vIdPass
END
When I try to run the code, it gives this error "#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'SET vIdPass = NEW.id INSERT INTO tbpass.fkUser VALUES vIdPass END' at line 8"
So anyone can illuminate my on why I'm getting this error?
Need DELIMITERs and statement terminators.
DELIMITER //
CREATE TRIGGER tgIdPass
AFTER INSERT
ON tbuser FOR EACH ROW
BEGIN
DECLARE vIdPass INT; -- terminate statements
...
END
//
DELIMITER ;

Error SQL syntax in a trigger, MySQL

I receive this message "#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 6" but can not figure out what is wrong.
(position and points are MEDIUMINT, they are not primary key neither unique)
Anyone?
CREATE TRIGGER pointsAssigns
before INSERT ON MyTable
FOR EACH ROW
BEGIN
IF NEW.position>6 THEN
set NEW.points=5;
END IF;
END;
As #Mihai mentioned either add closing END and change the DELIMITER
DELIMITER //
CREATE TRIGGER pointsAssigns
BEFORE INSERT ON MyTable
FOR EACH ROW
BEGIN
IF NEW.position > 6 THEN
SET NEW.points = 5;
END IF;
END //
DELIMITER ;
Here is a SQLFiddle demo
or make it one-line trigger and then you don't need neither BEGIN...END block nor changing the DELIMITER
CREATE TRIGGER pointsAssigns
BEFORE INSERT ON MyTable
FOR EACH ROW
SET NEW.points = IF(NEW.position > 6, 5, NEW.points);
Here is a SQLFiddle demo

SQL trigger giving error

I'm trying to call a stored procedure to create multiple rows using some of the cell values of the new row inserted in the table resource but I'm getting an error. Here is my query:
CREATE TRIGGER `details` AFTER INSERT ON `resource`
FOR EACH ROW BEGIN
CALL addcopies(NEW.copies, NEW.id, NEW.location);
END;
#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 3
What am I doing wrong?
delimiter |
CREATE TRIGGER `details` AFTER INSERT ON `resource`
FOR EACH ROW BEGIN
CALL addcopies(NEW.copies, NEW.id, NEW.location);
END
|
delimiter ;
If you don't set another delimiter than ;, then the statement will end at the first ; and your trigger definition will be incomplete. You need to tell MySQL that the statement should end at the delimiter you defined. After that you can set the delimiter back with delimiter ;

#1064 - You have an error in your SQL syntax; , SAMP MYSQL Error

I get this error on my PHPMyAdmin
#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 3
[EDIT]
Sorry, I didn't put the full thing before, i've already had an BEGIN and an END, Look.
CREATE TRIGGER `accounts_insert` BEFORE INSERT ON `accounts`
FOR EACH ROW BEGIN
SET new.RegiDate = now();
SET new.UpdateDate = now();
END;
This is the line ^^
If your trigger is only one instruction, you don't need the begin keyword:
create trigger `accounts_insert` before insert on `accounts`
for each row
set new.RegiDate = now();
If your trigger has multiple instructions, then you need to:
Change the default delimiter
Enclose the trigger instructions in a begin...end block
Restore the default delimiter
Example:
delimiter $$
create trigger `accounts_insert_2` before insert on `accounts`
for each row
begin
set new.RegiDate = now();
set #newRows = coalesce(#newRows, 0) + 1; -- Just a dummy example
end; &&
delimiter ;
Why the delimiter $$ and delimiter ; are important?
When you write a query, MySQL assumes that it ends where it finds the first standard "instruction terminator" (;). Since your trigger has more than one instruction, and every instruction must end with ;, then MySQL assumes that the trigger definition is ended, and (of course) fails to execute it. So, what can be done? Simply redefine temporally the standard instruction terminator:
delimiter $$
Now, each instruction must end with $$ to be executed. Define your trigger, and, when you want to end the definition, use your new temporary instruction terminator $$, and then redefine the terminator to the normal ;:
delimiter ;
This must be done every time you define a multi insstruction trigger or a stored procedure or function.

Something wrong in creating mysql trigger

Hi i'm trying to create below trigger
CREATE TRIGGER TRIGBEFORE INSERT ON employee
FOR EACH
ROW
BEGIN
UPDATE employee SET userId = userId +1 WHERE userId >1;
END
it is giving me below mysql error, please suggest what is wrong in it.
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 5
you forgot to set the delimiter and misspelled a word:
delimiter |
CREATE TRIGGER TRIG BEFORE INSERT ON employee
FOR EACH ROW BEGIN
UPDATE employee SET userId = userId +1 WHERE userId >1;
END;
|
delimiter ;
If you don't set another delimiter than ; the statement will end at the first ; and your trigger definition will be incomplete. You need to tell MySQL that the stamentment should end at the delimiter you defined. After that you can set the delimiter back with delimiter ;
I think you have a typo mistake TRIGBEFORE: manual here
CREATE TRIGGER trigger_name BEFORE INSERT ON ...