我是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
答案 0 :(得分:0)
这些关键字不起作用,因为DAO不支持它们。内置查询构建器也使用DAO。如果要使用CASCADE
关键字创建表,可以仅使用ADO在VBA中完成:
CurrentProject.Connection.Execute strSQL
这里的strSQL包含CREATE TABLE
语句
答案 1 :(得分:0)
Access不支持ON UPDATE CASCADE
和ON DELETE CASCADE
语句(请参阅https://msdn.microsoft.com/en-us/library/office/ff836971.aspx)。
关于功能,您不需要使用ON UPDATE CASCADE
。此约束意味着如果更改主表中的主键,更改将传播到引用主表的每个子表。在SQL世界中,更改主键被认为是不可行的。你是否真的必须更改主键(因为某种灾难),这将通过脚本,大量备份和极度小心来完成。主键是:表中行的唯一(理想全局),不可变标识符。
ON DELETE CASCADE
表示如果删除主表中的行,则也会删除在子表中引用此键的任何行。虽然这听起来像是一个懒惰的快捷方式,但我建议不要在应用程序逻辑中执行此操作(可能存在一个用例,您希望保留记录或记录它们或使用它们执行某些操作,而不是盲目地将它们从数据库中删除。< / p>