2017-01-25 7 views
0

Мне нужно создать хранимую процедуру в mysql, чтобы удалить несколько записей из таблицы, указав список id как список, разделенный запятыми.MySql удаляет несколько записей с помощью запятых.

пример

(Пожалуйста, обратите внимание, что Id столбец в таблице является целым числом)

DELIMITER $$ 
CREATE DEFINER=`root`@`%` PROCEDURE `deleteLines`(IN $ids varchar(1000)) 
BEGIN 
    select * from line where $ids in ($ids); 
END$$ 
DELIMITER; 

CALL deleteLines('1,3,5,12'); 

Что является лучшим способом для удаления нескольких записей в этом сценарии?

+0

Создание sproc является конкретной частью краткого изложения? – Strawberry

+0

Зачем вам нужна процедура для такой простой задачи? http://stackoverflow.com/questions/2615566/delete-where-id-in-list –

+0

Эта хранимая процедура вызовет приложение. Вместо того, чтобы вызывать встроенный оператор SQL из приложения, я переместил его в хранимую процедуру. Позже, если потребуется модификация, будет легко сделать что угодно без компиляции приложения. –

ответ

1

Если вы должны сделать это, используйте find_in_set():

select * from line where find_in_set(id, in_ids); 

На самом деле, это определение должно выглядеть следующим образом, если вы хотите удалить записи:

DELIMITER $$ 
CREATE PROCEDURE `deleteLines`(
    IN in_ids varchar(1000) 
) 
BEGIN 
    delete from line 
    where find_in_set(id, in_ids); 
END$$ 
DELIMITER; 
+0

Спасибо, Это именно то, что я хотел. –

Смежные вопросы