2013-03-01 32 views
9

Tôi có một bảng nơi tôi cần lưu trữ hai id từ một bảng khác. Trong khi làm một số gỡ lỗi tôi nhận thấy một số hành vi kỳ lạ của SQL.INSERT không mong muốn ... SET hành vi truy vấn

Ví dụ về sql sai:

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

Truy vấn trên được chèn zero là như giá trị trong DB. Tôi đã nghiên cứu truy vấn gần hơn và nhận ra rằng tôi đã phạm sai lầm khi đặt and thay cho số ,. Truy vấn thực sự tôi cần để hoàn thành mục đích của mình là:

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

Làm việc như tôi mong đợi. Câu hỏi của tôi liên quan đến truy vấn đầu tiên (không chính xác) - vì nó được thực hiện và có cú pháp chính xác, các truy vấn giống như nó sẽ được sử dụng ở đâu?

Trả lời

11

Lý do tại sao báo cáo kết quả INSERT không tạo ra lỗi cú pháp và nó cũng đang làm việc là vì MySQL ngầm (có một điều tôi không thích trong MySQL :D) phân tích báo cáo kết quả như biểu thức boolean.

Trong tuyên bố INSERT của bạn, chỉ followerUserId cột là có thể cập nhật vì phần còn lại là một phần của biểu thức boolean. Truy vấn được đánh giá là:

INSERT INTO follower_list SET followerUserId = ('3' and (followingUserid='4')) 

đây:

followerUserId = ('3' and (followingUserid='4')) // assuming followingUserid <> 4 
followerUserId = ('3' and (0)) 
followerUserId = 0 

khác,

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 
+1

bạn sir là Skeet jon của sql .. tuyệt vời hiểu biết. –

+0

Cảm ơn @JW Hôm nay tôi cũng học 'Chèn' với' SET' và 'AND' :) –

+0

@YogeshSuthar đây là cú pháp cũ của' INSERT' trong mysql. –

Các vấn đề liên quan