SQL学习者 - MS Access 2013 ON UPDATE CASCADE和ON DELETE CASCADE

时间:2017-08-23 12:13:41

标签: sql ms-access

我是SQL的新手,并试图从书中获得一些方便的知识" SQL for Microsoft Access 2nd Edition"发表于2008年。

在第3章中,介绍了关键字ON UPDATE CASCADE ON DELETE CASCADE。我试图在MS Access 2013的SQL视图中使用关键字运行语句。有一条错误消息说

  

" CONSTRAINT子句中的语法错误。"

如果没有https://developers.google.com/people/v1/read-people,语句就能完美运作。

书中的注释解释了关键字不适用于SQL-92之前的版本。我猜Access 2013就在SQL-92之后。

有人可以向我解释为什么这些关键字不起作用吗?

下面是语句(ON UPDATE CASCADE ON DELETE CASCADE结尾):

ON UPDATE CASCADE ON DELETE CASCADE

2 个答案:

答案 0 :(得分:0)

这些关键字不起作用,因为DAO不支持它们。内置查询构建器也使用DAO。如果要使用CASCADE关键字创建表,可以仅使用ADO在VBA中完成:

CurrentProject.Connection.Execute strSQL
这里的strSQL包含CREATE TABLE语句

答案 1 :(得分:0)

Access不支持ON UPDATE CASCADEON DELETE CASCADE语句(请参阅https://msdn.microsoft.com/en-us/library/office/ff836971.aspx)。

关于功能,您不需要使用ON UPDATE CASCADE。此约束意味着如果更改主表中的主键,更改将传播到引用主表的每个子表。在SQL世界中,更改主键被认为是不可行的。你是否真的必须更改主键(因为某种灾难),这将通过脚本,大量备份和极度小心来完成。主键是:表中行的唯一(理想全局),不可变标识符。

ON DELETE CASCADE表示如果删除主表中的行,则也会删除在子表中引用此键的任何行。虽然这听起来像是一个懒惰的快捷方式,但我建议不要在应用程序逻辑中执行此操作(可能存在一个用例,您希望保留记录或记录它们或使用它们执行某些操作,而不是盲目地将它们从数据库中删除。< / p>