phpbar.de logo

Mailinglisten-Archive

Verwendung von replace

Verwendung von replace

Cybot 4t2.com-mysql at tekkno4u.de
Die Jul 15 16:43:40 CEST 2003


> Der Witz an REPLACE ist doch gerade, dass diese Anweisung
> wie ein INSERT verwendet werden kann. Deshalb empfinde ich die
> Moeglichkeit, dies wie beim UPDATE zu schreiben, als
> ziemlich suboptimal und unnoetig. 

ja und der zweite Witz is ja das man das REPLACE ja wie ein UPDATE 
verwenden kann, also finde ich es sehr praktisch das man es auch so 
schreiben kann...

;-)


> Dein Beispiel zeigt es ja:
> 
>>CREATE TABLE `t1` (
>>  `id` int(11) NOT NULL auto_increment,
>>  `data1` int(11) NOT NULL default '0',
>>  `data2` varchar(10) NOT NULL default '',
>>  PRIMARY KEY  (`id`)
>>) TYPE=MyISAM AUTO_INCREMENT=3 ;
>>
>>INSERT INTO `t1` VALUES (1, 1, 'eins');
>>INSERT INTO `t1` VALUES (2, 2, 'zwei');
>>
>>auf diese tabbele nun folgendes sql:
>>
>>REPLACE INTO `t1`
>>SET id = 1,
>>data1 = 3,
>>data2 = 'drei'
>>
>>ist erfolgreich, also ES FUNKTIONIERT!!
> 
> Richtig, aber dennoch doof. 

jein! ;-)

ich finde es wirklich sehr praktisch das es auch diese 'SET' 
schreibweiße sowohl beim REPLACE als auch beim INSERT gibt

weil man bei extrem langen Datensätzen mit '(...) VALUE (...)' schnell 
mal die Übersicht verlieren kann

und man bei 'SET' hingegen immer 'name = wert' hat, also gleich sieht 
welcher Wert in welche Spalte kommt

mach mal ne Änderung bei nem sql mit 'VALUES' was über 20 Spalten geht 
oder so, da kannste dich schnell mal verzetteln

> Denn id=1 wird ja nicht updated, daher wirkt das SET id=1 in meinen
> Augen etwas krumm. Insofern passt dazu doch eher
> UPDATE t1 SET data1=3, data2='drei' WHERE id=1;
> 
> Liest sich IMHO wesentlich logischer. 
> 
> Waehrenddessen REPLACE INTO 't1' VALUES (1,3,'drei'); ebenfalls
> funktioniert - hier ist wiederum klar, dass der Datensatz mit id 1
> aktualisiert wird. 

mhm, genauso klar wie als wenn man es mit 'SET' schreiben würde ...

> Bzw. man kann INSERT einfach durch REPLACE ersetzen, d.h. ein
> REPLACE INTO t1 VALUES (0,4,'vier');
> fuegt dank AUTO_INCREMENT eine neue Zeile ein. 

das geht bei 'SET' auch, weil INSERT auch die 'SET'-Schreibweise unterstützt

> Wenn man spaeter die id hat, genuegt das gleiche Kommando,
> etwa REPLACE INTO t1 VALUES (4,5,'sechs'), um jene Zeile
> zu aktualisieren. 
> 
> Kann praktisch sein, wenn man etwa mittels einer einzigen Funktion
> neue Datensaetze einfuegen sowie vorhandene updaten moechte. 
> 
> Falls jedoch die andere Syntax benutzt wird, kommt man um ein
> Neuschreiben der Anweisung nicht herum - dann laesst sich 
> gleich besser UPDATE verwenden.

tschaja, wie gesagt, stimmt nicht, da alle drei Funktion die 'SET' 
schreibweiße unterstützen.

und, wie gesagt, hat die 'SET'-Schreibweiße bei extrem vielen Spalten 
den entscheidenden Vorteil der besseren Übersichtlichkeit

aber ich verstehe deinen Standpunkt schon, is halt wohl größtenteils 
Gewöhnungssache

-- 
Sebastian Mendel

www.sebastianmendel.de
www.tekkno4u.de
www.nofetish.com

-- 
Infos zur Mailingliste, zur Teilnahme und zum An- und Abmelden unter
-->>  http://www.4t2.com/mysql 


php::bar PHP Wiki   -   Listenarchive