【问题标题】:Error #1064 near "REFERENCES" while adding a foreign key添加外键时出现“REFERENCES”附近的错误 #1064
【发布时间】:2014-02-28 10:09:33
【问题描述】:

我在尝试创建外键时不断收到错误 1064:

ALTER TABLE `zajimavost`
    ADD CONSTRAINT FK_zaj_bod 
    FOREIGN KEY def_bod
      REFERENCES `bod`(`gid`)
      ON UPDATE CASCADE ON DELETE CASCADE;

它抱怨:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'REFERENCES `bod`(`gid`)
      ON UPDATE CASCADE ON DELETE CASCADE' at line 4

我试过带或不带反引号,问题总是一样。

我的桌子:

CREATE TABLE `zajimavost` (
 `zaj_id` int(11) NOT NULL,
 `lok_id` int(11) NOT NULL,
 `nazev` varchar(255) COLLATE utf8_czech_ci NOT NULL,
 `kategorie` int(11) NOT NULL DEFAULT '1',
 `datace_od` int(11) NOT NULL DEFAULT '31',
 `datace_do` int(11) NOT NULL DEFAULT '60',
 `def_bod` int(11) DEFAULT NULL,
 PRIMARY KEY (`zaj_id`),
 KEY `ck_zaj_lok` (`lok_id`),
 KEY `zaj_id` (`zaj_id`),
 KEY `FK_zaj_kat` (`kategorie`),
 KEY `FK_zaj_bod` (`def_bod`),
 CONSTRAINT `FK_zaj_kat` FOREIGN KEY (`kategorie`) REFERENCES `kategorie` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
 CONSTRAINT `fk_zaj_lok` FOREIGN KEY (`lok_id`) REFERENCES `lokalita` (`lok_id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci

CREATE TABLE `bod` (
 `gid` int(11) NOT NULL AUTO_INCREMENT,
 `geom` point DEFAULT NULL,
 `radius` int(4) NOT NULL DEFAULT '50',
 PRIMARY KEY (`gid`)
) ENGINE=InnoDB AUTO_INCREMENT=30 DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci

表格中有数据。

那么如何解决呢?

【问题讨论】:

    标签: mysql foreign-keys alter-table


    【解决方案1】:

    添加外键时需要在子表列名中使用(),试试这个

    ALTER TABLE zajimavost 
    ADD CONSTRAINT FK_zaj_bod 
    FOREIGN KEY (def_bod) REFERENCES `bod`(`gid`)  
    ON UPDATE CASCADE ON DELETE CASCADE;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-25
      • 2021-03-17
      • 2013-10-18
      • 1970-01-01
      • 1970-01-01
      • 2013-11-16
      • 2014-10-10
      • 1970-01-01
      相关资源
      最近更新 更多