106 lines
2.1 KiB
Plaintext
106 lines
2.1 KiB
Plaintext
-- 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;
|