Почему SQL Server не сделал оператор Where обязательным по умолчанию?

Попробуйте использовать это регулярное выражение:

/

Демо: https://regex101.com/r/vLbXIJ/1

11
задан John Saunders 10 April 2010 в 21:34
поделиться

9 ответов

Разве нельзя установить для автоматической фиксации значение false в сеансе клиента по умолчанию? Вы должны выполнить «фиксацию», чтобы увидеть ваши изменения таким образом, почти в ответ «вы уверены, что хотите это сделать?» мода.

Я считаю, что это было по умолчанию для всех клиентов Oracle TOAD у бывшего работодателя.

5
ответ дан 3 December 2019 в 02:11
поделиться

Because the spec doesn't require it, and you shouldn't be running ad hoc sql directly against production data anyway.

10
ответ дан 3 December 2019 в 02:11
поделиться

Just to play it safe we can always run in a transaction:

BEGIN TRAN

UPDATE MyTable SET MyColumn = 0

Then if the row count looks good:

COMMIT TRAN
6
ответ дан 3 December 2019 в 02:11
поделиться

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

На самом деле, я считаю, что это действительно хороший вопрос, могут быть некоторые настройка типа "SAFE_UPDATE" или что-то в этом роде ...

то, что я обычно делаю, помимо подсказки Робина (ВСЕГДА открывайте транзакцию), - это запускать запрос с помощью select, просто чтобы посмотреть на записи, которые будут обновлены , что-то вроде этого

update mytable set column = xx
-- select * from mytable
where mycondition = mycondition

перед обновлением я просто выбираю из списка select и смотрю, что он возвращает ...

в любом случае у вас всегда должна быть резервная копия (я слышал, что снимки sql 2005 тоже довольно крутые) и работать внутри сделка ...

4
ответ дан 3 December 2019 в 02:11
поделиться

Making this mistake is a long engrained rite-of-passage for programmers. We've all made it - and royally screwed up production data - learning a lot in the process of fixing it. You only make this mistake once, so it's kind of fun watching a developer join the ranks when it happens.

Preventing it from happening would ruin all the fun!

:)

4
ответ дан 3 December 2019 в 02:11
поделиться

Joel, I think the point of Josh's question is why doesn't the spec require it, or at lease have an Option Setting that will make the specific database require it?

Since the spec does not require it as you say, there is an opportunity for an errant query (either ad hoc or simply a programatic bug) to change rows in the database you didn't intend to change.

An implicit "ALL ROWS" seems way more dangerous than an implicit "NO ROWS".

4
ответ дан 3 December 2019 в 02:11
поделиться

Джош, на самом деле нет ничего необычного в том, чтобы удалить или обновить все строки в таблице.

0
ответ дан 3 December 2019 в 02:11
поделиться

I know from experience that you only make this one once... after it happens once you always make sure to never let it happen again!!!

0
ответ дан 3 December 2019 в 02:11
поделиться

MySQL ДЕЙСТВИТЕЛЬНО предоставляет такую ​​возможность для специальных запросов. Это называется - safe-updates (или --i-am-a-dummy). Как отмечали другие, мы однажды совершили эту ошибку. Те из нас, кто выполняет специальные запросы все время, иногда в час ночи, совершают ошибку несколько раз.

Хотя обычно я ненавижу системы «защиты от идиотов» и диалоги «Вы уверены?», мне нравится этот вариант. Вы всегда должны быть осторожны, но даже если вы будете осторожны , вы будете делать, возможно, одну ошибку за тысячу часов. Если вы тратите 50 часов в неделю в производственной системе с правами root, одна ошибка на тысячу часов составляет 2 1/2 серьезных ошибки в год. По этой и еще одной причине мы считаем - safe-updates очень полезными.

Есть две причины, по которым это более полезно, чем большинство сообщений MS с подтверждением . Сначала он обнаруживает что-то, что, скорее всего, является ошибкой, в отличие от «вы уверены, что хотите удалить этот файл?». Большинство удалений файлов действительно желательно, поэтому подтверждение вызывает раздражение. В большинстве случаев «удалить из пользователей», если отсутствует предложение where, действительно является ошибкой. Во-вторых, он указывает , в чем именно заключается вероятная проблема - отсутствует предложение where. Это как если бы подтверждение удаления файла было достаточно умным, чтобы сказать "это новая обновленная копия бренда , а не старая копия, которую, как вы думаете, удаляете. Вы действительно хотите чтобы удалить новую копию, или вы намеревались вместо этого удалить старую? "

В любом случае, обычно я ненавижу" идиотское доказательство ", но мне нравится --safe-updates и , если это вариант тем, кто этого не хочет, не нужно его использовать.Единственное, что меня беспокоит , это то, что если вы постоянно работаете в системе, в которой ДЕЙСТВИТЕЛЬНО есть эта функция, кто-то может запутаться и столкнуться с проблемами при переключении на систему без нее, например, переход с MySQL на MSSQL.

Отметьте последнее предостережение - никто в здравом уме не переключится на MS после знакомства с открытым исходным кодом. :)

1
ответ дан 3 December 2019 в 02:11
поделиться