MySQL增删改查(进阶版)

数据库的约束

数据库的约束就是数据库在使用的时候,对于里面的数据能够提出要求和限制。约束类型有:NOT NULL、UNIQUE、DEFAULT、PRIMARY KEY、FOREIGN KEY、CHECK(了解即可)。

NOT NULL 非空约束

NOT NULL 就是某列不能存储NULL值。
代码如下:

create table student(id int,name varchar(20) not null);

运行结果如下:
name不能为空

UNIQUE 唯一约束

UNIQUE 约束就是保证某列的每行必须有唯一的值。
代码如下:

create table student(id int unique,name varchar(20));

运行结果如下:
unique 不能插入重复的值
代码如下:

insert into student values(1,null),(2,'六六');

运行结果如下:
插入两条记录

DEFAULT 默认值约束

DEFAULT 就是在没有给列赋值的时候规定一个默认值。
代码如下:

create table student(id int,name varchar(20) default '无名氏');

运行结果如下:
插入一条记录

PRIMARY KEY 主键约束

NOT NULL 和 UNIQUE 的结合,确保每列有唯一标识。 创建表的时候,大多数都需要指定主键。对于一个表来说,只能有一个列被设置为主键。 设为主键之后,要满足NOT NULL 和 UNIQUE 的条件。
代码如下:

create table student(id int primary key,name varchar(20));

运行结果如下:
primary key

主键自增

主键典型的用法就是直接使用 1,2,3,4 整数递增的方式来表示,在设置好自增主键之后,此时插入记录,就可以不指定自增主键的值了(直接使用 null),交给 MySQL 自行分配。每次新增一个新的记录,都会产生一个自增的 id。
代码如下:

create table student(id int primary key auto_increment,name varchar(20));

运行结果如下:
自增

  • 上图插入了(1,null),(null,‘六六’),(5,‘小五’),(null,‘七七’) 四条记录,最后一条记录的id值是根据之前id的最大值自增的
  • 重新插入(1,null),(8,‘六六’),(5,‘小五’),(null,‘七七’)四条记录
    运行结果如下:
    自增

FOREIGN KEY 外键约束

FOREIGN KEY 是描述两个表之间的关联关系,表1 中的数据可以匹配到 表2 中的值。
foreign key (字段名) references 主表(列)
建立学生表(学生id,名字,班级id)
建立班级表(班级id)
班级表
学生表

数据库设计

设计数据库的时候,设计表的时候,有两个步骤:
1.找实体
2.找实体之间的关系

一对一关系

一对一
以人和身份证的关系为例:一个人对应一个身份证,一个身份证表示一个人。

数据库当中表示一对一的关联关系

方法:两张表的主键,建立外键约束。

一对多关系

一对多
以班级为例。一个班级包含多个学生,一个学生只在一个班级中。

数据库当中表示一对多的关联关系

方法:外键添加在多的一方,关联一的主键。

多对多的关系

多对多
以学生选修课程为例。一个学生可以选修多门课程,一门课程也能被多个同学选修。m 个学生,可以选 n 门课。

数据库当中表示多对多的关联关系

方法:使用一个关联表,来表示两个实体之间的关系,关联两张表的主键。

将一个表的数据插入到另外一个表

先创建一个aa表,并且插入数据:

create table aa(id int,grade int);
insert into aa values(1,90),(2,88);

运行结果如下:
显示aa表
再创建一个bb表,把aa表数据插入bb表

create table bb(id int,grade int);
insert into bb select * from aa;

运行结果如下:
显示bb表

常见的聚合函数

count

count 就是计算行的值,不算 null,这里查询的是有多少行。

create table student(id int primary key,name varchar(20),math int,english int);
insert into student values(1,'一一',80,95),(2,'小二',90,88),(3,'小三',89,69);

显示学生表信息
代码如下:

select count(*) from student;

运行结果如下:
查询有几条记录
插入一条id有值,其他数据为空的记录
代码如下:

insert into student values(4,null,null,null);

运行结果如下:
显示学生表
插入一条记录之后count

sum

把这一列的若干行相加 也不算 null 只能针对数字进行运算,不是数字没有意义。这里统计数学成绩的总和,代码如下:

select sum(math) from student;

运行结果如下:
数学成绩的总和

聚合函数搭配条件

聚合函数是可以搭配 where 来使用的。就是先执行筛选,后执行求和:

group by

group by 就是先分组,然后在针对每个组来使用聚合函数。先创建一个表,并且插入数据:

create table game(id int,name varchar(20),cosplay varchar(20),money int);
insert into game values(1,'小一','厨师',4500),(2,'小二','服务员',2500),(3,'小三','老板',6000),(4,'小四','服务员',
3500),(5,'小五','厨师',5000),(6,'小六','服务员',2800);

显示game

select cosplay,avg(money) from game group by cosplay;

按照角色分类

group by 搭配 having

例如:求以角色分组平均工资>5000的记录。
代码如下:

select cosplay,avg(money) from game group by cosplay having avg(money>5000);

运行结果如下:
按照角色分类,平均工资>5000的记录

  • 6
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值