Учите основы SQL: используйте транзакции. Кроме транзакции, придется использовать либо сохраненную процедуру, либо триггер BEFORE INSERT. С процедурой проще:
DELIMITER //;
CREATE PROCEDURE add()
BEGIN
SELECT @x = COUNT(id) FROM table;
IF @x < 10 THEN
INSERT INTO table ([fields]) VALUES ([field values]);
END IF;
END;
DELIMITER ;//
Потом - собсно транзакция и вызов процедуры:
START TRANSACTION;
CALL add();
COMMIT;
Объяснять как работают транзакции не буду. Скажу лишь, что коль в транзакции ничего не добавилось в таблицу - ничего страшного. А вот если ошибка вылезет - данные не изменятся. В этом и профит транзакций (кроме параллельных операций).
И да, LOCKS - наверное самая
забавная идея, которую довелось слышать за неделю мне =)
Для тех, кто не понял сарказма: запросы следует выполнять лишь тогда, когда?
а) нужно получить данные
б) нужно сохранить
уже готовые данные
С триггером придется поиграться...