|
Тема
|
Помощ за 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...
| |
|
|
|
|