【问题标题】:MYSQL ADD CONSTRAINT ERRORMYSQL添加约束错误
【发布时间】:2013-10-20 21:02:23
【问题描述】:

我的添加约束出现错误。

我正在使用 MYSQL 工作台创建表

来自 MYSQL 工作台的消息错误: 错误代码:1064 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 'ADD CONSTRAINT user_contact_ibfk1 FOREIGN KEY(user_id) REFERENCES 'user_ac' 附近使用正确的语法

这可能只是我遇到的版本问题。我正在使用 5.2.4.7

错误:

22:47:35 ADD CONSTRAINT user_contact_ibfk_1 FOREIGN KEY (user_id) REFERENCES user_account (user_id) ON DELETE CASCADE ON UPDATE CASCADE 错误代码:1064。您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册以获取正确的语法,以便在 'ADD CONSTRAINT user_contact_ibfk_1 FOREIGN KEY (user_id) REFERENCES 'user_ac' at line 1 0.000 sec 附近使用

--
-- Table structure for table `user_contact`
--
CREATE TABLE IF NOT EXISTS `user_contact` (
  `contact_id` bigint(11) NOT NULL AUTO_INCREMENT,
  `user_id` bigint(11) NOT NULL,
  `first_name` varchar(25) NOT NULL,
  `last_name` varchar(25) NOT NULL,
  `email` varchar(50) NOT NULL,
  `email_code` varchar(32) NOT NULL,
  `cellnumber` decimal(32,0) NOT NULL,
  `city` varchar(25) NOT NULL,
  `state` varchar(25) NOT NULL,
  `country` varchar(25) NOT NULL,
  `username` varchar(50) NOT NULL,
  PRIMARY KEY (`contact_id`),
  UNIQUE KEY `user_id` (`user_id`)
 ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=16 ;

-- --------------------------------------------------------

--
-- Table structure for table `user_profile`
--

CREATE TABLE IF NOT EXISTS `user_profile` (
  `profile_id` bigint(11) NOT NULL AUTO_INCREMENT,
  `user_id` bigint(11) NOT NULL,
  `username` varchar(50) NOT NULL,
  `about_me` text NOT NULL,
  `work_info` varchar(255) NOT NULL,
  `education_info` varchar(255) NOT NULL,
  `rating` float NOT NULL,
  `user_image` varchar(1024) NOT NULL,
  `friend_array` text NOT NULL,
  `online_status` tinyint(1) NOT NULL,
  PRIMARY KEY (`profile_id`),
  UNIQUE KEY `user_id` (`user_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=15 ;

--
-- Table structure for table `user_account`
--

CREATE TABLE IF NOT EXISTS `user_account` (
  `user_id` bigint(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(50) NOT NULL,
  `password` varchar(50) NOT NULL,
  `active` tinyint(1) NOT NULL DEFAULT '1',
  `type` int(11) NOT NULL,
  `online_status` tinyint(1) NOT NULL,
  PRIMARY KEY (`user_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=16 ;

--
-- Constraints for table `user_contact`
--
ALTER TABLE `user_contact`
  ADD CONSTRAINT `user_contact_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES    `user_account` (`user_id`) ON DELETE CASCADE ON UPDATE CASCADE;

--
-- Constraints for table `user_profile`
--

ALTER TABLE `user_profile`
 ADD CONSTRAINT `user_profile_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `user_account`     (`user_id`) ON DELETE CASCADE ON UPDATE CASCADE;

【问题讨论】:

  • user_account 表呢?
  • 对不起,我现在加进去了。
  • 它适用于我sqlfiddle.com/#!2/e9650
  • 这可能是我的工作台版本的错误吗?我已经用额外的错误信息更新了问题。
  • 我听说工作台有问题,请尝试从 phpmyadmin 运行它或获取heidisql.com

标签: php mysql sql database


【解决方案1】:

我唯一能想到的就是 FOREIGN KEY 名称可能会被占用,请尝试更改它。

ALTER TABLE `user_contact`
  ADD CONSTRAINT `user_contact_ibfk_stuff` FOREIGN KEY (`user_id`) REFERENCES    `user_account` (`user_id`) ON DELETE CASCADE ON UPDATE CASCADE;

运行这篇文章的结果

SELECT @@SESSION.sql_mode;

或者直接运行这个:

SET SESSION SQL_MODE='NO_ENGINE_SUBSTITUTION';

【讨论】:

  • @user2901038 您确定您的问题中发布的查询与您正在运行的查询相同吗?
  • 是的,我 100% 确定这一点,因为我复制/粘贴了它以确保。我的查询中有其他与约束无关的表。我应该添加它们吗?
  • 不,只要确保表是创建的表,您可能已经存在具有相同名称和不同列的表。或者更好的是 DROP 这两个表并再次运行所有这些东西。
  • 我确实删除了所有表并再次运行查询。我似乎遇到了同样的错误。
【解决方案2】:

原来是 MYSQL 工作台的一些内部错误。我使用了 phpmyadmin,它运行良好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-25
    • 2014-09-15
    • 2013-06-02
    • 2018-04-28
    相关资源
    最近更新 更多