2013-11-01 34 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語法錯誤;檢查與您的MySQL服務器版本相對應的手冊,以在''c4lpetitions'附近使用正確的語法。'Legalize-Raw-Milk-in-Wisconsin-1362871708'('prefix'VARCHAR(10'at line 1)

+0

只學習不要使用保留字http://dev.mysql.com/doc/refman/5.6/en/reserved-words.html,所以你不需要在數據庫引擎和它之間不可移植的令人討厭的反引號是不是ANSI SQL ..在編程中使用保留關鍵字是不可能的,所以這應該是一個SQL反模式。 –

+1

除了核心問題,似乎你正在爲每個請願書創建一個新表。除非您遇到特定的性能問題,否則您會發現擁有單個用戶表格以及該表格與請願表格之間的許多表格要容易得多。 – halfer

+0

@halfer你不完全知道他的申請要求,但它仍然是一個很好的評論..如果他確實需要輪詢stats關於所有c4lp​​etitions表,他有麻煩,因爲需要一個複雜的內部聯合或聯合所有語句(什麼可以導致性能問題工會已知創建臨時表)..這應該是分區表.. –

回答

4

MySQL的轉義字符是一個反勾',而不是一個單引號'。

我還建議存儲郵政編碼爲char s因爲全格式郵政編碼(如12345-1234)不是一個整數,而不是ints

+2

+1對郵政編碼的建議。此外,[許多國家的郵政編碼都有字母](http://www.theonion.com/articles/perky-canada-has-own-government-laws,19927/)。 –

+0

此外,一些郵政編碼可能會有一個前導零。但'也是對的。 在GUI上進行查詢時,您可以看到在PHPMYADMIN中。 –

+0

對於char數據類型+1 ...反向提示是不好的..看評論@頂部 –

1

使用反單引號來分隔數據庫/表/列標識符,而不是單引號。

單引號是字符串文字或日期文字。

+0

也許您的書有新的篇章?在編程使用保留關鍵字甚至是不可能的所以這是因爲時間戳是MySQL中的保留關鍵字應該是一個SQL反模式..如果你使用它只是給我的學分:-) .. –

+0

沒錯這就是真正罕見的,但它可能在Parrot或LISP等語言中是可能的。 –

+0

@RaymondNijland,FWIW,'TIMESTAMP'是*不* A [在MySQL保留字(http://dev.mysql.com/doc/refman/5.6/en/reserved-words.html)。這是一種祖父母的風格 - 即特別對待,因爲人們經常使用它作爲列名。 –