【MySQL】表的约束与基本查询

一. 表的约束

1. 空属性

表创建的时候默认属性为null。null 表示当用户插入数据时,该字段允许为空。反之,not null 就是不允许为空

案例:

当类型设置为 not null 时,我们插入数据不添加该项就会导致报错。

2. 默认值

当我们插入数据时,可以提前设置好默认值,当我们插入数据没有添加该项时,就会按照默认值自动填充。

案例:

当我们设置好默认值后,我们插入后就会自动填充其余数据。

3. 列描述

comment 列描述,没有特别含义,用于给列进行备注

案例:

4. zerofill

zerofill 用于填充数字类型前的空位,用0进行填充

案例:

这里的int(5)占着5位,数字18占2位,使用zerofill后会自动填充剩余3位为0

5. 主键

主键primary key是唯一的约束字段里的数据,主键标识的字段不能重复且不能为空。一张表内往往只能有一个主键。

案例:

我们给id添加主键后,第一次插入id为1的时候是成功的,第二次插入id为1的时候会告警重复。

当我们想要删除主键时,进行drop操作即可。

我们也可以用两个字段当做复合主键进行使用。

6. 自增长

auto_increment:当对应字段不给值时,会按照当前已有的最大值进行+1操作,获得一个新的值。它必须是一个 key 值,并且必须是整数,一张表中最多只能存在一个自增长。

案例:

例如我们插入a时 id 默认为1,插入 b 时系统会自动给 id 加上 1

7. 唯一键

唯一键的作用是保证该字段的内容唯一。它与主键的区别在于,主键是保证字段是唯一的但同时他也要起到标识的作用。而唯一键只是在业务逻辑上需要保证唯一,他不需要起到标识作用。

案例:

我们用 unique 标识唯一键,此时在id列上 id 就不能重复

8. 外键

外键 foreign key (字段名) references 主表(列) ,主要是连接主表和从表,将两个表建立联系

案例:


插入一个班级号为30的学生,因为没有这个班级,所以插入不成功

二. 基本查询

1. Create

(1)单行数据 + 全列插入

插入的数量和顺序要和定义表时一致。
案例:

(2)多行数据 + 指定列插入

插入两条记录的数量和顺序要和定义表时一致。

案例:

(3)插入否则更新

on duplicate key update,检查表中是否存在该主键的数据,若不存在直接插入,若存在则覆盖插入

案例:

如何判断表中数据是否冲突或者覆盖了

0 row affected:表中有数据冲突,但要插入的值和原先的值一致,所以0行改变

1 row affected:表中没有数据冲突,数据被插入

2 row affected:表中有数据冲突,并且数据已经更新

(4)替换

replace into 【表名】,若表冲突就进行覆盖,不冲突就直接插入

案例:

2. Retrieve

(1)SELECT 列

全列查询 select * from 【表名】

案例:

指定列查询 select 【列】,【列】from 【表】

案例:

查询不包含字段 select 【表达式】from 【表】

案例:

去重列元素 select distinct 【列】from【表】

案例:

(2)WHRER 条件

where 相当于我们学习语言中的判断条件,往往是优先执行的,先执行判断条件再执行函数体

例如这里我们筛选要求数学和英语成绩

案例:

like '【样式】%' 可以筛选有相似的列,如下面我们筛选了孙相关的列

案例:

(3)结果排序

asc 为升序,desc 为降序

我们通过下面案例可以观察,多个排序是按照第一个优先,在第一个一样的基础上才会进行第二项排序。当我们不加desc或者asc,默认情况下是采用asc(升序),所以我们使用时只用desc即可

案例:

order by 用于跟在select后面进行结果排序

(4)筛选分页结果

当我们查询大量数据时,我们可以采取分页的方法,避免一次性加载数据过多

案例:

limit 是要返回的行数,offset 是偏移量

3. Update

update 【表】set【列改变】where【列名】

用于更新表内数据

案例:

这里对孙权的数学成绩改为了60

4. Delete

Delete from【表名】where【列定位】

案例:

若我们想删除整张表无需添加where即可实现

5. 聚合函数

聚合函数类似,count sum avg max min,用于计算列数量,数据总和,平均最大最小值

案例:


相关推荐
无心水2 小时前
【神经风格迁移:性能】24、神经风格迁移全链路监控实战:基于Prometheus+Grafana的性能调优指南
数据库·人工智能·深度学习·机器学习·grafana·prometheus·神经风格迁移:性能
augisTrench2 小时前
LatentFlowx是一种非令牌的、状态驱动的推理运行时,旨在通过以下方式降低计算成本并提高可控性
数据库
橘子真甜~2 小时前
Reids命令原理与应用2 - Redis网络层与优化,pipeline,发布订阅与事务
数据库·redis·缓存·事务·发布订阅·lua脚本·acid特性
源代码•宸2 小时前
goframe框架签到系统项目开发(用户认证中间件、实现Refresh-token接口)
数据库·经验分享·后端·算法·中间件·跨域·refreshtoken
建群新人小猿2 小时前
陀螺匠 企业助手-经我审批
服务器·数据库·php
TDengine (老段)2 小时前
TDengine 小白入门指南
大数据·数据库·物联网·时序数据库·tdengine·涛思数据
码农阿豪2 小时前
从 Oracle 到电科金仓:一次性能优化视角下的深度迁移体验
数据库·oracle·性能优化·金仓数据库
txzz88882 小时前
Linux系统db_load命令
数据库·翻译·db_load命令
2401_876221342 小时前
数据库系统概论(第6版)模拟题1
数据库