黑马程序员技术交流社区
标题:
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