⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 trigger.test

📁 这是linux下运行的mysql软件包,可用于linux 下安装 php + mysql + apach 的网络配置
💻 TEST
📖 第 1 页 / 共 3 页
字号:
create trigger t2_ai after insert on t2  for each row insert into t1 values (new.f2+1);# Allow SP resursion to be show that it has not influence hereset @SAVE_SP_RECURSION_LEVELS=@@max_sp_recursion_depth;set @@max_sp_recursion_depth=100;--error ER_CANT_UPDATE_USED_TABLE_IN_SF_OR_TRGinsert into t1 values (1);set @@max_sp_recursion_depth=@SAVE_SP_RECURSION_LEVELS;select * from t1;select * from t2;drop trigger t1_ai;drop trigger t2_ai;create trigger t1_bu before update on t1  for each row insert into t1 values (2);--error ER_CANT_UPDATE_USED_TABLE_IN_SF_OR_TRGupdate t1 set f1= 10;select * from t1;drop trigger t1_bu;create trigger t1_bu before update on t1  for each row delete from t1 where f1=new.f1;--error ER_CANT_UPDATE_USED_TABLE_IN_SF_OR_TRGupdate t1 set f1= 10;select * from t1;drop trigger t1_bu;# This should work toughcreate trigger t1_bi before insert on t1  for each row set new.f1=(select sum(f1) from t1);insert into t1 values (3);select * from t1;drop trigger t1_bi;drop tables t1, t2;# Tests for bug #12704 "Server crashes during trigger execution".# If we run DML statements and CREATE TRIGGER statements concurrently# it may happen that trigger will be created while DML statement is# waiting for table lock. In this case we have to reopen tables and# recalculate prelocking set.# Unfortunately these tests rely on the order in which tables are locked# by statement so they are non determenistic and are disabled.--disable_parsingcreate table t1 (id int);create table t2 (id int);create table t3 (id int);create function f1() returns int return (select max(id)+2 from t2);create view v1 as select f1() as f;# Let us check that we notice trigger at allconnection addconroot1;lock tables t2 write;connection default;send insert into t1 values ((select max(id) from t2)), (2);--sleep 1connection addconroot2;create trigger t1_trg before insert on t1 for each row set NEW.id:= 1;connection addconroot1;unlock tables;connection default;reap;select * from t1;# Check that we properly calculate new prelocking setinsert into t2 values (3);connection addconroot1;lock tables t2 write;connection default;send insert into t1 values ((select max(id) from t2)), (4);--sleep 1connection addconroot2;drop trigger t1_trg;create trigger t1_trg before insert on t1 for each row  insert into t3 values (new.id);connection addconroot1;unlock tables;connection default;reap;select * from t1;select * from t3;# We should be able to do this even if fancy views are involvedconnection addconroot1;lock tables t2 write;connection default;send insert into t1 values ((select max(f) from v1)), (6);--sleep 1connection addconroot2;drop trigger t1_trg;create trigger t1_trg before insert on t1 for each row  insert into t3 values (new.id + 100);connection addconroot1;unlock tables;connection default;reap;select * from t1;select * from t3;# This also should work for multi-update# Let us drop trigger to demonstrate that prelocking set is really# rebuiltdrop trigger t1_trg;connection addconroot1;lock tables t2 write;connection default;send update t1, t2 set t1.id=10 where t1.id=t2.id;--sleep 1connection addconroot2;create trigger t1_trg before update on t1 for each row  insert into t3 values (new.id);connection addconroot1;unlock tables;connection default;reap;select * from t1;select * from t3;# And even for multi-update converted from ordinary update thanks to viewdrop view v1;drop trigger t1_trg;create view v1 as select t1.id as id1 from t1, t2 where t1.id= t2.id;insert into t2 values (10);connection addconroot1;lock tables t2 write;connection default;send update v1 set id1= 11;--sleep 1connection addconroot2;create trigger t1_trg before update on t1 for each row  insert into t3 values (new.id + 100);connection addconroot1;unlock tables;connection default;reap;select * from t1;select * from t3;drop function f1;drop view v1;drop table t1, t2, t3;--enable_parsing## Test for bug #13399 "Crash when executing PS/SP which should activate# trigger which is now dropped". See also test for similar bug for stored# routines in sp-error.test (#12329).create table t1 (id int);create table t2 (id int);create trigger t1_bi before insert on t1 for each row insert into t2 values (new.id);prepare stmt1 from "insert into t1 values (10)";create procedure p1() insert into t1 values (10); call p1();# Actually it is enough to do FLUSH TABLES instead of DROP TRIGGERdrop trigger t1_bi;# Server should not crash on these two statementsexecute stmt1;call p1();deallocate prepare stmt1;drop procedure p1;# Let us test more complex situation when we alter trigger in such way that# it uses different set of tables (or simply add new trigger).create table t3 (id int);create trigger t1_bi after insert on t1 for each row insert into t2 values (new.id);prepare stmt1 from "insert into t1 values (10)";create procedure p1() insert into t1 values (10); call p1();# Altering trigger forcing it use different set of tablesdrop trigger t1_bi;create trigger t1_bi after insert on t1 for each row insert into t3 values (new.id);# Until we implement proper mechanism for invalidation of PS/SP when table# or SP's are changed these two statements will fail with 'Table ... was# not locked' error (this mechanism should be based on the new TDC).--error 1100execute stmt1;--error 1100call p1();deallocate prepare stmt1;drop procedure p1;drop table t1, t2, t3;## BUG#13549 "Server crash with nested stored procedures".# Server should not crash when during execution of stored procedure# we have to parse trigger/function definition and this new trigger/# function has more local variables declared than invoking stored# procedure and last of these variables is used in argument of NOT# operator.#create table t1 (a int);DELIMITER //;CREATE PROCEDURE `p1`()begin  insert into t1 values (1);end//create trigger trg before insert on t1 for each row begin   declare done int default 0;  set done= not done;end//DELIMITER ;//CALL p1();drop procedure p1;drop table t1;## Test for bug #14863 "Triggers: crash if create and there is no current# database". We should not crash and give proper error when database for# trigger or its table is not specified and there is no current database.#connection addconwithoutdb;--error ER_NO_DB_ERRORcreate trigger t1_bi before insert on test.t1 for each row set @a:=0;--error ER_NO_DB_ERRORcreate trigger test.t1_bi before insert on t1 for each row set @a:=0;--error ER_NO_DB_ERRORdrop trigger t1_bi;connection default;## Tests for bug #13525 "Rename table does not keep info of triggers"# and bug #17866 "Problem with renaming table with triggers with fully# qualified subject table".#create table t1 (id int);create trigger t1_bi before insert on t1 for each row set @a:=new.id;create trigger t1_ai after insert on test.t1 for each row set @b:=new.id;insert into t1 values (101);select @a, @b;select trigger_schema, trigger_name, event_object_schema,       event_object_table, action_statement from information_schema.triggers       where event_object_schema = 'test';rename table t1 to t2;# Trigger should work after renameinsert into t2 values (102);select @a, @b;select trigger_schema, trigger_name, event_object_schema,       event_object_table, action_statement from information_schema.triggers       where event_object_schema = 'test';# Let us check that the same works for simple ALTER TABLE ... RENAMEalter table t2 rename to t3;insert into t3 values (103);select @a, @b;select trigger_schema, trigger_name, event_object_schema,       event_object_table, action_statement from information_schema.triggers       where event_object_schema = 'test';# And for more complex ALTER TABLEalter table t3 rename to t4, add column val int default 0;insert into t4 values (104, 1);select @a, @b;select trigger_schema, trigger_name, event_object_schema,       event_object_table, action_statement from information_schema.triggers       where event_object_schema = 'test';# .TRN file should be updated with new table namedrop trigger t1_bi;drop trigger t1_ai;drop table t4;# Rename between different databases if triggers exist should failcreate database mysqltest;use mysqltest;create table t1 (id int);create trigger t1_bi before insert on t1 for each row set @a:=new.id;insert into t1 values (101);select @a;select trigger_schema, trigger_name, event_object_schema,       event_object_table, action_statement from information_schema.triggers       where event_object_schema = 'test' or event_object_schema = 'mysqltest';--error ER_TRG_IN_WRONG_SCHEMArename table t1 to test.t2;insert into t1 values (102);select @a;select trigger_schema, trigger_name, event_object_schema,       event_object_table, action_statement from information_schema.triggers       where event_object_schema = 'test' or event_object_schema = 'mysqltest';# There should be no fantom .TRN files --error ER_TRG_DOES_NOT_EXISTdrop trigger test.t1_bi;# Let us also check handling of this restriction in ALTER TABLE ... RENAME--error ER_TRG_IN_WRONG_SCHEMAalter table t1 rename to test.t1;insert into t1 values (103);select @a;select trigger_schema, trigger_name, event_object_schema,       event_object_table, action_statement from information_schema.triggers       where event_object_schema = 'test' or event_object_schema = 'mysqltest';# Again there should be no fantom .TRN files --error ER_TRG_DOES_NOT_EXISTdrop trigger test.t1_bi;--error ER_TRG_IN_WRONG_SCHEMAalter table t1 rename to test.t1, add column val int default 0;insert into t1 values (104);select @a;select trigger_schema, trigger_name, event_object_schema,       event_object_table, action_statement from information_schema.triggers       where event_object_schema = 'test' or event_object_schema = 'mysqltest';# Table definition should not changeshow create table t1;# And once again check for fantom .TRN files --error ER_TRG_DOES_NOT_EXISTdrop trigger test.t1_bi;drop trigger t1_bi;drop table t1;drop database mysqltest;use test;# And now let us check that the properly handle rename if there is some# error during it (that we rollback such renames completely).create table t1 (id int);create trigger t1_bi before insert on t1 for each row set @a:=new.id;create trigger t1_ai after insert on t1 for each row set @b:=new.id;insert into t1 values (101);select @a, @b;select trigger_schema, trigger_name, event_object_schema,       event_object_table, action_statement from information_schema.triggers       where event_object_schema = 'test';# Trick which makes update of second .TRN file impossiblesystem echo dummy >$MYSQLTEST_VARDIR/master-data/test/t1_ai.TRN~;system chmod 000 $MYSQLTEST_VARDIR/master-data/test/t1_ai.TRN~;--error 1rename table t1 to t2;# 't1' should be still there and triggers should work correctlyinsert into t1 values (102);select @a, @b;select trigger_schema, trigger_name, event_object_schema,       event_object_table, action_statement from information_schema.triggers       where event_object_schema = 'test';system chmod 600 $MYSQLTEST_VARDIR/master-data/test/t1_ai.TRN~;system rm $MYSQLTEST_VARDIR/master-data/test/t1_ai.TRN~;# Let us check that updates to .TRN files were rolled back toodrop trigger t1_bi;drop trigger t1_ai;drop table t1;# Test for bug #16829 "Firing trigger with RETURN crashes the server"# RETURN is not supposed to be used anywhere except functions, so error# should be returned when one attempts to create trigger with RETURN.create table t1 (i int);--error ER_SP_BADRETURNcreate trigger t1_bi before insert on t1 for each row return 0;insert into t1 values (1);drop table t1;# Test for bug #17764 "Trigger crashes MyISAM table"## Table was reported as crashed when it was subject table of trigger invoked# by insert statement which was executed with enabled bulk insert mode (which# is actually set of optimizations enabled by handler::start_bulk_insert())# and this trigger also explicitly referenced it.# The same problem arose when table to which bulk insert was done was also# referenced in function called by insert statement.create table t1 (a varchar(64), b int);create table t2 like t1;create trigger t1_ai after insert on t1 for each row  set @a:= (select max(a) from t1);insert into t1 (a) values  ("Twas"),("brillig"),("and"),("the"),("slithy"),("toves"),  ("Did"),("gyre"),("and"),("gimble"),("in"),("the"),("wabe");create trigger t2_ai after insert on t2 for each row  set @a:= (select max(a) from t2);insert into t2 select * from t1;load data infile '../std_data_ln/words.dat' into table t1 (a);drop trigger t1_ai;drop trigger t2_ai;# Test that the problem for functions is fixed as wellcreate function f1() returns int return (select max(b) from t1);insert into t1 values  ("All",f1()),("mimsy",f1()),("were",f1()),("the",f1()),("borogoves",f1()),  ("And",f1()),("the",f1()),("mome", f1()),("raths",f1()),("outgrabe",f1());create function f2() returns int return (select max(b) from t2);insert into t2 select a, f2() from t1;load data infile '../std_data_ln/words.dat' into table t1 (a) set b:= f1();drop table t1;drop function f1;drop function f2;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -