2011-07-22 146 views
0

這是一個簡單的CREATE TABLE語句,我在PHPMyAdmin中編寫。好吧,我知道我可以在PHPMyAdmin中簡單實現,但我喜歡完全控制。這裏的語句:這個簡單的MySQL CREATE TABLE語句有什麼問題?

CREATE TABLE profile 
(
id int NOT NULL AUTO_INCREMENT, 
PRIMARY KEY(id), 
type int(1) NOT NULL, 
view int(1) NOT NULL default '1', 
ver int(1) NOT NULL default '2', 
email NOT NULL varchar(32), 
password NOT NULL varchar(16), 
first varchar(32), 
last varchar(32), 
site varchar(64), 
address varchar(32), 
city varchar(32), 
zip int, 
state char(2), 
country varchar(50), 
about text, 
datereg int(20) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8; 
+0

什麼錯誤是它給你? – Dirk

+0

#1064 - 您的SQL語法錯誤;檢查與您的MySQL服務器版本相對應的手冊,以便在第8行'NOT NULL varchar(32),密碼NOT NULL varchar(16),第一個varchar(32),最後'使用正確的語法 – Brad

+1

爲什麼使用字符串,'1'和'2'作爲整數列的默認值? MySQL可能會適合它,但這是一個壞習慣。 –

回答

2

我更換

view int(1) NOT NULL default '1', 
ver int(1) NOT NULL default '2', 
email NOT NULL varchar(32), 
password NOT NULL varchar(16), 

view int(1) NOT NULL default 1, 
ver int(1) NOT NULL default 2, 
email varchar(32) NOT NULL , 
password varchar(16) NOT NULL , 

和它的工作

+0

AHHH!謝謝,很好。男人終於可以去睡覺了哈哈。 – Brad

0

沒有看到是什麼錯誤,我會說這是失敗,因爲你試圖命名與一個MySQL保留關鍵字列 - 我的猜測是view

如果將反引號`圍繞您的列名稱,它將允許您使用保留字。 請記住,該表上的任何其他查詢還需要圍繞使用保留字的列名的反引號。

例如。

CREATE TABLE profile 
(
`id` int NOT NULL AUTO_INCREMENT, 
PRIMARY KEY(id), 
`type` int(1) NOT NULL, 
`view` int(1) NOT NULL default '1', 
`ver` int(1) NOT NULL default '2', 
`email` NOT NULL varchar(32), 
`password` NOT NULL varchar(16), 
`first` varchar(32), 
`last` varchar(32), 
`site` varchar(64), 
`address` varchar(32), 
`city` varchar(32), 
`zip` int, 
`state` char(2), 
`country` varchar(50), 
`about` text, 
`datereg` int(20) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8; 
+0

我嘗試使用反引號(在所有列名稱上),甚至將所有列名稱切換到非MySQL關鍵字,但它不起作用。 – Brad

1

視圖是一個MySQL關鍵字。如果你想使用的列具有相同的名稱,你必須用反引號括起來像

`view` int(1) NOT NULL default 1, 
+0

我嘗試使用反引號(在所有列名稱上),甚至將所有列名切換到非MySQL關鍵字,但它不起作用。 – Brad

+0

'NOT NULL'也應該在類型之後。查看@ Bjoern的回答 – Paulpro

2

試這=)

CREATE TABLE `db`.`profile` (
    `id` INT NOT NULL AUTO_INCREMENT , 
    `type` INT(1) NOT NULL , 
    `view` INT(1) NOT NULL DEFAULT 1 , 
    `ver` INT(1) NOT NULL DEFAULT 2 , 
    `email` VARCHAR(32) NULL , 
    `password` VARCHAR(16) NULL , 
    `first` VARCHAR(32) NULL , 
    `last` VARCHAR(32) NULL , 
    `site` VARCHAR(64) NULL , 
    `address` VARCHAR(32) NULL , 
    `city` VARCHAR(32) NULL , 
    `zip` INT NULL , 
    `state` CHAR(2) NULL , 
    `country` VARCHAR(50) NULL , 
    `about` TEXT NULL , 
    `datereg` INT(20) NULL , 
    PRIMARY KEY (`id`)) 
ENGINE = MyISAM DEFAULT CHARSET=utf8; 
+0

檢查不爲空/空 – KaKa

3

有多個錯誤會導致您的SQL語句無法正常工作。在你的表

  • 儘量避免保留字(如查看,最後,第一,等等):

    試試這個:

    CREATE TABLE `profile` (
        `id` int(11) NOT NULL AUTO_INCREMENT, 
        `type` int(1) NOT NULL, 
        `view` int(1) NOT NULL DEFAULT '1', 
        `ver` int(1) NOT NULL DEFAULT '2', 
        `email` varchar(32) NOT NULL, 
        `password` varchar(16) NOT NULL, 
        `first` varchar(32), 
        `last` varchar(32), 
        `site` varchar(64), 
        `address` varchar(32), 
        `city` varchar(32) , 
        `zip` int(11), 
        `state` char(2), 
        `country` varchar(50), 
        `about` text, 
        `datereg` int(20), 
        PRIMARY KEY (`id`) 
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8 
    

    一些補充。這是可能的(如果 正確轉義),但它根本沒有幫助。

  • 正確地轉義您的字段 名稱和您的表名稱。
  • 閱讀手冊: http://dev.mysql.com/doc/refman/5.1/en/create-table.html