MySQL表的增删改查(进阶)上

1. 数据库约束

下表为在数据库中表的结构设计时的一些字段约束类型
在这里插入图片描述
举例:

  • 创建班级表classes,id为主键
drop table if exists classes;
create table classes(
id int primary key auto_increment,
name varchar(20),
`desc` varchar(20)
);

desc为关键字,所以我们在以关键字为变量名时需要用``括起来。
auto_increment相当于Java中的i++这一功能。
所以主键约束 primary key一般与auto_increment搭配使用,在插入数据时如果没有插入id的信息,则他会在上一行id的基础上自动加1,来保证在插入数据时我们的id是唯一的。

  • 创建学生表student,一个学生对应一个班级,一个班级对应多个学生。使用id为主键,classes_id为外键,关联班级表id。
drop table if exists student;
create table student(
id int primary key auto_increment,
sn int unique,
name varchar(20) default 'unknown',
qq_mail varchar(20),
classes_id int,
foreign key (classes_id) references classes(id)
);

下图为上面代码的实操
在这里插入图片描述

2. 表的设计

表的三大范式:
2.1 一对一
在这里插入图片描述
现在我们有两张表,一张表存人的基本信息另一张存身份证的信息,通过一个人只能查到一个对应的身份证信息,一个身份证只能查到一个人。
(不要说什么世界上有那么多的人叫张三,但是他们的身份证号一样吗?我们这里只是举一个例子)

2. 2一对多
在这里插入图片描述
一对多同理,两张表,上面我们已经创建了一个班级表和一个学生表,那么学生和班级的关系是什么呢?
答:一个学生他只对应一个班级,但是一个班级他可以对应n个学生。

2.3 多对多
在这里插入图片描述

多对多比较特殊,但是确是重点。思考一下,学生和课程有直接关系吗?没有(当然从实际中来说不是说完全没有,是因为我们两张表的主键设计迫使他们不能直接产生关系,这里你就当他们没有关系),所以我们需要一个中间表来使他们产生关系,就是学生成绩表,一个学生他的他的成绩表里可以有m个课程的成绩,一个课程可以他可以出现在n个考试成绩表里,从而间接的使学生和课程产生关系。

以上就是我们在MySQL中的三种表的关系。

这里我们在插入一张学生课程表和学生成绩表,方便我们后续对多表进行操作。

-- 创建学生课程表
drop table if exists course;
create table course(
id int primary key auto_increment,
name varchar(20)
);
-- 创建学生课程中间表,考试成绩表
drop table if exists score;
create table score(
id int primary key auto_increment,
score decimal(3,1),
student_id int,
course_id int,
foreign key (student_id) references student(id),
foreign key (course_id) references course(id)
);

3. 新增

上篇文章中讲述的新增是需要我们手动输入数据,进阶版的新增是将我们查到的数据放入另一张表中。
先随便创建一张表用来测试
案例:创建一张用户表,设计有name姓名、email邮箱、sex性别、mobile手机号字段。需要把已有的学生数据复制进来,可以复制的字段为name、qq_mail。

-- 创建用户表
drop table if exists test_user;
create table test_user(
id int primary key auto_increment,
name varchar(20) comment '姓名',
math int comment '数学成绩',
english int comment '英语成绩',
mobile varchar(20) comment '手机号'
);

将上章中创建的exam_result表中的所有数据复制到用户表
insert into test_user(name,math,english) select name,math,english from exam_result;
在这里插入图片描述
另外说一下,comment的备注是可以被查到的(可以防止你忘记某个字段索要表达的意思),利用
show full columns from test_user;
在这里插入图片描述
进阶版的查询后续补上,实在写不动了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值