龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 数据库类 > MySQL 技术 >

MySQL定义外键的方法(1)(2)

时间:2011-04-12 23:18来源:未知 作者:admin 点击:
分享到:
如果遇到如下错误: ERROR1005:Cantcreatetable./test/articles.frm(errno:150) 请仔细检查以下定义语句,常见的错误一般都是表类型不是INNODB、相关联的字段写错了、缺

如果遇到如下错误:

  1. ERROR 1005: Can’t create table ‘./test/articles.frm’ (errno: 150) 

请仔细检查以下定义语句,常见的错误一般都是表类型不是INNODB、相关联的字段写错了、缺少索引等等。

至此categories.category_id和articles.category_id、members.member_id和 articles.member_id已经建立外键关系,只有 articles.category_id 的值存在与 categories.category_id 表中并且articles.member_id的值存在与members.member_id表中才会允许被插入或修改。例如:

  1. mysql> INSERT INTO articles (category_id, member_id, title) VALUES (6, 1, ‘foo’);  
  2. ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`test/articles`, CONSTRAINT `articles_ibfk_1` FOREIGN KEY (`category_id`)REFERENCES `categories` (`id`))  
  3.  
  4. mysql> INSERT INTO articles (category_id, member_id, title) VALUES (3, 3, ‘foo’);  
  5. ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`test/articles`, CONSTRAINT `fk_member` FOREIGN KEY (`member_id`) REFERENCES `members` (`member_id`))  
  6.  

可见上面两条语句都会出现错误,因为在categories表中并没有category_id=6、members表中也没有member_id=3的记录,所以不能插入。而下面这条SQL语句就可以。

  1. mysql> INSERT INTO articles (category_id, member_id, title) VALUES (3, 2, ‘bar’);  
  2. Query OK, 1 row affected (0.03 sec) 

以上就是MySQL定义外键的方法介绍。

带参数的MySql存储过程

取得MySQL表信息的语句

mysql UPDATE语句的使用方法

MySQL单表多关键字模糊查询的实现

常见MySql字段的默认长度


精彩图集

赞助商链接