A mysql beágyazott lekérdezései beillesztéskor figyelmen kívül hagyják a kulcsfontosságú kulcsok frissítését

A MySQL-ben elég beépített funkciók és funkciók vannak, amelyek egyszerűsítik a kódot. Sajnos nem minden programozó tud erről és használja a "kerékpárjaikat".







A DUPLICATE KULCSFONTOSSÁGÁBAN

Például van egy táblázat, amelyben vannak objektumok (felhasználók, bejegyzések stb.). Ha egy adott objektum, amely ilyen egyedi tulajdonsággal rendelkezik, már létezik, akkor az attribútumnak van valamilyen tulajdonsága vele. Ha az objektum nem létezik, akkor helyezze be az új sort. Gyakran megtalálja ezt a kódot:

// megtalálni az objektumot
$ row = lekérdezés ('SELECT * FROM table WHERE id = 1');
// ellenőrizze, van-e ilyen objektum
ha ($ sor) // frissít
lekérdezés ('UPDATE táblázat SET oszlop = oszlop + 1 WHERE id = 1');
>
Egyéb: // beillesztés
lekérdezés ('INSERT INTO table SET oszlop = 1, id = 1');






>

Egy ilyen konstrukció helyett egy lekérdezés helyett php. ha van egy elsődleges vagy egyedi kulcs az id mezőben:
INSERT INTO tábla SET oszlop = 1, id = 1 DUPLICATE KEY UPDATE oszlop = oszlop + 1

INSERT IGNORE

Gyakran, ha olyan táblázatot ad hozzá, amely UNIQUE vagy PRIMARY KEY. új sor, az INSERT IGNORE szintaxis nagyon hasznos. Ez a szintaxis használata kényelmesebb a kulcs beillesztése során történő véletlen duplikáció esetén, vagyis maga a betét nem fog végrehajtódni, és a végrehajtás nem fejeződik be.
A szokásos algoritmus:
1) ellenőrizze a sor jelenlétét a táblázatban (SELECT)
2) illesszen be egy sort, ha nincs többszörös kulcs (INSERT)

// megtalálni az objektumot
$ row = lekérdezés ('SELECT * FROM table WHERE id = 1');
// ha nincs ilyen objektum, akkor írjon be új rekordot
ha (! $ sor) lekérdezés ('INSERT INTO table ...');
>
Most csak egy kérést írunk be INSERT IGNORE php nélkül
lekérdezés ('INSERT IGNORE INTO table ...') // insert

Nem kell feltalálnia a saját algoritmusokat és írjon extra kódot - hagyja, hogy a MySQL gondolkodjon rád.