Я думав і читав і все таки знайшов вирішення цього питання))) Треба юзати користувацькі функції для таких цілей. Створюємо свою mysql функцію котра буде закріплена за вибраною базою даних. Нехай таблиця буде така:
CREATE TABLE IF NOT EXISTS `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`login` varchar(50) DEFAULT NULL,
`password` varchar(50) DEFAULT NULL,
`email` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;
Фунцію назвемо myInsert, якщо ви не знаєте як додавати власні функції в mysql то читати тут і тут.
І так функція
DELIMITER //
CREATE FUNCTION myInsert(l VARCHAR(20), p VARCHAR(20), email VARCHAR(20))
RETURNS VARCHAR(20)
BEGIN
DECLARE s VARCHAR(20);
IF ( (SELECT IF( (SELECT id FROM users WHERE login = l), 1, 0 ) ) = 1) THEN SET s = 'exists';
ELSE INSERT INTO USERS VALUES (' ', l, p, email); SET s = 'good insert';
END IF;
RETURN s;
END //
DELIMITER ;
Фунція приймає три параметри і якщо не виконується умова ( (SELECT IF( (SELECT id FROM users WHERE login = l), 1, 0 ) ) = 1) функція вносить запис в базу і повертає good insert, в іншому випадку функція повертає exists;
Перевіряти ось так:
SELECT myInsert(
'taraskin', 'qwerty', 'tarasko@сайт-злодій'
);
/* Результат
myInsert( 'taraskin', 'qwerty', 'tarasko@сайт-злодій' )
good insert
*/
//Пробуємо ще разок
SELECT myInsert(
'taraskin', 'qwerty', 'tarasko@сайт-злодій'
);
/* Результат
myInsert( 'taraskin', 'qwerty', 'tarasko@сайт-злодій' )
exists
*/
Так що переробляйте під свою таблицю і користуйтеся. Доречі, функції видаляються так: