1059

Когда выполнил SQL-запрос

Когда выполнил SQL-запрос

IT-юмор

7.5K постов53.3K подписчиков

Правила сообщества

Не публикуем посты:
1) с большим количеством мата
2) с просьбами о помощи
3) не относящиеся к IT-юмору

Вы смотрите срез комментариев. Показать все
134
Автор поста оценил этот комментарий
Иллюстрация к комментарию
раскрыть ветку (65)
71
Автор поста оценил этот комментарий

А в нормальной СУБД будет

ERROR: argument of OR must be type boolean, not type integer
23
DELETED
Автор поста оценил этот комментарий

А потому что перед delete или update всегда нужно делать select, если ты не великий профи :)


Хотя в серьёзных случаях (не только в sql) я всегда вводил ещё одну подстраховку - перед финальным нажатием на enter отходил покурить. Несколько раз было, когда приходила дельная мысль в это время.

раскрыть ветку (22)
14
Автор поста оценил этот комментарий

Селектануть

Подумать

Прогнать раз запрос, обернутым в begin tran .. rollback tran. Если количество affected rows устраивает, то поменять rollback на commit и ещё раз.


Пользуюсь всеми тремя способами)


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

раскрыть ветку (6)
2
Автор поста оценил этот комментарий

Помню как молодым был, и забыл закрыть транзакцию)

раскрыть ветку (5)
0
Автор поста оценил этот комментарий
А что будет?
раскрыть ветку (4)
1
Автор поста оценил этот комментарий
Будет зомби 🧟‍♀️😀
0
Автор поста оценил этот комментарий

Пока открыта(не закрыта транзакция) обращение к этой таблице невозможно = все зависнет наглухо.

раскрыть ветку (2)
1
Автор поста оценил этот комментарий

ну как бы не всё так однозначно, уровни блокировки разные бывают

0
Автор поста оценил этот комментарий
Спасибо, полезно узнать такое) я субд изучал очень поверхностно, нужно было программу с табличкой подружить
7
Clatto Verata Nikto
Автор поста оценил этот комментарий
перед финальным нажатием на enter отходил покурить

Хорошая практика. Тоже так делаю.

Разумеется подстраховываюсь бекапами данных (самое простое - копии таблиц), но зачастую восстанавливать их гораздо муторнее, чем просто сделать хорошо. Так вот во время "покурить" действительно приходят умные мысли. Иногда даже отказаться от этой затеи и пойти вообще другим путём.

раскрыть ветку (10)
5
DELETED
Автор поста оценил этот комментарий

Не, все подстраховки, все подготовки, бэкапы и т.п. это само-собой. Иногда и обдумывать можешь неделю перед этим, но я говорю именно про ту самую последнюю секунду, когда вроде готово всё и нужно "нажать на enter". Смешно, но реально именно эти пять минут пару раз помогали.

раскрыть ветку (1)
12
Clatto Verata Nikto
Автор поста оценил этот комментарий

Гы, помню в 4 года назад месяц курил, выдумывая одну фишку.

Короче структура БД готова, логика написана, осталось придумать, как сделать один механизм, но чтобы он был универсальным. Иначе придётся писать 100500 обработок под конкретный случай.

Жопой чую, что можно, но как - хз. Ходил курил, думал. Возвращался - смотрел комбинации данных, не выходит - опять думал. Звонил юзерам, спрашивал как и с чем работают (будут работать) опять не выходит.

В итоге родил. Ну дальше дело техники - день написать и тестировать, вылизывать, и т.д.


Представляю, на кого я был похож в течении этого месяца: ходит, курит, нихуя не делает. Хотя голова разрывалась.

2
Автор поста оценил этот комментарий

Самая лучшая подстаховка - это разделение на тех, кто имеет доступ к проду и тех, кто пишет тот же sql запрос. Естественно, что те, кто пишут его должны проверить в том числе и на препроде, где лежит копия бд прода.

В этом случае прод не снести, а остальное все ломать не страшно

раскрыть ветку (3)
3
Clatto Verata Nikto
Автор поста оценил этот комментарий

Всё верно. Но когда архитектор, разработчик, администратор, аналитик и уборщица в одном лице, есть нюансы :)

раскрыть ветку (2)
2
Автор поста оценил этот комментарий
Ровно как дев, предпрод и прод. :)
0
Автор поста оценил этот комментарий
Знает логины от всех ролей или все роли в итоге добавили ему, чтобы не отвлекать никого
1
Автор поста оценил этот комментарий

Разумеется подстраховываюсь бекапами данных (самое простое - копии таблиц)


Ну да, особенно когда удаляешь данные из-за того, что места на диске кончается. ,:)

