Mysql 检查原始表中是否存在外键有意义吗?
我遇到了一些我不会那样写的代码。但是,我不认为自己是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
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但连接的目的不是从一个表中的多个不同表返回列吗?在我的示例中不会发生这种情况,对吗?好的,这样做是否被认为是一种良好的做法,因为底层数据库可能会发生变化?不,我认为这根本不是常见的做法。即使没有约束,应用程序中的业务逻辑通常也会阻止孤立记录。