# # Problem with INSERT ... SELECT # --disable_warnings drop table if exists t1,t2; --enable_warnings create table t1 (bandID MEDIUMINT UNSIGNED NOT NULL PRIMARY KEY, payoutID SMALLINT UNSIGNED NOT NULL); insert into t1 (bandID,payoutID) VALUES (1,6),(2,6),(3,4),(4,9),(5,10),(6,1),(7,12),(8,12); create table t2 (payoutID SMALLINT UNSIGNED NOT NULL PRIMARY KEY); insert into t2 (payoutID) SELECT DISTINCT payoutID FROM t1; --error 1062 insert into t2 (payoutID) SELECT payoutID+10 FROM t1; insert ignore into t2 (payoutID) SELECT payoutID+10 FROM t1; select * from t2; drop table t1,t2; # # bug in bulk insert optimization # test case by Fournier Jocelyn # CREATE TABLE `t1` ( `numeropost` bigint(20) unsigned NOT NULL default '0', `icone` tinyint(4) unsigned NOT NULL default '0', `numreponse` bigint(20) unsigned NOT NULL auto_increment, `contenu` text NOT NULL, `pseudo` varchar(50) NOT NULL default '', `date` datetime NOT NULL default '0000-00-00 00:00:00', `ip` bigint(11) NOT NULL default '0', `signature` tinyint(1) unsigned NOT NULL default '0', PRIMARY KEY (`numeropost`,`numreponse`) ,KEY `ip` (`ip`), KEY `date` (`date`), KEY `pseudo` (`pseudo`), KEY `numreponse` (`numreponse`) ) TYPE=MyISAM; CREATE TABLE `t2` ( `numeropost` bigint(20) unsigned NOT NULL default '0', `icone` tinyint(4) unsigned NOT NULL default '0', `numreponse` bigint(20) unsigned NOT NULL auto_increment, `contenu` text NOT NULL, `pseudo` varchar(50) NOT NULL default '', `date` datetime NOT NULL default '0000-00-00 00:00:00', `ip` bigint(11) NOT NULL default '0', `signature` tinyint(1) unsigned NOT NULL default '0', PRIMARY KEY (`numeropost`,`numreponse`), KEY `ip` (`ip`), KEY `date` (`date`), KEY `pseudo` (`pseudo`), KEY `numreponse` (`numreponse`) ) TYPE=MyISAM; INSERT INTO t2 (numeropost,icone,numreponse,contenu,pseudo,date,ip,signature) VALUES (9,1,56,'test','joce','2001-07-25 13:50:53' ,3649052399,0); INSERT INTO t1 (numeropost,icone,contenu,pseudo,date,signature,ip) SELECT 1618,icone,contenu,pseudo,date,signature,ip FROM t2 WHERE numeropost=9 ORDER BY numreponse ASC; show variables like '%bulk%'; INSERT INTO t1 (numeropost,icone,contenu,pseudo,date,signature,ip) SELECT 1718,icone,contenu,pseudo,date,signature,ip FROM t2 WHERE numeropost=9 ORDER BY numreponse ASC; DROP TABLE IF EXISTS t1,t2; # Addendum by Guilhem: # Check if a partly-completed INSERT SELECT in a MyISAM table goes # into the binlog create table t1(a int, unique(a)); insert into t1 values(2); create table t2(a int); insert into t2 values(1),(2); reset master; --error 1062 insert into t1 select * from t2; # The above should produce an error, but still be in the binlog; # verify the binlog : let $VERSION=`select version()`; --replace_result $VERSION VERSION show binlog events; drop table t1, t2;