2013-01-08 4 views
0

Unix 명령 줄 sqlite3 명령 도구를 사용하여 작은 SQLite 데이터베이스에서 작업하고 있습니다. 내 스키마는 다음과 같습니다 이상한 sqlite3 동작

sqlite> .schema 
CREATE TABLE status (id text, date integer, status text, mode text); 

가 지금은 모든 항목에 대한 문자열 "상태"에 칼럼 '모드'를 설정합니다. 그러나, 나는이를 입력하면 :
sqlite> UPDATE status SET mode="Status"; 

가 대신 문자열 "상태"를 열 '모드'를 설정하는, 그것은 열 '상태'현재 값에 대한 모든 항목을 설정

. 대신 다음과 같이 입력하면 예상되는 동작을 수행합니다.

sqlite> UPDATE status SET mode='Status'; 

정상 동작입니까?

답변

0

예, SQL에서는 정상입니다.

작은 따옴표는 문자열 값으로 사용됩니다. 큰 따옴표는 식별자 (예 : 테이블 또는 열 이름)에 사용됩니다. (참조 documentation.)

1

이 또한 자주 묻는 질문입니다 : -

나의 절 발현, 컬럼이 = ", 컬럼"작동하지 않습니다. column1의 값이 "column1"인 행뿐만 아니라 테이블의 모든 행이 반환됩니다.

SQL의 문자열 리터럴 주위에 큰 따옴표가 아닌 작은 따옴표를 사용하십시오. 이것은 SQL 표준에서 요구하는 것입니다. WHERE 절 표현식을 읽어야합니다. column1 = 'column2'

SQL은 특수 문자가 들어 있거나 키워드 인 식별자 (열 또는 테이블 이름)를 큰 따옴표로 묶습니다. 따라서 큰 따옴표는 식별자 이름을 이스케이프하는 방법입니다. 그러므로, column1 = "column1"이라고하면 column1 = column1과 동일하며, 이는 항상 참입니다.

http://www.sqlite.org/faq.html#q24