首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在SQL中,为外键指定与其引用的主键不同的数据类型是语法错误吗?

在SQL中,为外键指定与其引用的主键不同的数据类型是语法错误吗?
EN

Stack Overflow用户
提问于 2020-06-24 08:00:06
回答 1查看 161关注 0票数 1

我和我的教授就这个问题吵了起来,所以请给我你的意见。

原来的问题是:

这个脚本中有语法错误吗?

代码语言:javascript
复制
CREATE TABLE Dozent
   ( DozNr INTEGER PRIMARY KEY,
      Name VARCHAR(30));

CREATE TABLE Prüfung
   ( DozentNr CHAR(3), StudentNr CHAR(6),
     PRIMARY KEY (DozentNr, StudentNr),
     FOREIGN KEY (DozentNr) REFERENCES Dozent(DozNr),
     FOREIGN KEY (StudentNr) REFERENCES Student(MatrNr) );

因此,显然存在一个错误,因为外键DozentNr被声明为CHAR,而它引用的主键是整数数据类型。我的第一个冲动是说,指定错误的数据类型是一个语义错误。我的教授说这是一个语法错误(当然没有任何解释)。

一些研究给我带来了这些定义:

语法规则指定如何对语言元素进行排序以形成有效的语句。因此,语法检查可以验证关键字、对象名称、运算符、分隔符等是否正确地放置在SQL语句中。语义规则指定如何进行有效的外部引用。因此,语义检查可以验证对数据库对象和主机变量的引用是否有效,以及主机变量数据类型是否正确。

来源:Oracle9i数据库在线文档

当我把这个发给我的教授时,她只是说:“错误的数据类型的使用是语法错误。引用被定义了,但是数据类型不匹配。”

这对我来说不是什么解释,但在问了她两次之后,我不想再问她同样的问题了。如果你知道答案,请解释。

EN

回答 1

Stack Overflow用户

发布于 2020-06-24 11:37:03

我并不完全同意你们中的任何一个--尽管我不认为区别很重要。

我猜您的教授正在将错误分成几个类别,例如:

  • 语法错误
  • 执行错误
  • 安全访问错误

而“语义错误”不在列表中。在此上下文中使用“语法错误”可能实际上意味着“编译阶段的错误”,而不是“执行阶段的错误”。

“语义”指的是意义,所以我认为on s.student_id = h.hospital_id是一个语义错误,因为虽然这两个I是整数(在本例中为;),但它们并不适合作为join条件。

我不确定这个错误是不是意义上的错误。这是一个类型不兼容错误。为什么不直接将此错误称为外键定义错误?还是编译时错误?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62550364

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档