我有一个表,我需要从另一个表中存储两个id。在进行一些调试时,我注意到了SQL的一些奇怪行为。
错误的sql示例:
INSERT INTO follower_list set `followerUserId` = '3' AND `followingUserid` = '4'
上面的查询是在数据库中插入零值作为值。我仔细研究了查询,发现我错误地将and
放在了,
的位置。我需要实现的目的是:
INSERT INTO table SET col1 = '3' , col2 = '4'
哪个像我预期的那样有效。我的问题与第一个(不正确的)查询有关 - 因为它执行并且在语法上是正确的,在哪里使用查询?
答案 0 :(得分:11)
INSERT
语句不会生成语法错误并且它也有效的原因是因为MySQL
隐式(我不喜欢MySQL :D
)将语句解析为布尔表达式。
在INSERT
语句中,只有followerUserId
列可更新,因为其余部分是布尔表达式的一部分。该查询被评估为:
INSERT INTO follower_list SET followerUserId = ('3' and (followingUserid='4'))
这里:
followerUserId = ('3' and (followingUserid='4')) // assuming followingUserid <> 4
followerUserId = ('3' and (0))
followerUserId = 0
另一个,
followerUserId = ('3' and (followingUserid='4')) // assuming followingUserid = 4
followerUserId = ('3' and (1))
followerUserId = 1 // will only return zero if one of the values is zero