Mailing List
Home
Forum Home
MySQL General - General MySQL discussion
MySQL++ - Programming with the C++ API to MySQL
MaxDB - Everything about MaxDB, formerly known as SAP DB
ODBC - ODBC with the MySQL Connector/ODBC driver
MySQL on Win32 - Runing MySQL on Windows 9x/Me/NT/2000/XP
Java Help - Mostly related to the MySQL Connector/J driver
Perl - Perl support for MySQL with DBI and DBD::mysql
GUI - MySQL GUI Tools
Announcement
Subjects
mysql openssl Question
ERROR 1045: Access denied for user: 'root@localhost ' (Using
password: NO)
Update one field with more fields from another table
Getting Identity after INSERT
ERROR 2002: Can 't connect to local MySQL server through socket
mysql test 4 1 fails with the gis test
MySQL Cluster Software
Downgrade Mysql from 4 to 3 23
Mysql 4 0 Oracle Stored Procedure Trigger Conversion
Can 't access mysql after kernel upgrade
Executing MySQL Commands From Within C Program
Comparing and writing out BLOBS
Preventing Duplicate Entries
FULLTEXT query format question
Strange behavior, Table Level Permission
Does the binary log enabling affect the MySQL performances?
mysql:it 's a db not a dbms how it 's possible?!
mysql have same function mthod as Oracle decode()
 
My first trigger in MySQL

My first trigger in MySQL

2007-10-07       - By Baron Schwartz

 Back
Hi,

Steffan A. Cline wrote:
> on 10/7/07 12:26 PM, Steffan A. Cline at steffan@(protected) wrote:
>
>> I am new to triggers and am trying to figure this out. The goal I have is to
>> set it up so that after a row in the users table is updated it will check to
>> see if the affected row has a username in the username field and if not to
>> update that row with a concatenation of firstname + " " + lastname.
>>
>> Does anyone have a good example of how to do this?
>>
>>
>>
>>
>> Thanks
>>
>> Steffan
>>
> I tried this :
> CREATE TRIGGER username_check AFTER UPDATE ON `users`
> FOR EACH ROW
>     UPDATE users SET users.username = concat(users.firstname,"
> ",users.lastname) where users.id=NEW.id;
> END
> ;
>
> But it throws the error:
>
> "Can't update table 'users' in stored function/trigger because it is already
> used by statement which invoked this stored function/trigger."
>
> Is this to stop infinite recursion? Is there anyway around this?
>
> In thinking on this if I do a BEFORE rather than AFTER is there anyway to
> test the query to see if it is updating the table and if there is no
> username being submitted to append it to the query so it will be set without
> causing such a recursion?

You're running into one of their many limitations.  See:

http://dev.mysql.com/doc/refman/5.0/en/routine-restrictions.html

I'm not an expert on them, but as a side note:  I personally don't use
triggers in MySQL.  I consider them rather poorly implemented in MySQL 5
and I'm afraid of them breaking replication, or doing something else I
don't like.  When we took a look at them at my employer, we found basic
things wrong with them, like this:

http://bugs.mysql.com/bug.php?id=19686

Therefore I do not trust them at all, and that's why I don't know a
whole lot about how to use them :)

Baron

--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/mysql?unsub=mysql@(protected)