9

別のテーブルから 2 つの ID を格納する必要があるテーブルがあります。デバッグを行っているときに、SQL の奇妙な動作に気付きました。

間違った sql の例:

INSERT INTO follower_list set `followerUserId` = '3' AND `followingUserid` = '4' 

上記のクエリは、DB の値としてゼロを挿入していました。クエリを詳しく調べたandところ、,. 私の目的を達成するために必要な実際のクエリは次のとおりです。

INSERT INTO table SET col1 = '3' , col2 = '4'

これは私が期待したように機能しました。私の質問は最初の (間違った) クエリに関連しています - それは実行され、構文的に正しいので、そのようなクエリはどこで使用されますか?

4

1 に答える 1

11

INSERTステートメントが構文エラーを生成せず、機能している理由は、暗黙MySQL的に ( MySQL で気に入らないことの 1 つ: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
于 2013-03-01T10:01:01.167 に答える