Mysql Insert Replace et auto_increment sont dans un bateau

Mysql Insert Replace et auto_increment sont dans un bateau - SQL/NoSQL - Programmation

Marsh Posté le 20-09-2005 à 12:03:52    

Bonjour
 
voila j'ai une table :

CREATE TABLE `RateTable` (
  `RateID` int(4) unsigned NOT NULL auto_increment,
  `AreaCode` varchar(20) NOT NULL default '',
  `ReselerID` tinyint(4) NOT NULL default '0',
  `EffectUT` int(11) NOT NULL default '0',
  `AreaID` int(2) unsigned NOT NULL default '0',
  `AreaName` varchar(35) NOT NULL default '',
  `Price` float NOT NULL default '0',
  `InitTime` tinyint(4) NOT NULL default '0',
  `IncrementTime` tinyint(4) NOT NULL default '0',
  `EffectDate` date NOT NULL default '0000-00-00',
  PRIMARY KEY  (`RateID`),
  UNIQUE KEY `AreaCode_2` (`AreaCode`,`ReselerID`,`EffectUT`),
  KEY `EffectUT` (`EffectUT`),
  FULLTEXT KEY `AreaCode` (`AreaCode`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1  AUTO_INCREMENT=34104 ;
   


jusqu'a présent (avant l'ajout du champ RateID en auto_increment) j'utilisait REPLACE pour insérer ou mettre a jour des données.
le pb maintenant c'est que replace me change mon auto_incrément (car il effectue un DELETE avant de refaire un INSERT)
 
j'ai donc pensé utiliser la fonction avec ON DUPLICATE KEY ..

INSERT INTO RateTable
SELECT ''  as RateId,
          AreaCode,
          ReselerID,
          UNIX_TIMESTAMP(EffectDate) as 'EffectUT',
          0 as 'AreaID',
          AreaName,
          Price,  
          0 as 'InitTime',
          0 as 'IncrementTime',
          EffectDate
FROM TMP_Rate
ON DUPLICATE KEY UPDATE RateID = TMP_Rate.RateID
        ,AreaCode = TMP_Rate.AreaCode
        ,ReselerID= TMP_Rate.ReselerID
        ,EffectUT= UNIX_TIMESTAMP(TMP_Rate.EffectDate)
        ,AreaID = 0
        ,AreaName= TMP_Rate.AreaName
        ,Price= TMP_Rate.Price
        ,InitTime= 0
        ,IncrementTime= 0
        ,EffectDate=TMP_Rate.EffectDate;


mais apriori on peut pas pas faire un UPDATE comme cela ..
 
d'autres idée pour éviter de faire un test pour chaque ligne inséré.
 
merci.

Reply

Marsh Posté le 20-09-2005 à 12:03:52   

Reply

Marsh Posté le 21-09-2005 à 17:06:00    

up

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed