Bug #39953 | Triggers are not working properly with multi table updates | ||
---|---|---|---|
Submitted: | 9 Oct 2008 14:00 | Modified: | 13 May 2009 16:37 |
Reporter: | jocelyn fournier (Silver Quality Contributor) | Email Updates: | |
Status: | Closed | Impact on me: | |
Category: | MySQL Server: Stored Routines | Severity: | S3 (Non-critical) |
Version: | 5.0.68, 5.1.28 | OS: | Any |
Assigned to: | Staale Smedseng | CPU Architecture: | Any |
Tags: | qc |
[9 Oct 2008 14:00]
jocelyn fournier
[10 Oct 2008 6:15]
Valeriy Kravchuk
Thank you for a problem report. Verified with 5.1.28 also. In some cases subquery to t2 can be used as a workaround, like this: mysql> CREATE TRIGGER t_insert AFTER INSERT ON t2 FOR EACH ROW BEGIN UPDATE t1 -> set -> date_insert=NOW() WHERE t1.a IN (select t2.b from t2 where t2.a=NEW.a); E ND // Query OK, 0 rows affected (0.05 sec) mysql> INSERT INTO t2 (a,b) VALUES (1,2)// Query OK, 1 row affected (0.14 sec) mysql> select * from t1// +---+---------------------+ | a | date_insert | +---+---------------------+ | 2 | 2008-10-10 09:13:13 | +---+---------------------+ 1 row in set (0.00 sec)
[15 Oct 2008 7:57]
jocelyn fournier
Hi Valeriy, Thanks for the subselect workaround. Note that stored procedures are also affected by this issue. Regards, Jocelyn
[15 Oct 2008 20:40]
Omer Barnir
triage: setting tag to SR51MRU
[24 Feb 2009 15:44]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/67397 2804 Staale Smedseng 2009-02-24 Bug#39953 Triggers are not working properly with multi table updates open_table() is modified to take a flag instructing it not to check whether a table for update is used by the calling statement in a SF/trigger context. mysql_multi_update_prepare() is modified to do this check after the tables are opened and locks are (possibly) downgraded.
[11 Mar 2009 12:12]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/68866 2828 Staale Smedseng 2009-03-11 Bug#39953 Triggers are not working properly with multi table updates The check for conflicting use of tables in SP/triggers is moved to lock_tables(), to be performed after the possible downgrade of write locks has been done.
[12 Mar 2009 9:33]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/69002 2839 Staale Smedseng 2009-03-12 Bug#39953 Triggers are not working properly with multi table updates The problem is that tables used in a calling statement cannot currently be referenced in an SP/trigger. Read- only use of the table should be permitted. The check for conflicting use of tables in SP/triggers is moved to lock_tables(), to be performed after the possible downgrade of write locks has been done. @ mysql-test/r/trigger.result Results for the added test case is added. @ mysql-test/t/trigger.test A new test case is added, verifying correct table conflict resolution, both read-only and write. @ sql/sql_base.cc The check for conflicting use of tables in SP/triggers is moved to lock_tables(), to be performed after the possible downgrade of write locks has been done.
[27 Mar 2009 11:09]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/70659 2717 Staale Smedseng 2009-03-27 Bug#39953 Triggers are not working properly with multi table updates Attempt to execute trigger or stored function with multi-UPDATE which used - but didn't update - a table that was also used by the calling statement led to an error. Read-only reference to tables used in the calling statement should be allowed. This problem was caused by the fact that check for conflicting use of tables in SP/triggers was performed in open_tables(), and in case of multi-UPDATE we didn't know exact lock type at this stage. We solve the problem by moving this check to lock_tables(), so it can be performed after exact lock types for tables used by multi-UPDATE are determined. @ mysql-test/r/trigger.result Results for the added test case is added. @ mysql-test/t/trigger.test A new test case is added, verifying correct table multi-update conflict resolution, both read-only and write. @ sql/sql_base.cc The check for conflicting use of tables in SP/triggers is moved to lock_tables(), to be performed after the exact lock types have been determined. Also, an assert is added to open_ltable() to ensure this func is not used in a prelocked context.
[5 May 2009 18:51]
Bugs System
Pushed into 5.0.82 (revid:davi.arnaut@sun.com-20090505184158-dvmedh8n472y8np5) (version source revid:davi.arnaut@sun.com-20090505184158-dvmedh8n472y8np5) (merge vers: 5.0.82) (pib:6)
[5 May 2009 19:38]
Bugs System
Pushed into 5.1.35 (revid:davi.arnaut@sun.com-20090505190206-9xmh7dlc6kom8exp) (version source revid:davi.arnaut@sun.com-20090505190206-9xmh7dlc6kom8exp) (merge vers: 5.1.35) (pib:6)
[6 May 2009 14:06]
Bugs System
Pushed into 6.0.12-alpha (revid:svoj@sun.com-20090506125450-yokcmvqf2g7jhujq) (version source revid:horst@mysql.com-20090327184517-25eq077q2beocs6y) (merge vers: 6.0.11-alpha) (pib:6)
[13 May 2009 16:37]
Paul DuBois
Noted in 5.0.82, 5.1.35, 6.0.12 changelogs. Multiple-table UPDATE statements did not properly activate triggers.
[15 Jun 2009 8:25]
Bugs System
Pushed into 5.1.35-ndb-6.3.26 (revid:jonas@mysql.com-20090615074202-0r5r2jmi83tww6sf) (version source revid:jonas@mysql.com-20090615070837-9pccutgc7repvb4d) (merge vers: 5.1.35-ndb-6.3.26) (pib:6)
[15 Jun 2009 9:04]
Bugs System
Pushed into 5.1.35-ndb-7.0.7 (revid:jonas@mysql.com-20090615074335-9hcltksp5cu5fucn) (version source revid:jonas@mysql.com-20090615072714-rmfkvrbbipd9r32c) (merge vers: 5.1.35-ndb-7.0.7) (pib:6)
[15 Jun 2009 9:45]
Bugs System
Pushed into 5.1.35-ndb-6.2.19 (revid:jonas@mysql.com-20090615061520-sq7ds4yw299ggugm) (version source revid:jonas@mysql.com-20090615054654-ebgpz7elwu1xj36j) (merge vers: 5.1.35-ndb-6.2.19) (pib:6)
[15 Nov 2011 8:48]
Desmond Coertzen
Did this fix make is into 5.1.59? I'm having the same problem in 5.1.59. I'm calling a function that updates a table. A before-update triggers executes on the same table. I can do single table updates, but not multi table updates. ERROR 1442 (HY000): Can't update table '*****' in stored function/trigger because it is already used by statement which invoked this stored function/trigger. sucks to be me