Ich bin nicht wirklich darauf hindeutet, dass Sie dies tun, als UNIQUE
Index wie von Piskvor vorgeschlagen und andere ist eine weit bessere Art und Weise, es zu tun, aber man kann tatsächlich tun, was Sie versucht haben:
CREATE TABLE `table_listnames` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(255) NOT NULL,
`address` varchar(255) NOT NULL,
`tele` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB;
Legen Sie einen Datensatz:
INSERT INTO table_listnames (name, address, tele)
SELECT * FROM (SELECT 'Rupert', 'Somewhere', '022') AS tmp
WHERE NOT EXISTS (
SELECT name FROM table_listnames WHERE name = 'Rupert'
) LIMIT 1;
Query OK, 1 row affected (0.00 sec)
Records: 1 Duplicates: 0 Warnings: 0
SELECT * FROM `table_listnames`;
+----+--------+-----------+------+
| id | name | address | tele |
+----+--------+-----------+------+
| 1 | Rupert | Somewhere | 022 |
+----+--------+-----------+------+
erneut versuchen, den gleichen Datensatz einfügen:
INSERT INTO table_listnames (name, address, tele)
SELECT * FROM (SELECT 'Rupert', 'Somewhere', '022') AS tmp
WHERE NOT EXISTS (
SELECT name FROM table_listnames WHERE name = 'Rupert'
) LIMIT 1;
Query OK, 0 rows affected (0.00 sec)
Records: 0 Duplicates: 0 Warnings: 0
+----+--------+-----------+------+
| id | name | address | tele |
+----+--------+-----------+------+
| 1 | Rupert | Somewhere | 022 |
+----+--------+-----------+------+
einen anderen Datensatz einfügen:
INSERT INTO table_listnames (name, address, tele)
SELECT * FROM (SELECT 'John', 'Doe', '022') AS tmp
WHERE NOT EXISTS (
SELECT name FROM table_listnames WHERE name = 'John'
) LIMIT 1;
Query OK, 1 row affected (0.00 sec)
Records: 1 Duplicates: 0 Warnings: 0
SELECT * FROM `table_listnames`;
+----+--------+-----------+------+
| id | name | address | tele |
+----+--------+-----------+------+
| 1 | Rupert | Somewhere | 022 |
| 2 | John | Doe | 022 |
+----+--------+-----------+------+
Und so weiter ...
mögliche Duplikat von [Wie einfügen ', wenn nicht existiert' in MySQL?] (http://StackOverflow.com/Questions/1361340/How-to-insert-if-not-exists -in-mysql) – warren
Alle aktuellen Antworten auf diese oder die Duples gehen davon aus, dass Sie einen eindeutigen Index hinzufügen können. Manchmal basiert die Entscheidung auf einer Geschäftslogik, die nicht dem gesamten Tisch auferlegt werden kann. Wenn Sie beispielsweise mehrere Zeilen mit einem bestimmten Wert in einer Spalte zulassen, wird ein anderer Wert in der Spalte nur in einer Zeile angezeigt. Wie schaffen wir das? – Oscar
siehe auch: http://Stackoverflow.com/q/1361340/4418 – warren