我目前正致力于为大学课程的订单管理系统中的客户创建一个表格。系统依赖于能够检索客户的订单历史记录。由于我们选择不将它们存储在单独的表中,因此删除从客户表中删除行的选项至关重要。
我在CREATE
声明中如何以及在何处设置?我怀疑我必须制定一个关于应该发生什么的规则,但我不完全确定细节。
答案 0 :(得分:1)
如果只通过应用程序访问该表,则可以使用软删除,为表单添加一列,例如IsDeleted
,并在软件中检查该行是否为生活或删除。
如果最终用户可以访问数据库,您可以更改他/她的登录名或组权限,以删除该表上的删除授权。
答案 1 :(得分:1)
在SQL Server上,您有以下选项:
DENY DELETE ON OBJECT::dbo.Customer TO db_datawriter;
CREATE TRIGGER nodelete1 ON dbo.Customer INSTEAD OF DELETE AS RAISERROR('You can't delete from this table', 16, 10)
但是,诚然,我认为这应该在应用程序级而不是数据库级解决。即使使用上述技术,在删除记录之前,什么会阻止某人简单地删除触发器或授予必要的权限?或者只是放下整个桌子?
如果您不希望用户从表中删除记录,只需确保您的应用程序不允许他们这样做。直接使用数据库的任何人都应该知道发出DELETE语句可能很危险 - 特别是如果你没有备份。
答案 2 :(得分:0)
我可以在要禁用删除的每个表上使用简单的触发器来完成
Create Trigger [dbo].[RollBackDelete]
ON [dbo].[Your Table Name]
INSTEAD OF DELETE
AS
BEGIN
ROLLBACK;
END
当然,如果您有任何键在删除或更新时具有级联操作,则无法使用,应将其设置为“无操作”
我希望这会有用