MySQL定義外鍵的方法
外鍵為MySQL帶來(lái)了諸多的好處,下面就為您介紹MySQL定義外鍵的語(yǔ)句寫法,以及MySQL定義外鍵過程中出現(xiàn)錯(cuò)誤的處理方法,供您參考學(xué)習(xí)。
- mysql> CREATE TABLE categories (
- -> category_id tinyint(3) unsigned NOT NULL AUTO_INCREMENT,
- -> name varchar(30) NOT NULL,
- -> PRIMARY KEY(category_id)
- -> ) ENGINE=INNODB;
- Query OK, 0 rows affected (0.36 sec)
- mysql> INSERT INTO categories VALUES (1, ‘SQL Server’), (2, ‘Oracle’), (3, ‘PostgreSQL’), (4, ‘MySQL’), (5, ‘SQLite’);
- Query OK, 5 rows affected (0.48 sec)
- Records: 5 Duplicates: 0 Warnings: 0
- mysql> CREATE TABLE members (
- -> member_id INT(11) UNSIGNED NOT NULL,
- -> name VARCHAR(20) NOT NULL,
- -> PRIMARY KEY(member_id)
- -> ) ENGINE=INNODB;
- Query OK, 0 rows affected (0.55 sec)
- mysql> INSERT INTO members VALUES (1, ‘test’), (2, ‘admin’);
- Query OK, 2 rows affected (0.44 sec)
- Records: 2 Duplicates: 0 Warnings: 0
- mysql> CREATE TABLE articles (
- -> article_id INT(11) unsigned NOT NULL AUTO_INCREMENT,
- -> title varchar(255) NOT NULL,
- -> category_id tinyint(3) unsigned NOT NULL,
- -> member_id int(11) unsigned NOT NULL,
- -> INDEX (category_id),
- -> FOREIGN KEY (category_id) REFERENCES categories (category_id),
- -> CONSTRAINT fk_member FOREIGN KEY (member_id) REFERENCES members (member_id),
- -> PRIMARY KEY(article_id)
- -> ) ENGINE=INNODB;
- Query OK, 0 rows affected (0.63 sec)
注意:對(duì)于非InnoDB表,F(xiàn)OREIGN KEY子句會(huì)被忽略掉。#p#
如果遇到如下錯(cuò)誤:
- ERROR 1005: Can’t create table ‘./test/articles.frm’ (errno: 150)
請(qǐng)仔細(xì)檢查以下定義語(yǔ)句,常見的錯(cuò)誤一般都是表類型不是INNODB、相關(guān)聯(lián)的字段寫錯(cuò)了、缺少索引等等。
至此categories.category_id和articles.category_id、members.member_id和 articles.member_id已經(jīng)建立外鍵關(guān)系,只有 articles.category_id 的值存在與 categories.category_id 表中并且articles.member_id的值存在與members.member_id表中才會(huì)允許被插入或修改。例如:
- mysql> INSERT INTO articles (category_id, member_id, title) VALUES (6, 1, ‘foo’);
- 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`))
- mysql> INSERT INTO articles (category_id, member_id, title) VALUES (3, 3, ‘foo’);
- 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`))
可見上面兩條語(yǔ)句都會(huì)出現(xiàn)錯(cuò)誤,因?yàn)樵赾ategories表中并沒有category_id=6、members表中也沒有member_id=3的記錄,所以不能插入。而下面這條SQL語(yǔ)句就可以。
- mysql> INSERT INTO articles (category_id, member_id, title) VALUES (3, 2, ‘bar’);
- Query OK, 1 row affected (0.03 sec)
以上就是MySQL定義外鍵的方法介紹。
【編輯推薦】