Jos*_*osh 11 sql t-sql sql-server
对我来说似乎没什么好事.我听过很多关于人们在UPDATE或DELETE中忘记WHERE子句并且废弃整个表的故事.我知道粗心的人不应该直接发出查询而且所有这些...并且存在您希望影响所有行的合法情况,但是默认情况下有一个选项需要这样的查询才有意义写得像:
UPDATE MyTable SET MyColumn = 0 WHERE *
Run Code Online (Sandbox Code Playgroud)
或者不改变语言,
UPDATE MyTable SET MyColumn = 0 WHERE 1 = 1 -- tacky, I know
Run Code Online (Sandbox Code Playgroud)
Joe*_*orn 10
因为规范不需要它,所以你不应该直接针对生产数据运行ad hoc sql.
为了安全起见,我们总是可以在交易中运行:
BEGIN TRAN
UPDATE MyTable SET MyColumn = 0
Run Code Online (Sandbox Code Playgroud)
然后,如果行计数看起来很好:
COMMIT TRAN
Run Code Online (Sandbox Code Playgroud)
小智 5
乔尔,我认为乔什问题的要点是为什么规范不要求它,或者至少有一个选项设置使特定数据库需要它?
由于规范并不像您所说的那样要求它,因此错误的查询(无论是临时的还是简单的程序错误)有可能更改数据库中您不打算更改的行。
隐式的“ALL ROWS”似乎比隐式的“NO ROWS”更危险。
是不是可以在客户端会话中将auto commit设置为false作为默认值?您必须发出"提交"以便以这种方式查看您的更改,几乎"您确定要执行此操作吗?" 时尚.
我认为这是前雇主的所有Oracle TOAD客户的默认设置.
| 归档时间: |
|
| 查看次数: |
3415 次 |
| 最近记录: |