раскрыть ветку (3)
2
Clatto Verata Nikto
Автор поста оценил этот комментарий

Когда место на диске кончается на сервере БД - удалять данные прям замечательная идея! :)

раскрыть ветку (2)
0
Автор поста оценил этот комментарий
Логи надо чистить сначала
0
Автор поста оценил этот комментарий

Ну, данные разные бывают. Для кого-то и логи - данные. :)

0
DELETED
Автор поста оценил этот комментарий

А что делать, если не куришь?

раскрыть ветку (2)
1
DELETED
Автор поста оценил этот комментарий

Когда я бросил курить привычка осталась. На работе выхожу в коридор или на лестницу БЦ в такой ситуации, дома просто на кухню к окну :)

раскрыть ветку (1)
0
DELETED
Автор поста оценил этот комментарий

Значит, не всё потеряно :) Кстати, на днях обсуждали один рабочий момент и я вспомнил, что есть такая практика - не удалять старые данные на проде. Где бы про это почитать подробнее и чем это обосновывается? Не подскажете, случаем?

0
Автор поста оценил этот комментарий

Ну и ещё кнопку создать бекап надо нажимать перед потенциально опасным обновлением

11
Автор поста оценил этот комментарий

О, а вот это интересно 😀

Мне ликбеза ради, а почему тут шайтан машина все делетнула? Поясните, плиз, неразумной мне🤔

Каг бэ, сердцем я чую, что косяк в where, а разум чот не догоняет...

раскрыть ветку (24)
50
Автор поста оценил этот комментарий

Грубо говоря, скобки не поставили в запросе, и запрос выглядит либо (id=23) либо (22) <без привязки к id>
Синтаксис таков, что 22 всегда true, поэтому аффектит всё из drby
По-хорошему, надо было как-то так:
WHERE ID IN(22, 23)

раскрыть ветку (23)
7
Автор поста оценил этот комментарий

То есть, получается, что выражение where 23 даст на выходе true?

Какой интересный зверек этот mysql...

раскрыть ветку (21)
18
Автор поста оценил этот комментарий
В других языках также) if (23) в с++, например, тоже будет true, собственно, с любым числом будет true, кроме 0)
ещё комментарии
6
Автор поста оценил этот комментарий

Это не синтаксис, это семантика чисел в логических выражениях.

1
Автор поста оценил этот комментарий

Подумаешь, каких-то 200 строк.

И худшие вещи в море случались.

0
Автор поста оценил этот комментарий

Танзакции в помощь

раскрыть ветку (1)
3
Автор поста оценил этот комментарий

Begin tran

Запрос

--commit

--rollback


Если оставить незакоммиченную транзакцию надолго, серверу будет очень плохо. Проверено. Поэтому если всë ок, коммитим, если "что-то пошло не так", выполняем rollback.


Это в MS SQL

0
DELETED
Автор поста оценил этот комментарий

Тут вместо 22 должно быть 42. Так более жизненно получается.

0
Автор поста оценил этот комментарий
ну 224 не 3455678, ручками восстановит)
Автор поста оценил этот комментарий

Commit нету, нестрашно

раскрыть ветку (10)
6
Автор поста оценил этот комментарий

Коммит ставят в конце транзакции. Одиночный запрос выполнится и так.

раскрыть ветку (9)
2
Автор поста оценил этот комментарий

WAT?

https://dev.mysql.com/doc/refman/8.0/en/innodb-autocommit-co...

In InnoDB, all user activity occurs inside a transaction.


Это тоже транзакция.

Небось автокоммит включён? Тогда ССЗБ.

раскрыть ветку (8)
1
Автор поста оценил этот комментарий

Который включен по дефолту. Хочешь подверждать операцию, юзай start transaction

раскрыть ветку (7)
2
Автор поста оценил этот комментарий

В файле ~/.my.cnf:


[client]

init-command='set autocommit=0'

раскрыть ветку (6)
0
Автор поста оценил этот комментарий

Это если ты админ СУБД. Мало кто так делает. Да и нах не нужно.

раскрыть ветку (5)
3
Автор поста оценил этот комментарий

Ну видимо возможность делать косяки важнее. В оракле например нет автокоммита по умолчанию, и это правильно.

раскрыть ветку (3)
1
Автор поста оценил этот комментарий

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

delete from users where 1; commit;

раздражение пользователей, приложений, где-то orm не поддерживает.

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

раскрыть ветку (2)
2
Автор поста оценил этот комментарий

Статистически - станет :)

У меня так было.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Я игнорю такие штуки, если это не заебы безопасников)

0
Автор поста оценил этот комментарий

set autocommit распространяется на сессию и супер права не нужны

Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества

Недвижимость и ремонт

Теги

Популярные авторы

Сообщества