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

博客围绕MySQL外键约束展开,指出数据库中存在重复数据会造成内存浪费,使用外键可避免数据冗余和空间浪费。介绍了父表和子表的概念,创建表时要先父表后子表,插入数据时也需先父表后子表,还提及可通过表连接查询数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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
      • image-20201118014026157
      • select * from demo_student
      • image-20201118014110732
    4. 可以看见表中的数据都是好的,如果要查询名字和班级,可以使用表连接

      • select ts.name,tc.classname from demo_student ts join demo_class tc on ts.cno=tc.classno;
      • image-20201118014340863
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值