MySQL从入门到跑路_03 (实例实操_外键约束)

MySQL从入门到跑路_03 (实例实操__外键约束)

为什么要用外键约束?

因为在一些数据库当中,会有很多重复数据。这些重复数据会使数据库的内存浪费掉。比如在一个学校的学生名单表中。一个班有100个学生,每一个学生后面多半都会有一个字段叫班级。就会有100多个重复的语句。如果把班级设置为一个外键,那么在插入班级的时候,使用一个简短的代码当做键。查询的时候通过键和表连接。就可以查询到班级信息。

使用外键的好处是:避免数据冗余空间浪费

父表:被引用的表

子表:引用的表

  • Demo

    1. 如果要创建的话,先创建父表,后创建子表

      • 重点在foreign key(cno) references demo_class(classno)

      • foreign key(字段名) references 父表(父表字段)

      • #先创建父表
        create table demo_class(
        	classno int primary key,
          classname varchar(255)
        );
        
        #再创建子表
        create table demo_student(
        	no int primary key auto_increment,
          name varchar(255),
          cno int,
          foreign key(cno) references demo_class(classno)
        );
        
    2. 创建好了之后,就可以插入数据

      • 插入数据的顺序也有要求

        • 先插入父表
        • 再插入子表
      • #往父表中添加数据
        insert into demo_class(classno,classname) values (100,'铜仁市第一中学');
        insert into demo_class(classno,classname) values (101,'铜仁市第二中学');
        insert into demo_class(classno,classname) values (102,'铜仁市第三中学');
        
        #往子表中插入数据
        insert into demo_student(name,cno) values ('张三',100);
        insert into demo_student(name,cno) values ('李四',100);
        insert into demo_student(name,cno) values ('王五',100);
        insert into demo_student(name,cno) values ('毛少',100);
        insert into demo_student(name,cno) values ('赵六',101);
        insert into demo_student(name,cno) values ('谢七',101);
        insert into demo_student(name,cno) values ('邱八',102);
        insert into demo_student(name,cno) values ('张三丰',102);
        
    3. 数据插入成功以后,可以先检查一下

      • select * from demo_class
      • MySQL从入门到跑路_03 (实例实操_外键约束)_第1张图片
      • select * from demo_student
      • MySQL从入门到跑路_03 (实例实操_外键约束)_第2张图片
    4. 可以看见表中的数据都是好的,如果要查询名字和班级,可以使用表连接

      • select ts.name,tc.classname from demo_student ts join demo_class tc on ts.cno=tc.classno;
      • MySQL从入门到跑路_03 (实例实操_外键约束)_第3张图片

你可能感兴趣的:(数据库,数据库,mysql,sql)