1
0
mirror of https://github.com/MariaDB/server.git synced 2025-07-23 08:45:18 +03:00
Files
mariadb/mysql-test/suite/innodb/t/innodb-on-duplicate-update.test
Jan Lindström 60f51af755 MDEV-15042: INSERT ON DUPLICATE KEY UPDATE produces error 1032 (Can't find record)
Problem was that wrong error message was returned when insert
returned FK-error and there was no duplicate key to process.

row_ins
	If error from insert was DB_NO_REFERENCED_ROW and there was
	no duplicate key we should ignore ON DUPLICATE KEY UPDATE
	and return original error message.
2018-02-05 18:21:28 +02:00

87 lines
2.3 KiB
Plaintext

--source include/have_innodb.inc
#
# MDEV-13206: INSERT ON DUPLICATE KEY UPDATE foreign key fail
#
set sql_mode='';
set innodb_strict_mode=0;
CREATE TABLE `v` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
INSERT v values (1);
CREATE TABLE `vp` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`v_id` int(10) unsigned NOT NULL,
`p_id` int(10) unsigned NOT NULL,
`ppp` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `IDX_vp_uniq` (`v_id`,`p_id`),
KEY `FK_vp_v` (`v_id`),
CONSTRAINT `FK_vp_v` FOREIGN KEY (`v_id`) REFERENCES `v` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
INSERT vp VALUES (12, 1, 100, 'text12');
INSERT INTO `vp` (`id`,`ppp`) VALUES (12, 'test12-2') ON DUPLICATE KEY UPDATE `ppp` = VALUES(`ppp`);
SELECT * FROM vp;
DROP TABLE vp, v;
CREATE TABLE t1 (i int PRIMARY KEY) ENGINE=InnoDB;
INSERT into t1 values (1);
CREATE TABLE t2 (
i int not null primary key,
vi int not null,
m int,
UNIQUE KEY (vi),
CONSTRAINT `cc` FOREIGN KEY (vi) REFERENCES t1 (i) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB;
INSERT into t2 VALUES (1, 1, 100);
INSERT INTO t2 (i,m) VALUES (1, 2) ON DUPLICATE KEY UPDATE m=3;
SELECT * FROM t2;
DROP TABLE t2,t1;
CREATE TABLE t1 (i int PRIMARY KEY) ENGINE=InnoDB;
INSERT into t1 values (1);
CREATE TABLE t2 (
i int not null primary key,
vi int not null,
m int,
KEY (vi),
CONSTRAINT `cc` FOREIGN KEY (vi) REFERENCES t1 (i) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB;
INSERT into t2 VALUES (1, 1, 100);
INSERT INTO t2 (i,m) VALUES (1, 2) ON DUPLICATE KEY UPDATE m=3;
SELECT * FROM t2;
DROP TABLE t2, t1;
#
# MDEV-15042: INSERT ON DUPLICATE KEY UPDATE produces error 1032 (Can't find record)
#
CREATE TABLE parent (
id INT PRIMARY KEY AUTO_INCREMENT
) ENGINE=INNODB;
CREATE TABLE child (
parent_id INT NOT NULL PRIMARY KEY,
id INT NOT NULL,
CONSTRAINT fk_c_parent FOREIGN KEY (parent_id) REFERENCES parent (id) ON UPDATE CASCADE ON DELETE CASCADE
) ENGINE=INNODB;
--error ER_NO_REFERENCED_ROW_2
INSERT INTO child (id, parent_id) VALUES (1, 1);
--error ER_NO_REFERENCED_ROW_2
INSERT INTO child (id, parent_id) VALUES (1, 1) ON DUPLICATE KEY UPDATE id = VALUES(id);
select * from parent;
select * from child;
drop table child, parent;