SORU
2 Temmuz 2010, Cuma


MySQL: kayıt Ekle değilse tablo var

Aşağıdaki sorguyu yürütmek için çalışıyorum:

INSERT INTO table_listnames (name, address, tele)
VALUES ('Rupert', 'Somewhere', '022')
WHERE NOT EXISTS (
    SELECT name FROM table_listnames WHERE name='value'
);

Ama bu bir hata döndürür. Temelde 'adı' kayıt alanı zaten varsa yeni adı benzersiz olup olmadığını kontrol etmek için nasıl bir kayıt var mı? Eğer bir kayıt eklemek istemiyorum

CEVAP
2 Temmuz 2010, Cuma


Değilim aslında düşündüren bunu bu kadar UNIQUE dizin olarak önerilen tarafından Piskvor ve diğer bir çok daha az var, ama tam olarak ne olduğunu denemeden:

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;

Ekle kayıt:

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  |
 ---- -------- ----------- ------ 

Aynı kaydı tekrar eklemek için:

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  |
 ---- -------- ----------- ------ 

Farklı bir kayıt eklemek için:

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  |
 ---- -------- ----------- ------ 

.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BigBoyTV

    BigBoyTV

    25 EYLÜL 2013
  • Numberphile

    Numberphile

    15 EYLÜL 2011
  • paulandstorm

    paulandstorm

    4 EYLÜL 2006