[megoldva]mysql táblába: insert into if not exist

Sziasztok!

Csak pár napja babrálok mysqlben, több kevesebb sikerrel, most egy ideje bénázok itt ezzel és a segítségeteket kérném mert elfogyott a türlemem, tehát:

mysql> desc lekerdezett_nyomtatok;
+-------------+--------------+------+-----+-------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+--------------+------+-----+-------------------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| ip_cim | varchar(16) | YES | | NULL | |
| sorozatszam | varchar(100) | YES | | NULL | |
| szamlalo | varchar(100) | YES | | NULL | |
| ekkor | timestamp | NO | | CURRENT_TIMESTAMP | |
+-------------+--------------+------+-----+-------------------+----------------+
5 rows in set (0.00 sec)

mysql>

na most ezt a táblát szeretném feltölteni ipcímekkel úgy, hogy minden ipcím csak egyszer szerepeljen. Hogy tudnám ezt legegyszerűbben megoldani?
így adok hozzá ipcímet:
mysql> INSERT INTO lekerdezett_nyomtatok (ip_cim) VALUES ('10.0.1.65')

előre is köszönöm a segítséget.

Hozzászólások

Eloszor is egy show create table eredmenye jobb lett volna, mivel az megmutatja a kulcsokat meg indexeket is.
Szoval ha meg nincs akkor rakj egy unique key-t az ip_cim -re, igy biztositod hogy ne kerulhessen be duplikacio.
Azt hogy a duplikaciokor fellepo integrity constraint violation-t hogyan kezeled le mar a te dolgod. LEnyelheted kodbol (ha onnan toltod), vagy az insertbe teszel kvazi fals ON DUPLICATE KEY UPDATE-et: http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

------------------
http://www.youtube.com/watch?v=xnJwT_30p6k


mysql> show create table lekerdezett_nyomtatok;
+-----------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-----------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| lekerdezett_nyomtatok | CREATE TABLE `lekerdezett_nyomtatok` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`ip_cim` varchar(16) DEFAULT NULL,
`sorozatszam` varchar(100) DEFAULT NULL,
`szamlalo` varchar(100) DEFAULT NULL,
`ekkor` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8 |
+-----------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

Kódbol tolom pontosabban bash, tudom nem a legjobb de most ez van.
megnézem, hogy kell uniq key-t adni az ip_cim oszlopra, gondolom ha ezzel megvagyok akkor tudom használni a ON DUPLICATE KEY UPDATE-t.

ez az insertbe tevős fals ON DUPLICATE KEY UPDATE érdekelne bővebben.

szerk.: ja és köszönöm neked is a segítséget.

REPLACE INTO esetén nem lesz duplikáció, se hibajelzés. Ha nincs benne berakja, ha van előbb törli majd berakja. OK, nem a legjobb, de a legegyszerűbb megoldás. PRIMARY KEY vagy UNIQUE index kell hozzá.