首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在创建表之后添加表引用约束,MySQL

问在创建表之后添加表引用约束,MySQL
EN

Stack Overflow用户
提问于 2013-07-07 07:33:55
回答 1查看 442关注 0票数 0

我有两张表代表利益和产品。我正在实现它们之间的many_many关系。在创建表时,我忽略了创建表约束,以确保如果删除产品或兴趣记录,则会删除赋值表的记录。

利益表

代码语言:javascript
复制
CREATE TABLE IF NOT EXISTS `interests` (
  `id` int(11) NOT NULL auto_increment,
  `interest` varchar(255) NOT NULL,
  `created` datetime NOT NULL,
  `modified` datetime NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=62 ;

产品表

代码语言:javascript
复制
CREATE TABLE IF NOT EXISTS `products` (
  `id` int(11) NOT NULL auto_increment,
  `created` datetime NOT NULL,
  `modified` datetime NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=65 ;

赋值表

代码语言:javascript
复制
CREATE TABLE IF NOT EXISTS `interest_product_assignment` (
  `id` int(11) NOT NULL auto_increment,
  `interest_id` int(11) NOT NULL,
  `product_id` int(11) NOT NULL,
  PRIMARY KEY  (`id`),
  KEY `product` (`product_id`),
  KEY `interest` (`interest_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;

我试图在其中添加这个约束似乎没有成功-

代码语言:javascript
复制
ALTER TABLE `interest_product_assignment` ADD CONSTRAINT `product` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) ON DELETE CASCADE ON UPDATE RESTRICT;

ALTER TABLE `interest_product_assignment` ADD CONSTRAINT `interest` FOREIGN KEY (`interest_id`) REFERENCES `interest` (`id`) ON DELETE CASCADE ON UPDATE RESTRICT;

当我删除产品记录时,相应的分配记录不会被删除。

关于这方面的一些问题:

  1. 这是这种约束的正确语法吗?
  2. 我在创建表时没有添加这些约束,还是已经在表中获得了数据,这是重要的吗?
  3. 在PHPMyADMIN中,我可以查看是否成功地添加了约束?我似乎在任何地方都找不到对它们的引用,这让我认为PHPMyADMIN忽略了我的约束而没有抛出错误消息。
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-07 07:47:35

添加外键不会在MyISAM表上发出警告/错误,但不支持它。

在创建外键之前,您需要将MyISAM更改为InnoDB,它将非常好地工作。

来自官方MySQL手册:

在稍后阶段,还将为MyISAM表实现外键约束。

http://dev.mysql.com/doc/refman/5.7/en/ansi-diff-foreign-keys.html

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17510136

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档