首先看下面这张表
Create table student
(sno int(10) unsigned not null,
sname varchar(20) not null,
sex enum('男','女') default null,
sage smallint unsigned,
sdept varchar(10) not null
Primary key (sno)
);
插入三条记录后:
SELECT * FROM students_id.student;
在这张已经建成的STUDENT表中,SNO为Primary Key, 类型为
int(10) unsigned not null
然后,创建下面这张表,其中SNO为外键,参照关系是SC,被参照是STUDENT
Create table SC(
cno char(4) not null,
sno smallint, //外键
grade smallint,
primary key(cno),
foreign key (sno) references students_id.student(Sno)
);
创建失败
原因是在SC这张表中,作为参照关系,SNO的数据类型没有保持和被参照的表STUDENT完全一致。
应改为如下形式:
Create table SC(
cno char(4) not null,
sno int(10) unsigned not null,
grade smallint,
primary key(cno),
foreign key (sno) references students_id.student(Sno)
);
此时创建成功。需要注意的是,在SQL中,参照关系可以为主键,但在MYSQL中,参照关系不能为主键。
总结:
1.外键不能为新建表的主键;
2.外键所参照的键必须为被参照表的主键;
3.参照表的值需要在所参考的表的那一个主键中已经存在的(即不能为空)
更多相关代码可以访问
我的GITHUB