对于我的客户,我偶尔会在他们的实时数据库中工作,以便解决他们为自己创建的问题,或者为了修复我的产品错误创建的错误数据.就像Unix root访问一样,这很危险.我应该提前学到什么课程?
关于操作实时数据,你要做的第一件事是什么?
Pau*_*lin 108
BEGIN TRANSACTION;
Run Code Online (Sandbox Code Playgroud)
这样你就可以在错误后回滚.
Dyl*_*tie 101
多年来我学到了很多东西......
首先,如果您正在对实时数据进行更新或删除,请首先使用您将使用的WHERE子句编写SELECT查询.确保它有效.确保它是正确的.然后将UPDATE/DELETE语句添加到已知的工作WHERE子句中.
你永远不想拥有
DELETE FROM Customers
Run Code Online (Sandbox Code Playgroud)
坐在您的查询分析器中等待您编写WHERE子句...不小心点击"执行",您刚刚杀死了您的Customer表.哎呀.
此外,根据您的平台,了解如何快速备份表格.在SQL Server 2005中,
SELECT *
INTO CustomerBackup200810032034
FROM Customer
Run Code Online (Sandbox Code Playgroud)
将整个Customer表中的每一行复制到一个名为CustomerBackup200810032034的新表中,然后您可以在完成更新后删除并确保一切正常.如果发生了最糟糕的情况,那么从这个表中恢复丢失的数据比尝试从磁盘或磁带恢复昨晚的备份要容易得多.
最后,要警惕级联删除删除你不打算删除的东西 - 在修改任何内容之前检查你的表的关系和关键约束.
war*_*ren 50
先做备份:它应该是系统管理的第1号法则
编辑:结合其他人的说法,确保您的更新有适当的WHERE条款.
理想情况下,永远不应该更改实时数据库(超出INSERT和基本维护).改变实时数据库的结构尤其充满潜在的不良业力.
Pat*_*ski 18
除非你在BEGIN TRAN t1中,否则不要进行更新 - 不是在开发人员数据库中,不是在生产中,不是在任何地方.永远不要在评论之外运行COMMIT TRAN t1 - 始终输入
--COMMIT TRAN t1
Run Code Online (Sandbox Code Playgroud)
然后选择语句以运行它.(显然,这仅适用于GUI查询客户端.)如果你做这些事情,它将成为第二天性,你几乎不会失去任何时间.
我实际上有一个"更新"宏来键入它.我总是粘贴它来设置我的更新.您可以为删除和插入创建类似的一个.
begin tran t1
update
set
where
rollback tran t1
--commit tran t1
Run Code Online (Sandbox Code Playgroud)
Kev*_*ner 13
回答我自己的问题:
编写更新语句时,请按顺序写入.
UPDATE [table-name]WHERE [conditions]SET [columns-and-values]在说出要更改的值之前选择要更新的行比在其他顺序中执行更安全.这使得无法update person set email = 'bob@bob.com'坐在您的查询窗口中,准备好通过错误的击键运行,准备好弄乱表中的每一行.
编辑:正如其他人所说的那样,在写WHERE之前为你的删除写下条款DELETE.
wcm*_*wcm 11
作为一个例子,我像这样创建SQL
--Update P Set
--Select ID, Name as OldName,
Name='Jones'
From Person P
Where ID = 1000
Run Code Online (Sandbox Code Playgroud)
我突出显示从最终到Select并运行该SQL的文本.一旦我确认它正在拉动我想要更新的记录,我点击升级到高亮显示Update语句并运行它.
请注意,我使用了别名.我永远不会更新表名明确.我总是使用别名.
如果我与事务和回滚/提交一起执行此操作,我真的非常非常安全.
Gab*_*erg 11
我是一个小心使用实时数据库的方法吗?别碰它.:)
备份可以撤消您对数据库造成的损害,但在这段时间内您仍可能会产生负面影响.
无论你认为你正在使用的脚本有多么坚固,都要经过一个测试周期.即使"测试周期"意味着针对您自己的数据库实例运行脚本,也要确保执行此操作.与生产环境相比,在本地盒子上引入缺陷要好得多.
嗯,这就是我现在能想到的一切.采取大胆的段落,你会看到我最新的#1.;-)