黑马程序员技术交流社区

标题: MySQL外键知识总结 [打印本页]

作者: IT之家    时间: 2019-4-4 15:25
标题: MySQL外键知识总结
MySQL外键作为很多刚学数据库的小伙伴可能感觉有点复杂。确实有点长,但是多敲几遍还是能记住。至于以后能记不记得住 就很难说了。所以养成写帖子也是一种好习惯呢。好了废话不多说,我们直接上图。
------------------------------------------------------------------------------------------------
1.创建数据库

create database itcast character set utf8;
后面的可以保证我们一会儿输入中文不会乱码!
-------------------------------------------------------------------------------------------------
2.创建表1  (tour_category)
create table tour_category (id int auto_increment primary key,country varchar(20) not null);
我们查看一下描述:
desc tour_category;
结果如下:
+---------+-------------+------+-----+---------+----------------+
| Field   | Type        | Null | Key | Default | Extra          |
+---------+-------------+------+-----+---------+----------------+
| id      | int(11)     | NO   | PRI | NULL    | auto_increment |
| country | varchar(20) | NO   |     | NULL    |                |
+---------+-------------+------+-----+---------+----------------+
ok,接下来我们创建表2(tour_line)

create table tour_line(id int auto_increment primary key,name varchar(mysql> create table tour_line(id int auto_increment primary key,name varchar(50) not null);

结果如下:
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| id    | int(11)     | NO   | PRI | NULL    | auto_increment |
| name  | varchar(50) | NO   |     | NULL    |                |
+-------+-------------+------+-----+---------+----------------+

ok 两张表都已经创建好了 接下来我们 可以创建外键 让两张表 关联起来,但是 我们在tour_line 中还差一个外键列 所以 我们 在给 tour_line 添加一列

alter table tour_line add cate_id int;

我们在刷新一下表可以看到:
+---------+-------------+------+-----+---------+----------------+
| Field   | Type        | Null | Key | Default | Extra          |
+---------+-------------+------+-----+---------+----------------+
| id      | int(11)     | NO   | PRI | NULL    | auto_increment |
| name    | varchar(50) | NO   |     | NULL    |                |
| cate_id | int(11)     | YES  |     | NULL    |                |
+---------+-------------+------+-----+---------+----------------+

【重点操作!!创建外键】
alter table tour_line add constraint fk_id foreign key (cate_id) references tour_category(c_id);
详细解释:fk_id  其实就是一个 外键的名字 随便取都行(如果你不需要删除的话)
                      cate_id 就是我们后面添加的那一列
                      tour_category(c_id)就是 一对多关系中的 【多方】
ok 我们外键 已经创建完成,但是我怎么知道成功没有呢?
我们 desc tour_line 看到这样的结果
+---------+-------------+------+-----+---------+----------------+
| Field   | Type        | Null | Key | Default | Extra          |
+---------+-------------+------+-----+---------+----------------+
| l_id    | int(11)     | NO   | PRI | NULL    | auto_increment |
| l_name  | varchar(30) | NO   |     | NULL    |                |
| cate_id | int(11)     | YES  | MUL | NULL    |                |
+---------+-------------+------+-----+---------+----------------+
仔细观察就会发现 在key 列下面  cate_id  会多出来一个 MUL
如果你以为这个是外键的意思就理解错了,其实这个是告诉你这里是可以允许 重复值的
Tips:MySQL 中 key的显示 是有优先级 PRI-> UNI-> MUL  
OK ,下周四 在和大家分享。一起进步!Fighting :)






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2