我有两个相关的表格,很常见的情况:客户端(CID,姓名,姓氏)和访问(VID,VCID,dateOfVisit) - VCID是客户端ID。如何操纵外键,何时我想要删除数据库的访问记录相对于某些客户端,我删除了哪些客户端,以及如何删除客户端,当我删除最后一次访问该客户端的时候?使用外键的困难任务
0
A
回答
1
我建议你做一个软删除,所以你可以保留你的访问记录。
软删除意味着您只需添加一个额外的字段is_active
默认为true,并且当您删除记录时将其翻转为false。
1
通过使用“删除级联”,您可以自动删除已删除客户端的访问。例如:
create table clients (id integer primary key);
create table visits (id integer primary key,
client integer,
foreign key (client) references clients(id)
on delete cascade);
但以其他方式(自动删除没有访问的客户端)更困难。
,您可以手动执行删除,没有访问客户端:
delete from clients where id in
(select cid from
(select clients.id as cid, visits.id as vid
from clients left join visits on (clients.id = visits.client))
where vid is null);
(也许还有更简单的东西?)。所以或者不时运行它,或者创建一个触发器,以便在从访问中删除某些内容时运行它(尽管如果要添加触发器,它可以使用删除信息来更智能地执行某些操作)。
或者比我有更多时间/精力的人可以用触发器写出答案......? (正如其他人所说的那样,自动删除客户端是非常激烈的行为 - 这不是你通常想要在生产系统中执行的事情 - 除了其他任何事情,如果客户需要更多的访问,他们会非常恼火如果他们必须再次输入他们的详细信息...)
相关问题
- 1. 困难的T-SQL编程任务
- 2. NumPy中'任何'的困难
- 3. MySQL双列主键困难
- 4. 使用jQuery的困难
- 5. 用Java处理数组。困于艰难的作业任务
- 6. 用特定于jar的任务编写build.gradle时遇到困难
- 7. .submit的困难()
- 8. 的fancybox困难
- 9. 困难的ARM
- 10. Makefile的困难
- 11. Mysql外键难题
- 12. 使用Razor语法的困难
- 13. 使用jQuery的clone()有困难
- 14. 使用getchar数组的困难C
- 15. 在Brightscript中使用XML的困难
- 16. Golang使用未知键解编嵌套json时遇到困难
- 17. 了解外墙和服务提供商有一些困难
- 18. 困难MooTools的Class.extend
- 19. JFace的ComboViewer困难
- 20. 在困难的jqGrid
- 21. NerdDinner困难
- 22. IsolatedStorageFile困难
- 23. 困难DisqusSharp
- 24. string.toUpperCase困难
- 25. 分发困难 -
- 26. Pygame类困难
- 27. 发展困难
- 28. svn.accessfile困难
- 29. bind_param困难
- 30. Python argparse困难
*'...删除客户端,当我删除最后一次访问该客户端时留下'* - 以及如果您在记录某些有史以来第一次访问时犯了错误怎么办最近添加的客户端,删除它再次重新进入, - 哎呀! - “客户在哪里?!” – 2012-03-19 00:40:41