Клубове Дир.бг
powered by diri.bg
търси в Клубове diri.bg Разширено търсене

Вход
Име
Парола

Клубове
Dir.bg
Взаимопомощ
Горещи теми
Компютри и Интернет
Контакти
Култура и изкуство
Мнения
Наука
Политика, Свят
Спорт
Техника
Градове
Религия и мистика
Фен клубове
Хоби, Развлечения
Общества
Я, архивите са живи
Клубове Дирене Регистрация Кой е тук Въпроси Списък Купувам / Продавам 23:43 29.04.25 
Компютри и Интернет
   >> Бази данни
*Кратък преглед

Тема Помощ за MySQL заявка DELETE + SELECTнови  
Авторcaller (Нерегистриран)
Публикувано14.11.06 15:08



Искам да изтрия няколко реда от таблицата. Само че да имам информация за изтритите имена. Тоест нещо като
DELETE FROM images WHERE ID IN(1,2,3) Само че да ми върне и NAME-овете на изтритите редове. Възможно ли е нещо такова без stored procedur-а, респективно SELECT преди това?



Тема Re: Помощ за MySQL заявка DELETE + SELECTнови [re: caller]  
Автор Dakota (erotoman)
Публикувано16.11.06 19:21



Не се сещам за вариант без съхранена процедура. А дори и с такава, ще трябва да си запазиш някъде записите временно:

CREATE TABLE test (id INT, name CHAR(1));


INSERT INTO test VALUES (1, 'A');
INSERT INTO test VALUES (2, 'B');
INSERT INTO test VALUES (3, 'C');


Опитите ми с обикновена функция доведоха до неуспех:

mysql> SET GLOBAL log_bin_trust_function_creators = 1;


mysql> delimiter $$
mysql> create function delete_from_test (p_id int) returns boolean modifies sql data
begin
delete from test where id=p_id;
return true;
end;
$$
Query OK, 0 rows affected (0.00 sec)

mysql> delimiter ;
mysql> select name, delete_from_test(id) from test;
ERROR 1442 (HY000): Can't update table 'test' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.


В PostgreSQL пък същото си работи без проблем:

rating=# create or replace function delete_from_test (int) returns void as

$$
DELETE FROM test WHERE id=$1;
$$
LANGUAGE 'sql' VOLATILE;

rating=# select name, delete_from_test(id) from test;
name | delete_from_test
------+------------------
A |
B |
C |
(3 rows)

rating=# select * from test;
id | name
----+------
(0 rows)


За какво ти е изобщо това всъщност? Не можеш ли просто да си избереш със SELECT редовете и после да ги изтриеш?

Everything louder than everything else...

Редактирано от Dakota на 16.11.06 19:23.



Тема Re: Помощ за MySQL заявка DELETE + SELECT [re: Dakota]  
Автор phpGuru (непознат )
Публикувано17.11.06 12:57



в 8.2 на postgresql ще вкарат "oracle style" конструкцията RETURNING за update/delete и т.н.

ето от документацията за DELETE http://developer.postgresql.org/pgdocs/postgres/sql-delete.html



Тема Re: Помощ за MySQL заявка DELETE + SELECTнови [re: caller]  
Авторzzzzzzzzz (Нерегистриран)
Публикувано17.11.06 13:52



А защо ти е в такъв случай да триеш редовете

update images set deleted=1 where id in (1,2,3);
ще си направиш deleted индекс (за по бързо търсене) и ще избираш WHERE deleted=0 или deleted=1 в зависимост какво ти трябва.



Тема Re: Помощ за MySQL заявка DELETE + SELECTнови [re: phpGuru]  
Автор wqw (АзСъмЖив)
Публикувано17.11.06 17:50



В SQL2005 има

DELETE MyTable
OUTPUT deleted.ID
WHERE ID IN (...)

... което връща ID-та на изтритите редове.

cheers,
</wqw>




Тема Re: Помощ за MySQL заявка DELETE + SELECTнови [re: Dakota]  
Авторcaller (Нерегистриран)
Публикувано20.11.06 20:08



За какво ти е изобщо това всъщност? Не можеш ли просто да си избереш със SELECT редовете и после да ги изтриеш?

Точно това и правя. Имах мерак да спестя една заявка, обаче.



Тема Re: Помощ за MySQL заявка DELETE + SELECTнови [re: caller]  
Автор Dakota (erotoman)
Публикувано21.11.06 13:49



Е, освен ако не става въпрос за много голям обем от данни, които ще се изтриват, разликата едва ли би била значителна. Така или иначе, като ги избереш (select-неш) тия редове те отиват и чакат някъде на топло в кеша, така че изтриването би трябвало да мине бързичко.

Everything louder than everything else...



*Кратък преглед
Клуб :  


Clubs.dir.bg е форум за дискусии. Dir.bg не носи отговорност за съдържанието и достоверността на публикуваните в дискусиите материали.

Никаква част от съдържанието на тази страница не може да бъде репродуцирана, записвана или предавана под каквато и да е форма или по какъвто и да е повод без писменото съгласие на Dir.bg
За Забележки, коментари и предложения ползвайте формата за Обратна връзка | Мобилна версия | Потребителско споразумение
© 2006-2025 Dir.bg Всички права запазени.