2013-11-01 6 views
-1

이 코드가 실행되지 않는 이유는 무엇입니까? 여기에 내가 PHPMYAD를 통해 실행할 때 나는 점점 오전 오류입니다MYSQL 코드에 어떤 문제가 있습니까?

오류 SQL 쿼리 :

CREATE TABLE 'c4lpetitions'. 'Legalize-Raw-Milk-in-Wisconsin-1362871708' (
    'prefix'VARCHAR(10) NULL , 
    'first'VARCHAR(255) NULL , 
    'middle'VARCHAR(255) NULL , 
    'last'VARCHAR(255) NULL , 
    'suffix'VARCHAR(10) NULL , 
    'email'VARCHAR(255) NOT NULL , 
    'address'VARCHAR(255) NULL , 
    'city'VARCHAR(255) NULL , 
    'state'VARCHAR(2) NULL , 
    'zip' INT NULL , 
    'timestamp'TIMESTAMP DEFAULT CURRENT_TIMESTAMP 
    ) 

MySQL은 말했다 : 문서

1064 - 당신은 당신의 SQL 구문에 오류가 있습니다; Legalize-Raw-Milk-in-Wisconsin-1362871708 '('prefix 'VARCHAR (10'in line 1)

(1 라인에서 '10')을 사용하여 올바른 구문을 보려면 MySQL 서버 버전에 해당하는 설명서를 확인하십시오. 백 틱
+0

http://dev.mysql.com/doc/refman/5.6/en/reserved-words.html 예약어를 사용하지 말고 데이터베이스 엔진과 이식 가능하지 않은 불쾌한 백틱이 필요하지 않습니다. ANSI SQL이 아닙니다. 프로그래밍에서 예약 된 키워드를 사용하는 것이 가능하지 않으므로 SQL 안티 패턴이어야합니다. –

+1

핵심 문제 외에도 모든 청원에 ​​대해 새 테이블을 만드는 것으로 보입니다. 처리중인 특정 성능 문제가있는 경우가 아니라면 단일 사용자 테이블과 해당 테이블과 보조 테이블 사이에 많은 테이블이있는 것이 훨씬 쉽습니다. – halfer

+0

@halfer 당신은 그의 어플리케이션 요구 사항을 완벽하게 알지 못하지만 여전히 좋은 코멘트입니다. 복잡한 내부 조인이나 유니온 모든 문장이 필요하기 때문에 그는 정말로 문제가있는 모든 C4lpetitions 테이블에 대한 통계를 폴링해야합니다. 원인이되는 성능 문제 유니온은 임시 테이블을 생성하는 것으로 알려져 있습니다 ..) 이것은 파티션 테이블이어야합니다 .. –

답변

4

MySQL의 탈출 문자는 역 따옴표`가 아닌 것입니다 작은 따옴표 '

또한 우편 번호를 char12345-1234과 같은 전체 형식 우편 번호가 정수가 아니기 때문에 ints보다는 오히려 이상하게 느껴집니다.

+2

+1 우편 번호에 대한 조언. 또한 [많은 국가에 우편 번호가 있습니다.] (http://www.theonion.com/articles/perky-canada-has-own-government-laws,19927/). –

+0

또한 일부 우편 번호는 선행 0을 가질 수 있습니다. 그러나 또한 옳다. GUI를 통해 쿼리를 수행 할 때 PHPMYADMIN에서이를 볼 수 있습니다. –

+0

+1 char 데이터 형식에 ... 백틱 조언이 좋지 않습니다 .. @ top을 참조하십시오. –

1

를 사용하여 데이터베이스/테이블/열 식별자가 아닌 단일 인용 부호를 구분합니다.

단일 따옴표가 문자열 리터럴 또는 날짜 리터럴을위한 것입니다.

+0

아마도 책의 새로운 장이 되었습니까? 프로그래밍에서 예약 된 키워드를 사용하는 것은 가능하지 않습니다. 그래서 타임 스탬프는 MySQL 내에서 예약 된 키워드이기 때문에 이것은 SQL 안티 패턴이어야합니다. 사용하면 크레딧을 줄 수 있습니다 :-) .. –

+0

그래, 정말 드문 일이지만 앵무새 또는 ​​LISP 또는 일부 언어와 같은 일부 언어로 가능합니다. –

+0

@RaymondNijland, FWIW,'TIMESTAMP'는 * [* MySQL의 예약어가 아닙니다] (http://dev.mysql.com/doc/refman/5.6/en/reserved-words.html)입니다. 사람들이 너무 자주 열 이름으로 사용하기 때문에 특별하게 취급되는 일종의 할아버지입니다. –

관련 문제