2016-01-29 6 views
0

Возможно, этот вопрос задавался много раз, но не работал в моем случае.Вставьте запись, если она не существует в mysql

Таблица схема

CREATE TABLE `tasks_taskstatus` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `name` varchar(40) NOT NULL, 
    `video_status` tinyint(1) NOT NULL, 
    `creative_status` tinyint(1) NOT NULL DEFAULT '0', 
    `missing_asset` tinyint(1) NOT NULL, 
    `is_finished` tinyint(1) NOT NULL, 
    `share_with_am` tinyint(1) NOT NULL, 
    `ordering` smallint(6) NOT NULL, 
    `ready_to_begin` tinyint(1) NOT NULL, 
    `in_progress` tinyint(1) NOT NULL, 
    `is_conformed` tinyint(1) NOT NULL, 
    `order_item_equivalent` varchar(60) DEFAULT '', 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB AUTO_INCREMENT=122 DEFAULT CHARSET=latin1; 

мне нужно вставить запись в базе данных MySQL, если она не была уже существует, ниже запрос я пытался использовать.

INSERT IGNORE INTO `tasks_taskstatus` 
SET `name`='Saveout - In Progress', 
`video_status`=1, 
`creative_status`=0, 
`missing_asset`=0, 
`is_finished`=0, 
`share_with_am`=0, 
`ordering`=4, 
`ready_to_begin`=0, 
`in_progress`=1, 
`is_conformed`=0, 
`order_item_equivalent`=''; 

Но каждый раз, когда я запускаю этот запрос новая запись создавалась, так что плохого в приведенном выше заявлении, и как я могу изменить приведенный выше запрос, чтобы вставить данные/запись только тогда, когда не существует?

+0

Показать вашу схему таблицы. –

+0

Возможный дубликат [Как «вставить, если не существует» в MySQL?] (Http://stackoverflow.com/questions/1361340/how-to-insert-if-not-exists-in-mysql) –

+0

@BrettDeWoody Tried все способы, упомянутые в вашей ссылке комментариев, но не работали –

ответ

0

Вы не INSERT a id (это ваш первичный ключ), поэтому AUTO_INCREMENT запускает новый идентификатор и вставляет новую запись.

Задайте себе вопрос: как MySQL знает , который запись обновляется? Если вы знаете, что (например, ответ может быть «name»), вы можете изменить свои ключи, и это должно сработать.

Если комбинация name и video_status должен быть уникальным, создать дополнительный ключ:

ALTER TABLE `tasks_taskstatus` ADD UNIQUE(`name`, `video_status`); 
+0

ok записи должны быть дифференцированы на основе полей имени и видео_стата –

+0

как насчет этого? 'INSERT INTO' tasks_taskstatus' ('name',' video_status', 'creative_status',' missing_asset', 'is_finished',' share_with_am', 'ordering',' ready_to_begin', 'in_progress',' is_conformed', 'order_item_equivalent') VALUES ('Saveout - In Progress', 1, 0, 0, 0, 0, 4, 0, 1, 0, '') ГДЕ НЕ СУЩЕСТВУЕТ (SELECT * from 'tasks_taskstatus' WHERE' name' = 'Saveout - In Progress 'AND 'video_status' = 1);' –

+0

@shivakrishna, который вставляет новую запись. 'INSERT IGNORE' и' REPLACE' работают, если бы в противном случае было бы нарушение ключа. Измените схему таблиц, чтобы добавить ключ 'UNIQUE' в' name' и 'video_status'. –