Заменяющий триггер mysql

lioncub

Новичок
Заменяющий триггер mysql

Есть таблица:
CREATE TABLE `traffic` (
`id` int AUTO_INCREMENT NOT NULL,
`name` varchar(45) NOT NULL,
`money` int NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE = MyISAM;

Как реализовать такой механизм, чтобы при обновлении записи, если такой не существует, то происхродит вставка этой записи?

DELIMITER |
CREATE TRIGGER `ins_row`
BEFORE UPDATE
ON `user`
FOR EACH ROW
BEGIN
DECLARE exists_id INTEGER;
SET exists_id=(SELECT id FROM user
WHERE name=NEW.name);
IF exists_ip IS NULL
THEN
INSERT INTO user SET name=NEW.name;
END IF;
END|
DELIMITER ;

примерно, такое....
или можно наоборот при вставке, если такое поле (name) существует, то выполняется только update
 

Beavis

Banned
для того чтобы если записи не существует - она создавалась ,не проще сделать что-то типа
INSERT ... ON DUPLICATE KEY UPDATE
или просто
REPLACE ?
 

lioncub

Новичок
Автор оригинала: Beavis
для того чтобы если записи не существует - она создавалась ,не проще сделать что-то типа
INSERT ... ON DUPLICATE KEY UPDATE
А как его использовать, у меня же autoincrement в таблице?

Конструкция станет намного медленее, поэтому от REPLACE'ов я отказался.

Можно ли использовать DUPLICATE KEY по определенным полям?
 

lioncub

Новичок
Всем спасибо, решил с помощью триггера.

зы
http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html
 

Gas

может по одной?
id там знать и не нужно, нужен unique index по name, а его в любом случае лучше создать.
И если задача такая как описано, можно использовать и unique index + insert ignore
 

lioncub

Новичок
спасибо, я понял что для ON DUPLICATE KEY нужен unique index, у меня его не нет!
 
Сверху