LINUX.ORG.RU

Кто знает, что там у тебя. Может, «TABLE» вообще в InnoDB system tablespace спрятался. DELETE FROM TABLE LIMIT N – удалить N каких-то записей, только пугаешь народ.

Darth_Revan ★★★★★
()
Ответ на: комментарий от Anoxemian

а такое вообще легитимно

Если под «легитимно» понимаешь «выполнит ли СУБД команду», то да.
MariaDB/MySQL удалит N первых попавшихся ей записей.
PostgreSQL не оценил: ОШИБКА: ошибка синтаксиса (примерное положение: "LIMIT").

и гарантирует консистентность

Конечно же, нет.

Darth_Revan ★★★★★
()
Ответ на: комментарий от Anoxemian

ээээ, а такое вообще легитимно

Можно пользоваться для ручной правки базы чтобы по ошибке не снести все)

goingUp ★★★★★
()
Ответ на: комментарий от anc

Ну если нужно удалить одну запись пишешь limit 2, и в случае ошибки в where удаляется две записи а не вся таблица.

goingUp ★★★★★
()
Ответ на: комментарий от anc

Ну например пока ты достанешь и накатишь бекап все будет по большей части выглядеть нормально, а не без данных)

goingUp ★★★★★
()
Ответ на: комментарий от goingUp

Полную глупость сказали, это ещё больше к пролюбливанию данных ведет. Человек должен думать, а машина работать.

anc ★★★★★
()
Ответ на: комментарий от goingUp

Пока будете разбираться со своей криворукостью, за это время пользаки примут неверное решение на основе существующих данных. А когда вы добавите, вообще неизвестно как поплывут данные. Вот потом у всяких сберов, налоговых и так далее из-за таких админов, и данные становятся настолько неконсистентны, что никто их не берется свести даже за большие деньги.

anc ★★★★★
()
Ответ на: комментарий от anc

Нет.

Хорошо а может есть варик как то уменьшить определенную таблицу в бд, чтобы освободить место на диске? Или это тоже не будет гарантировать консистентность?

troy856
() автор топика
Ответ на: комментарий от troy856

Оптимизация места занимаемого на диске, после удаления данных зависит от конкретной реализации у вас. А так это OPTIMIZE TABLE TableName;

anc ★★★★★
()
Ответ на: комментарий от anc

А так это OPTIMIZE TABLE TableName;

Я бы даже предложил ALTER TABLE TABLE ROW_FORMAT=DEFAULT;
При использовании InnoDB, если версия достаточно свежая (MariaDB 10.2+ и MySQL 5.7+), а отношение было создано в более ранней версии, то может случиться чудо.

Darth_Revan ★★★★★
()
Последнее исправление: Darth_Revan (всего исправлений: 2)
Ответ на: комментарий от anc

Пока будете разбираться со своей криворукостью, за это время пользаки примут неверное решение на основе существующих данных. А когда вы добавите, вообще неизвестно как поплывут данные. Вот потом у всяких сберов, налоговых и так далее из-за таких админов, и данные становятся настолько неконсистентны, что никто их не берется свести даже за большие деньги.

Ого, сколько вы нафантазировали. Ну я в общем понял ваш подход, писать программы без багов, базу вручную не править)

goingUp ★★★★★
()
Ответ на: комментарий от goingUp

Нет. Кривые ручки это когда в delete указать limit, о чем выше уже написали. Какую именно запись вы удалите неизвестно, это рандом. И как вы собираетесь вернуть эту рандомную запись без сверки с оригиналом? Вам не кажется, что это похоже на через попу к гландам?
Когда вы написали delete from tablename where... тут хоть понятно какие данные мы навернули. Если добавить limit неизвестно без сверки с предыдущими, а это попоболь.
У меня был случай ошибки в delete, когда набрал не то имя таблицы. Оправдывает (на самом деле нет) меня только то что температура over39 была. Срочно пришлось взять себя в ежоповые руковицы и восстановить данные несмотря на температуру, благо было откуда. Однако и это потребовало написание отдельной мелкой софтинки.

anc ★★★★★
()
Последнее исправление: anc (всего исправлений: 2)
Ответ на: комментарий от goingUp

Проблема то вот в чем: LIMIT же фишка, для ограничения выдачи РЕЗУЛЬТАТА запроса. Ну это такая фича для гуевин и прочих юз-кейсов. Т.е. по логике сначала выполняется запрос, а потом на его результат накладывается ограничение. Ну если мускул такое проглатывает, значит это кому-то нужно. Но за такое надо руки рвать однозначно.

Anoxemian ★★★★★
()
Ответ на: комментарий от Darth_Revan

Я бы даже предложил ALTER TABLE TABLE ROW_FORMAT=DEFAULT;
При использовании InnoDB, если версия достаточно свежая (MariaDB 10.2+ и MySQL 5.7+), а отношение было создано в более ранней версии, то может случиться чудо.

Не, выдает ошибку :( ERROR 1296 (HY000): Got error 64 'Temp file write failure' from InnoDB

Нехватка места, есть возможность как-то это обойти? Или может подцепить мускула по nfs? Заранее спасибо.

troy856
() автор топика
Последнее исправление: troy856 (всего исправлений: 3)
Ответ на: комментарий от Anoxemian

Но за такое надо руки рвать однозначно.

Да что вы говорите. Скоро и в UPDATE LIMIT завезут.
ЗЫ Написал и потом подумал. А может уже и додумались до такого. :(

anc ★★★★★
()
Ответ на: комментарий от troy856

Для ужатия таблицы innodb нужно место больше ее размера

Если все плохо можно попытаться ужать базу через row format - compressed

Это не только пересоздаст таблицы, но и уменьшит их раза в 3

ism ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.