- 1
- 2
- 3
- 4
- 5
delete
from liaison
where
type = 'UsersGroup' and
`group` = 'static_' || (select id from usergroup where name = :grp)
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
−165
delete
from liaison
where
type = 'UsersGroup' and
`group` = 'static_' || (select id from usergroup where name = :grp)
Час назад вынес этим запросом все связи между группами и юзерами в боевой базе ;)
P.S. Почему в mysql все дерьмо, работающее совсем не так, как оно работает почти во всех остальных СУБД, включено по умолчанию?
DBdev 22.05.2013 12:14 # 0
DBdev 22.05.2013 12:33 # 0
delete from l
from liaison l inner join usergroup u
on l.group = 'static_' || CAST(u.id as char)
where
type = 'UsersGroup' and u.name = :grp
Простите, не очень силен в мускуле с типами.
bormand 22.05.2013 12:38 # +3
DBdev 22.05.2013 13:21 # 0
bormand 22.05.2013 14:07 # +1
Навскидку еще postgres, sqlite, firebird.
DBdev 22.05.2013 20:27 # +6
MSSQL Breaks the standard by using the '+' operator instead of '||'.
Does not automatically cast operands to compatible types. If an operand is NULL, then the result is NULL.
MySQL Badly breaks the standard by redefining || to mean OR.
Offers instead a function, CONCAT(string, string), which accepts two or more arguments.
Automatically casts values into types which can be concatenated. If an operand is NULL, then the result is NULL.
bormand 22.05.2013 21:24 # 0
someone 22.05.2013 13:50 # +1
bormand 22.05.2013 14:03 # +1
guest 21.06.2013 12:34 # +2
eth0 22.05.2013 18:49 # +3
У них там явно своя атмосфера.
3.14159265 22.05.2013 19:00 # +4
И вообще ручные правки боевых баз - зло.
И напоследок старая истина - любой программист хотя бы раз в жизни запускал update/delete без where.
eth0 22.05.2013 20:53 # 0
Любые прямые модифицирующие запросы - зло. Правильно разработать пусть даже для одноразового действия соответствующий функционал (скажем, бизнес-операцию), отладить и использовать только так. Никаких редакторов с прямым выполнением.
В моей практике бывали случаи, когда где-то погроммист из-за копипасты забыл сменить id, а таблицу сменил, отчего удалилось совсем не то. Да тысячи их.
bormand 22.05.2013 21:31 # −1
Самый прикол в том, что этот код как раз был в функции, которая выполняла операцию "удаление юзера". Я же не настолько проникся духом пхп, чтобы вызывать запросы и исполнять бинарники прямо из главной функции...
Так что мой фейл совсем не в прямом использовании запросов, а в том, что я отлаживался на боевом сервере ;)
eth0 23.05.2013 19:35 # +1
bormand 22.05.2013 21:22 # 0
Золотые слова...
Просто, как всегда, сложились обстоятельства - торопился, хотел быстрее накодить спартанскую но удобную админку, толком не знал диалект mysql, тестовый сервак от этой системы давно заюзали под другие нужды, а развертывать новый было влом... Тем более под рукой был свежий бекап, да и таблички эти кроме меня все равно никто никогда не правил.
P.S. На самом деле пользователи даже ничего не заметили, т.к. эти таблички читаются только при логине.
P.P.S. Но согласен, отлаживаться на боевой базе это большой риск, и показатель нуба, коим я и являюсь ;)
bot 22.05.2013 21:36 # −3
Ничего, бывает, просто Луна сегодня не в той фазе
bormand 22.05.2013 21:52 # +1
Одно дело когда диалект просто отличается от стандарта (ну функций там добавили, операторов новых, какие-то дополнительные кейворды). Другое - когда авторы СУБД намеренно нарушают стандарты, внося свои бессмысленные и беспощадные "фичи". Вспомните, к примеру, что mysql делает, если не все поля лежат в group by и групповых функциях... а теперь назовите мне еще хотя бы одну базу, у которой есть такое поведение.
bormand 22.05.2013 21:54 # +1
> Специалисты с мозолями на жопе
> совершенно не умеют работать молотком (хотя бы иногда)
Окай, не буду принимать это как личное оскорбление. Доля правды тут есть. Но только вот очень часто (где-то в 80% случаев) "работать молотком и думать" = "терять время впустую", примерно как драить плац зубной щеткой, или копать котлован совочком.
Вы естественно никогда ошибок не допускаете, и всегда полностью читаете ман по всем функциям и операторам, которые вы используете в своей работе?
bot 22.05.2013 22:27 # 0
DBdev 23.05.2013 14:37 # +2
Да, нет такой СУБД (из топ 10), которая бы 100% соответствовала стандарту, но мускуль чаще всего разрывает все шаблоны.
Так что борманд не зря поднимает волну негодования.
wvxvw 23.05.2013 17:00 # +1
I have not increased nor diminished the measure,
I have not diminished the palm,
I have not encroached upon fields,
I have not added to the balance weights,
I have not tempered with the plumb bob of the balance.
Это они так в Древнем Египте после смерти перед Ма'aт оправдывались за несоблюдение стандартов. Кто не соблюдал - того в рай не пускали.
bot 24.05.2013 23:22 # 0