2011-12-29 113 views
1

有人知道这个MYSQL 5.0语法有什么问题吗?SQL语法错误(MYSQL 5.0)

CREATE TABLE IF NOT EXISTS target (
    _id int(11) NOT NULL AUTO_INCREMENT, 
    time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, 
    map_id int(11) DEFAULT NULL, 
    left int(11) DEFAULT NULL, 
    top int(11) DEFAULT NULL, 
    status tinyint(1) NOT NULL, 
    temperature int(11) DEFAULT NULL, 
    humidity float DEFAULT NULL, 
    lum int(11) DEFAULT NULL, 
    PRIMARY KEY (_id), 
    FOREIGN KEY (map_id) REFERENCES map(id) ON DELETE CASCADE 
) 

我会告诉你的错误:

你在你的SQL语法错误;检查对应于你的MySQL服务器版本正确的语法使用附近的手册“左整DEFAULT NULL, 顶部INTEGER DEFAULT NULL, 状态TINYINT(1)NOT”第5行

+0

可能的重复[我如何写一个与MySql中的受保护关键字名称相同的表的SQL?](http://stackoverflow.com/questions/10706920/how-can-i-write-sql -for-a-table-that-shares-the-same-name-as-a-protected-keyword) – Jocelyn 2013-05-06 06:39:50

回答

2

因为leftMySQL 5.0 reserved word。此外,即使您可以转义字段名称,但在表定义中使用保留字绝不是一个好主意。

2

你必须写这样的:

CREATE TABLE IF NOT EXISTS target (
    _id int(11) NOT NULL AUTO_INCREMENT, 
    time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, 
    map_id int(11) DEFAULT NULL, 
    `left` int(11) DEFAULT NULL, 
    top int(11) DEFAULT NULL, 
    status tinyint(1) NOT NULL, 
    temperature int(11) DEFAULT NULL, 
    humidity float DEFAULT NULL, 
    lum int(11) DEFAULT NULL, 
    PRIMARY KEY (_id), 
    FOREIGN KEY (map_id) REFERENCES map(id) ON DELETE CASCADE 
) 

看看``(反引号)在左排字符!

+0

谢谢macjohn! – Aerox 2011-12-29 17:58:15

0

您正在使用保留字作为字段名称。你可以做到这一点,但你必须妥善逃避它们,像这样:

CREATE TABLE IF NOT EXISTS target (
    `_id` int(11) NOT NULL AUTO_INCREMENT, 
    `time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, 
    `map_id` int(11) DEFAULT NULL, 
    `left` int(11) DEFAULT NULL, 
    `top` int(11) DEFAULT NULL, 
    `status` tinyint(1) NOT NULL, 
    `temperature` int(11) DEFAULT NULL, 
    `humidity` decimal(13,2) DEFAULT NULL, 
    `lum` int(11) DEFAULT NULL, 
    PRIMARY KEY (_id), 
    FOREIGN KEY (map_id) REFERENCES map(id) ON DELETE CASCADE 
) 

我的建议是避免保留名称。