Mailinglisten-Archive |
Hallo ! Ok, die Syntax REPLACE tabelle SET... existiert. Da habe ich mich zugegebenermassen geirrt - vielleicht auch daher, weil diese Schreibweise dermassen Banane ist, dass ich sie in meinen ca. sechs Jahren MySQL niemals verwendet habe. ;-) 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. 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. 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. 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. 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. Beste Gruesse, Ralf -- : http://kuerbis.org -- Infos zur Mailingliste, zur Teilnahme und zum An- und Abmelden unter -->> http://www.4t2.com/mysql
php::bar PHP Wiki - Listenarchive