В MySQL є достатня кількість вбудованих функцій і фич, які спрощують код. На жаль, не всі програмісти знають про це і використовують свої «велосипеди».
ON DUPLICATE KEY UPDATE
Наприклад, є таблиця з якимись об'єктами (користувачі, пости і т.д.). Якщо даний об'єкт з таким-то унікальну властивість вже існує, то апдейт якесь властивість у нього. Якщо об'єкта не існує, то вставляємо новий рядок. Часто можна зустріти такий код:
// знаходимо об'єкт
$ Row = query ( 'SELECT * FROM table WHERE id = 1');
// перевіряємо чи є такий об'єкт
if ($ row) // робимо апдейт
query ( 'UPDATE table SET column = column + 1 WHERE id = 1');
>
else // робимо вставку
query ( 'INSERT INTO table SET column = 1, id = 1');
>
Подібну конструкцію можна замінити одним запитом без участі php. за умови наявності первинного або унікального ключа по полю id:
INSERT INTO table SET column = 1, id = 1 ON DUPLICATE KEY UPDATE column = column + 1
INSERT IGNORE
Найчастіше при додавання в таблицю, що має UNIQUE індекс або PRIMARY KEY. нового рядка, дуже корисним буває синтаксис INSERT IGNORE. Використання даного синтаксису зручно в разі випадкового дублювання ключа при вставці, тобто сама вставка нічого очікувати зроблена, при цьому не буде припинено виконання.
Звичайний алгоритм:
1) перевірити наявність рядка в таблиці по ключу (SELECT)
2) вставити рядок в разі відсутності дублювання ключа (INSERT)
// знаходимо об'єкт
$ Row = query ( 'SELECT * FROM table WHERE id = 1');
// якщо такого об'єкта немає, то вставляємо новий запис
if (! $ row) query ( 'INSERT INTO table ...');
>
Тепер напишемо тільки один запит INSERT IGNORE без участі php
query ( 'INSERT IGNORE INTO table ...') // вставка
Не потрібно придумувати свої алгоритми і писати зайвий код - нехай за вас думає MySQL.