Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 检查原始表中是否存在外键有意义吗?_Mysql - Fatal编程技术网

Mysql 检查原始表中是否存在外键有意义吗?

Mysql 检查原始表中是否存在外键有意义吗?,mysql,Mysql,我遇到了一些我不会那样写的代码。但是,我不认为自己是MySQL专家,所以我想知道我是否漏掉了什么东西。 为了更好地理解:我只想从这个查询中得到s.SpecialID,并且只想在我的表s到其他表中有一个外键。 代码是 SELECT Distinct s.SpecialID FROM sample s, otherTable o WHERE s.otherTableID = o.id 我会把它写成 SELECT Distinct s.SpecialID FROM sample s IF s.ot

我遇到了一些我不会那样写的代码。但是,我不认为自己是MySQL专家,所以我想知道我是否漏掉了什么东西。 为了更好地理解:我只想从这个查询中得到
s.SpecialID
,并且只想在我的表
s
其他表
中有一个外键。 代码是

SELECT Distinct s.SpecialID
FROM sample s, otherTable o
WHERE s.otherTableID = o.id 
我会把它写成

SELECT Distinct s.SpecialID
FROM sample s
IF s.otherTableID IS NOT NULL

如果您使用的是InnoDB,并且实际上已经在表模式中声明了外键关系,那么就没有必要测试外键是否存在。MySQL将自动执行此要求。第二个版本应该是等效的,因为主表中应该存在任何非空值


但如果您使用的是MyISAM,则外键约束不会自动强制执行。在这种情况下,可能需要使用联接显式执行测试。

从样本s join OTHERSTABLE o(s.OTHERSTABLEID=o.id)中选择不同的s.specialID。
这是什么意思@user207421其目的是建议重写构成问题主题的SQL查询。这似乎相当明显。您的方式不同。@user207421但连接的目的不是从一个表中的多个不同表返回列吗?在我的示例中不会发生这种情况,对吗?好的,这样做是否被认为是一种良好的做法,因为底层数据库可能会发生变化?不,我认为这根本不是常见的做法。即使没有约束,应用程序中的业务逻辑通常也会阻止孤立记录。