当前位置: 首页 > 知识库问答 >
问题:

在mysql MyISAM引擎中声明外键的目的

贺佑运
2023-03-14

我才知道mysqlMyISAM引擎不支持外键。但我看到了几个声明foreign键的示例,如下所示:

CREATE TABLE Orders (
    OrderID int NOT NULL,
    OrderNumber int NOT NULL,
    PersonID int,
    PRIMARY KEY (OrderID),
    FOREIGN KEY (PersonID) REFERENCES Persons(PersonID)
); 

由于不支持外键,我们将无法在MyISAM引擎中获得类似于更新时的和删除时的的好处。那么,我的问题是为什么我们要在MyISAM引擎中将一个字段声明为外键?

共有1个答案

洪昱
2023-03-14

使用myisam表类型声明外键是没有意义的,因为该表中不存在此功能。Mysql可以解析myisam表类型的外键语法(这意味着当它遇到fk定义时不会引发错误消息),这使得从其他数据库产品或表引擎的迁移更加容易,因为您不必编辑create table语句来删除它们。

 类似资料:
  • 我有两个表,在我的Spring代码中是学生和课程。我想创建一个关系表,“获取课程”。我只有学生ID和课程ID。我可以在我的java代码中创建一个具有两个主键的表,但我不能将它们声明为外键。 我尝试了这个解决方案,将两个外键作为主键,但没有成功,我认为其中缺少了一些部分。因此,我尝试了基于此解决方案的方法: (学生实体有id, name, surname)(课程实体有id, Coursename)

  • 问题内容: 您使用关键字还是引发一些验证运行时异常?它给您带来什么好处,或者为什么您认为不值得使用呢? 问题答案: 如果条件为假,则声明将抛出运行时错误(AssertionError)。断言为您提供了一种简化的方式来记录,检查和强制执行代码的正确性标准。好处是用于定义和操纵这些正确性条件的语言级挂钩。如果您希望启用或禁用它们(存在一些关于是否是个好主意的争论),则可以从JVM命令行中启用。下面的一

  • 问题内容: 在PostgreSQL中,我有一个数据库,我打算进行以下表声明: 一切正常,除了在创建最后一个表(更正)时出现以下错误: 错误:没有唯一的约束匹配给定键的引用表“提交” 我对更正表的打算是对每个提交都有唯一的更正,但是一个提交可以(也可以不)具有更正。 我该如何解决这个错误?是设计问题还是表声明错误? 问题答案: 外键约束不关心所引用的列是否在引用另一列本身。但是引用的列 必须 是唯一

  • 我有以下表格: 如果不存在,则创建表( varchar(50)不为空, varchar(50)不为空, varchar(50)不为空, 外键('courseid')在删除级联上引用'course'('course_id') )ENGINE=InnoDB默认CHARSET=latin1; 如果不存在,请创建表 varchar(50)Not NULL, varchar(50)Not NULL, var

  • 本文向大家介绍C++中声明类的class与声明结构体的struct关键字详解,包括了C++中声明类的class与声明结构体的struct关键字详解的使用技巧和注意事项,需要的朋友参考一下 class class 关键字声明类类型或定义类类型的对象。 语法 参数 template-spec 可选模板说明。 ms-decl-spec 可选存储类说明有关更多信息 tag 给定于类的类型名称。在类范围内的

  • 模板特化可以被显式声明,这可以作为消除多重实例化的一种方式。例如: #include "MyVector.h" extern template class MyVector<int>; // 消除下面的隐式实例化 // MyVector 类将在“其他地方”被程序员显式实例化 void foo(MyVector<int>& v) { //在这个地方使用vector类型 } 下列代码就是上例