2009-03-24 3 views

답변

31

규칙 :

http://dev.mysql.com/doc/refman/5.1/en/identifiers.html

식별자가 숫자로 시작하지만 숫자만을 을 구성하지 않을 수 있습니다 인용하지 않는 수 있습니다.

SELECT * FROM 12345; 

그러나 다음은 유효한 것 :

그래서 이것은 잘못된 것

SELECT * FROM `12345`; 

또는 ANSI 모드에서 실행은 다음이 작동 할 경우 :

SET @@session.sql_mode=ANSI_QUOTES; 
SELECT * FROM "12345"; 
+0

해당 문서에서 관련 부분 것은 아마도 키보드의 ESC 버튼 아래에이 일 "식별자는 숫자로 시작할 수 있지만, 인용하지 않는 한 단독 숫자로 구성 할 수 없습니다."당신이 무슨 뜻인지 –

12

카림 (Karim)과 스티브 웨이 (Steve Weet)가 지적한 바, 예, 당신은 수 있지만,이처럼 인용해야합니다 :

SELECT * FROM `3516` 

나는 아마 비록 스크립트를 재검토 제안 있을까요? 접두사 추가 : "t3516"이라는 테이블은 "3516"처럼 혼란스럽지 않습니다.

또한, 당신은 어떤 숫자가 아닌 문자를 사용할 수를 변환 할 수 있습니다 :

table 0 - t_a 
table 1 - t_b 
table 2 - t_c 
table 25 - t_z 
table 26 - t_aa 
table 27 - t_ab 
... etc 
0

만큼 당신이 테이블 이름을 인용하는데주의를 기울여야으로, karim79에 의해 주어진 대답은 '예'입니다. 물론 접두사에 numer를 사용할 수 있습니다. mytable1, mytable2, ...; 따옴표없이 작동 할 것입니다.

그런데 왜 그렇게 많은 테이블을 만들지 생각해야합니다. 허용되는 일을하는 방법은 모두가 한 테이블에 속하도록하는 것입니다. 따라서 table1, table2 ...를 사용하는 것보다 하나의 테이블을 사용하고 열에 숫자를 저장하십시오.

그건 자연스러운 방법입니다. 당신의 일을하는 방식은 쉽게 많은 문제를 야기 할 수 있습니다 (DB 스키마 변경은 백업에 문제가 많고 많은 테이블 때문에 다른 툴이 DB로 작업하기 어렵고 모든 테이블에 스키마 변경이 필요합니다). 동적으로 런타임에 스키마를 변경하는 것은 좋은 생각이 아닙니다.

+0

확실하지. 응답은 매번 식별자를 이스케이프 처리하는 한 확실히 예입니다. 또한, 테이블 이름이 자동으로 생성되는 데이터베이스의 정수인 경우가 많이 있습니다. – techdude

+0

@techdude : "번호가 매겨진 테이블"이있는 데이터베이스를 한번도 본 적이 없습니다. 너 어디서 봤니? 왜 그들은 사용 되었습니까? 나는 호기심이 ... – sleske

+0

특정 위치는 중요하지 않습니다 (또는 공개). 핵심은 테이블 이름에 숫자를 사용할 수 있다는 것입니다. asker의 질문에 더 부응하기 위해 하나의 가능한 사용은 사용자가 만든 새 테이블 (각 테이블에 대한 다른 정보가있을 수 있음)과 각 행이 일치하는 자동 증가 정수 열을 갖는 마스터 테이블을 사용하는 것입니다 작성되는 테이블의 정수 이 경우 정수형 테이블 이름 (및 해당 컬럼 이름)이 모든 주요 DBMS에서 지원되므로 문자열을 만들 필요가 없습니다. – techdude

0

나는 그것이 더 혼란스럽고 기억하기 어려울 것입니다. 테이블 이름은 저장중인 데이터와 관련이 있어야합니다. 더 나은 습관입니다.

0

숫자가 순수한 경우 백틱 (`)을 사용하여 테이블 이름을 인용하십시오. 그것은

관련 문제