外键约束涉及到的相关术语:

    • 外键约束:一种约束(foreign key)
    • 外键字段:该字段上添加外键约束
    • 外键值:外键字段当中的每一个值

    子表和父表之间的顺序

    删除表的顺序

    • 先删子,再删父

    创建表的顺序

    • 先创建父,再创建子

    删除数据的顺序

    • 先删子,再删父

    插入数据的顺序

    • 先插入父,再插入子

    思考:子表中的外键引用的父表中的某个字段,被引用的这个字段必须是主键吗?

    不一定是主键,但至少具有unique约束

    设计一张数据库表,来描述”班级和学生”信息

    1. drop table if exists t_student;
    2. drop table if exists t_class;
    3. #请设计一张数据库表,来描述"班级和学生"的信息
    4. create table t_class(
    5. classno int primary key,
    6. classname varchar(255)
    7. );
    8. create table t_student(
    9. no int primary key auto_increment,
    10. name varchar(255),
    11. cno int,
    12. foreign key(cno) references t_class(classno) #外键约束
    13. );
    14. insert into t_class(classno,classname) values (110,'麻省理工软件与信息工程学院1班');
    15. insert into t_class(classno,classname) values (111,'麻省理工软件与信息工程学院2班');
    16. insert into t_student(name,cno) values ('Jack',110);
    17. insert into t_student(name,cno) values ('Marry',110);
    18. insert into t_student(name,cno) values ('Lucy',110);
    19. insert into t_student(name,cno) values ('Cedric',110);
    20. insert into t_student(name,cno) values ('zhangsan',110);
    21. insert into t_student(name,cno) values ('lisi',111);
    22. insert into t_student(name,cno) values ('wangwu',111);
    23. insert into t_student(name,cno) values ('zhaoliu',111);
    24. insert into t_student(name,cno) values ('Smith',111);
    25. select * from t_class;
    26. select * from t_student;
    27. #外键字段可以为null
    28. insert into t_student(name) values ('qiqi');