2014-01-23 2 views
0

나는 그 다음과 같습니다 만든 샘플 테이블에 SQL 쿼리를 실행하려고했다 :SQLite는 UPDATE 문은 아무것도하지 않고있다

 
name  text         number 
---------------------------------------------------------- 
target  the cell to operate on     5 
cruft  cell here to simulate stuff happening 7 

이것은 내가 실행하려고하고있는 SQL 쿼리입니다 :

UPDATE data SET 'name'='target', 'number'=2 WHERE 'name'='target'; 

는 I는 I 명령 행 SQLite는 버전?에서 결국 SQLite Database Browser 이것을 실행하도록 시도 할 때 이것이 2

에 첫 번째 행 (5)를 변경하는 것으로 n 3.7.13, 오류는보고되지 않았지만 요청 된 항목도 변경되지 않았습니다. 이상하게도 인용 부호가 문자열 'target'에서 제거되면 'target'이 열 이름으로 사용되지 않아도 no such column: target이라는 오류 메시지가 표시됩니다. 'name'='target', 부분을 제거해도 아무 것도 변경되지 않습니다.

결국 나는 혼동하는 WHERE 절의 'name'에서 작은 따옴표를 제거하여 즉각적인 문제를 해결했습니다.

UPDATE data SET 'name'='target', 'number'=3 WHERE name='target'; 

는 이런 사람이 왜 알고 있나요, 아니면 제가 다시 따옴표를 작동 할 수있는 방법에 공백과 가상의 열 이름을 방지하기 위해?

답변

1

'name' 문자열이 'target'과 같은지 여부를 테스트했습니다.

당신은 열 이름에 따옴표를 사용해야합니다

UPDATE data SET "name"='target', "number"=3 WHERE "name"='target'; 

참조 : https://www.sqlite.org/lang_keywords.html

0

작은 따옴표가 문자열 상수에 사용됩니다. MySQL에서는 변수 이름에 백 틱을 사용합니다. 이름에 예약어 나 비정상적인 문자가 포함되어 있지 않으면 변수 이름에 백 틱을 사용하십시오. 따라서 :

UPDATE data 
    SET name = 'target', 
     number = 2 
    WHERE name = 'target'; 

일반적으로 문자열 상수에는 작은 따옴표 만 사용해야합니다.

1

문자열 리터럴에 작은 따옴표를 사용합니다. 즉, 열에 할당 할 값입니다. 식별자, 즉 열 또는 표의 이름에 큰 따옴표를 사용하십시오.

http://sqlite.org/faq.html#q24이 그래서 예를 들어 읽어야 참조

UPDATE data SET "name"='target', "number"=2 WHERE "name"='target'; 
관련 문제