MySQL定义外键的方法

数据库 MySQL
MySQL定义外键的方法是每个学习MySQL的人都需要掌握的知识,下文就对MySQL定义外键的语句写法进行了详细的阐述,供您参考。

外键为MySQL带来了诸多的好处,下面就为您介绍MySQL定义外键的语句写法,以及MySQL定义外键过程中出现错误的处理方法,供您参考学习。

  1. mysql> CREATE TABLE categories (  
  2.       -> category_id tinyint(3) unsigned NOT NULL AUTO_INCREMENT,  
  3.       -> name varchar(30) NOT NULL,  
  4.       -> PRIMARY KEY(category_id)  
  5.       -> ) ENGINE=INNODB;  
  6. Query OK, 0 rows affected (0.36 sec)  
  7.  
  8. mysql> INSERT INTO categories VALUES (1, ‘SQL Server’), (2, ‘Oracle’), (3, ‘PostgreSQL’), (4, ‘MySQL’), (5, ‘SQLite’);  
  9. Query OK, 5 rows affected (0.48 sec)  
  10. Records: 5    Duplicates: 0    Warnings: 0  
  11.  
  12. mysql> CREATE TABLE members (  
  13.       -> member_id INT(11) UNSIGNED NOT NULL,  
  14.       -> name VARCHAR(20) NOT NULL,  
  15.       -> PRIMARY KEY(member_id)  
  16.       -> ) ENGINE=INNODB;  
  17. Query OK, 0 rows affected (0.55 sec)  
  18.  
  19. mysql> INSERT INTO members VALUES (1, ‘test’), (2, ‘admin’);  
  20. Query OK, 2 rows affected (0.44 sec)  
  21. Records: 2    Duplicates: 0    Warnings: 0  
  22.  
  23. mysql> CREATE TABLE articles (  
  24.       -> article_id INT(11) unsigned NOT NULL AUTO_INCREMENT,  
  25.       -> title varchar(255) NOT NULL,  
  26.       -> category_id tinyint(3) unsigned NOT NULL,  
  27.       -> member_id int(11) unsigned NOT NULL,  
  28.       -> INDEX (category_id),  
  29.       -> FOREIGN KEY (category_id) REFERENCES categories (category_id),  
  30.       -> CONSTRAINT fk_member FOREIGN KEY (member_id) REFERENCES members (member_id),  
  31.       -> PRIMARY KEY(article_id)  
  32.       -> ) ENGINE=INNODB;  
  33. Query OK, 0 rows affected (0.63 sec)  

注意:对于非InnoDB表,FOREIGN KEY子句会被忽略掉。#p#
如果遇到如下错误:

  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字段的默认长度

责任编辑:段燃 来源: 互联网
相关推荐

2010-11-22 09:43:07

MySQL定义外键

2011-05-12 14:33:37

MySQL外键

2010-10-19 17:28:08

SQL SERVER外

2010-10-09 10:21:19

MySQL删除外键

2010-10-09 09:55:41

MySQL外键

2010-05-17 16:10:39

MySQL数据库

2010-11-22 10:08:03

Mysql外键用法

2010-11-22 09:59:32

MySQL外键设置

2010-05-11 18:46:46

MYSQL 外键

2010-09-03 11:52:41

SQL删除

2010-10-09 09:46:28

MySQL外键

2010-11-12 15:19:06

Sql Server外

2010-06-17 17:50:31

SQL Server外

2019-11-05 08:20:13

MySQL数据库外键

2022-06-26 06:32:28

MySQL数据库维护

2010-10-09 10:29:29

MySQL外键

2011-09-01 10:56:34

2010-05-11 19:11:13

MySQL外键

2010-01-05 09:24:42

MySQL外键约束

2023-05-31 08:24:20

SQLAlchemyPython
点赞
收藏

51CTO技术栈公众号