Current Path : /home/usr.opt/mysql57/mysql-test/suite/ndb/t/ |
FreeBSD hs32.drive.ne.jp 9.1-RELEASE FreeBSD 9.1-RELEASE #1: Wed Jan 14 12:18:08 JST 2015 root@hs32.drive.ne.jp:/sys/amd64/compile/hs32 amd64 |
Current File : /home/usr.opt/mysql57/mysql-test/suite/ndb/t/ndb_fk_locking.test |
-- source include/have_ndb.inc connect (con1,localhost,root,,test); connect (con2,localhost,root,,test); # # found in http://www.mysqlperformanceblog.com/2010/09/20/instrumentation-and-the-cost-of-foreign-keys/ # CREATE TABLE parent ( id INT NOT NULL AUTO_INCREMENT, bogus_column char(32), PRIMARY KEY (id) ) ENGINE=ndb; CREATE TABLE child ( id INT NOT NULL AUTO_INCREMENT, parent_id INT NOT NULL, bogus_column char(32), PRIMARY KEY (id), KEY (parent_id) ) ENGINE=ndb; alter table child add constraint fkname foreign key (parent_id) references parent (id) on update restrict on delete restrict; INSERT INTO parent (bogus_column) VALUES ('aaa'), ('bbb'), ('ccc'), ('ddd'), ('eee'); INSERT INTO child (parent_id,bogus_column) VALUES (1, 'aaa'), (2,'bbb'), (3, 'ccc'), (4, 'ddd'), (5, 'eee'); connection con1; START TRANSACTION; # session1 connection con2; START TRANSACTION; # session2 # session1 connection con1; UPDATE child SET parent_id = 5 WHERE parent_id = 4; #session2 connection con2; UPDATE parent SET bogus_column = 'new!' WHERE id = 4; #session2 connection con2; --error ER_LOCK_WAIT_TIMEOUT UPDATE parent SET bogus_column = 'new!' WHERE id = 5; connection con1; rollback; connection con2; rollback; alter table child drop foreign key fkname; # # But if you use no action instead of restrict # it works fine # alter table child add constraint fkname foreign key (parent_id) references parent (id); connection con1; START TRANSACTION; # session1 connection con2; START TRANSACTION; # session2 # session1 connection con1; UPDATE child SET parent_id = 5 WHERE parent_id = 4; #session2 connection con2; UPDATE parent SET bogus_column = 'new!' WHERE id = 4; #session2 connection con2; UPDATE parent SET bogus_column = 'new!' WHERE id = 5; connection con1; commit; connection con2; commit; drop table child, parent; # # bug#7412 # CREATE TABLE t1 ( id int(11) NOT NULL auto_increment, ref_id int(11) default NULL, PRIMARY KEY (id), KEY ref_id (ref_id), CONSTRAINT ref_id FOREIGN KEY (ref_id) REFERENCES t1 (id) ) ENGINE=ndb; INSERT INTO t1 VALUES (1, 1); DELETE FROM t1 WHERE id = 1; drop table t1;