2011-03-29 32 views
3

我不明白爲什麼這不起作用。使用mysql版本5.0.91 -log。和phpMyAdminmysql插入錯誤...不知道有什麼問題

INSERT INTO 'sequences'(
'key', 'author', 'tlength', 'progress', 'time') 
VALUES (
NULL , '00000', 10, 1, NULL 
) 

獲取以下錯誤。

您的SQL語法錯誤; ( 'key','author','tlength','progress','time') VALUES( NULL, 「在1號線

這裏的表(名稱,類型,屬性,空,默認情況下,多餘的)

 
key  int(11)  UNSIGNED No      auto_increment 
author  char(20)    No   
tlength tinyint(3) UNSIGNED No   
progress tinyint(4) UNSIGNED No 0 
time  timestamp    Yes CURRENT_TIMESTAMP 

我試着/上述查詢的許多組合沒有引號和其他變化。任何想法?

回答

4

兩件事情:

  • 不要引用表名或字段
  • 'Key'是MySQL中的一個保留字,因此您需要用反引號將該字段名稱附上

這會給你:

INSERT INTO sequences (
`key`, author, tlength, progress, time) 
VALUES (
NULL , '00000', 10, 1, NULL 
) 

它往往更容易只是引用的所有字段名和表名與反引號以防萬一,但這裏的一切可以抓住你了保留字的完整列表:http://dev.mysql.com/doc/refman/5.5/en/reserved-words.html

3

默認情況下,你不應該pu t引號中的表名。嘗試:

INSERT INTO sequences (
    'key', 'author', 'tlength', 'progress', 'time') 
VALUES (
    NULL , '00000', 10, 1, NULL 
) 
+1

在列名中也不應該有引號 – Quassnoi 2011-03-29 09:22:50

+0

正如我所說的......我試過了,沒有引號。我仍然收到錯誤,代碼摘錄和行號存在差異。 – Victor 2011-03-29 09:56:47

+0

@Victor你可以給我們錯誤消息,當你嘗試它沒有引號? – eisberg 2011-03-29 09:57:39

3

與反引號的表和列名替換引號:

INSERT 
INTO `sequences` (`key`, `author`, `tlength`, `progress`, `time`) 
VALUES (NULL, '00000', 10, 1, NULL) 
0

與其他大多數語言一樣,引號用作字符串分隔符,因此解釋器可以區分關鍵字和文字。如果你引用表和列名,你告訴MySQL的,他們是數據庫對象

SELECT 'CURRENT_TIMESTAMP', CURRENT_TIMESTAMP 

:只要運行這個查詢看出區別。

此外,你有一個名爲key的專欄。這是MySQL中的一個保留字,您需要將其轉義。 MySQL使用了這種情況的語法是報價:

INSERT INTO sequences (`key`, author, tlength, progress, time) 
VALUES (NULL , '00000', 10, 1, NULL) 

最後但並非最不重要的,你不能在key列,如果你將它定義爲NOT NULL插入NULL。這就是NOT NULL的意思。

相關問題