欢迎光临散文网 会员登陆 & 注册

【D1n910】(13/42)学习【MySQL数据库】C++语言程序设计 - MySQL数据库的笔记

2023-04-03 07:30 作者:爱交作业的D1N910  | 我要投稿

正常操作,正常分析,大家好,我是D1N910,这是我观看【MySQL数据库】C++语言程序设计 - MySQL数据库从而整理的学习笔记。我会继续努力的。

本篇 D1n910】(13/42)学习【MySQL数据库】C++语言程序设计 - MySQL数据库的笔记

的主要内容是 MySQL数据库 的增删改查!

小知识点,desc 指令可以查看表结构,desc = description

description

n. 描述;说明;形容;描写(文字);类型

举个例子:

学习自

如果你没看过之前的专栏内容,那么强烈建议一定要先看看再继续往下看



Unit 6 DML 操作

DML 数据操纵语言(Data Manipulation Language, DML)

1.插入语句 insert

语法

insert into 表名 [(字段列表)] values (值列表);

其中字段列表带中括号就是可以不填写,默认则匹配全部字段。

一般场景

有自增长字段的场景


这里能够看到class_no不是按顺序的原因是因为我之前用 insert 语句的时候插入失败了几次,但是这也同样会占用自增长的编号的。所以自增长的编号只是唯一的,但不是说一定是连续的。

插入有使用默认值的场景

回顾课程表的字段信息

已添加的教师信息

自增长字段可以直接用null,默认值字段想用默认值得用 default;

如果想要在values中缺省默认值字段,可以在表后括号内指定填写的字段;


⚠️ 错误示例,违反了外键约束:插入了不存在的教师编号 007


⚠️ 错误示例,违反了唯一约束:插入了重复的教师编号 001;

教师编号 teacher_no 是我们之前设置了 unique 的字段.


批量插入多行数据


如果这边报错

ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`choose`.`student`, CONSTRAINT `students_class_fk` FOREIGN KEY (`class_no`) REFERENCES `classes` (`class_no`))

这是因为外键限制, classes 表的 class_no 字段和要添加的不符合

修改后就OK了


Insert...select语句

-- 在insert语句中使用select子句可以将源表的查询结果添加到目标表中

语法

如果目标表名和复制的表的字段一样,那么字段列表1就是可选的,用 * 表示全部

示例

* like 在之前学过是用来拷贝表结构而不包含表数据。

这个的作用主要是对原表进行备份


2.update语句 更新SQL数据 更新数据

语法

示例

创建表 score,包含如下字段:

添加测试数据

先创建一个 exam 表来作测试用


更改多个字段

执行结果如下


测试更新语句违反外键约束的场景

这里的原因是子表中已经有引用了 class_no 为 3 的外键了,那么改主表的 class_no 3 为 4就会报错。


1.3.删除语句

回顾原来exam表中的数据

使用 where 进行删除

可以看到 exam_score 小于 45 的 stu_no=5 的数据被删除了。


没有 where 进行删除

统统干掉惹 ψ(`∇´)ψ


进行违反外键约束的删除

可以看到删除失败了,原因是子表还用着 class_no=1 的数据捏 ╮(╯_╰)╭

1.4.truncate语句

truncate

vt.截断;截短,缩短,删节(尤指掐头或去尾)

adj.截短的;被删节的

--来自百度翻译

语法

> truncate table table_name;

功能

截断表,虽然不是增删改,功能上相当于没有where子句的delete

语句示例

>使用truncate语句删除表score中的数据

直接清理掉了 ヾ(・ε・`*)

>使用truncate语句删除表student中的数据

失败了 ヾ(・ε・`*)

> 使用truncate语句阶段数据后会使得自增字段恢复初始值,回忆之前设定的 exam的内容,stu_no是自增字段


Unit 7 基本查询语句

目录

  1. select语句

  2. 使用select子句指定字段列表

  3. 基本查询语句

  4. 使用distinct过滤结果集中重复数据

  5. 使用imit限定返回行数

1.select语句

select语句的语法格式如下

select 字段列表 from 数据源

[ where 条件表达式]

    [ group by 分组字段[ having 条件表达式]]

        [ order by 排序字段 [asc|desc]]


其中

  • 字段列表:指定要检索的字段,* 表示全部字段

  • 数据源:检索的表或视图

  • where子句:用于指定记录的过滤条件,是结果为真或者假的表达式

  • group by子句:用于对检索数据进行分组,

  • Having子句:依附于 group by 的。只有group by语句中才能用。对分组后的数据进行筛选,筛选后选择符合条件的组

  • order by子句:用于对结果集进行排序 asc/decs 升序/降序

2.使用select子句指定字段列表

字段列表的指定方式

示例

    使用表达式

前面的我们都清楚,使用函数的意思就是select 能够让 mysql 执行函数然后返回结果。

其中version、now是mysql 内置的函数

    命名别名

        很明显,上面直接用函数名或者1+1等作为表头不是很好看,那么可以另起一个名称,函数后接 as+别名,或者直接省略 as 然后加别名即可。

        字段或表达式 [as] 别名

        select version() as 版本号,now() 服务器时间


order by子句:用于对结果集进行排序 asc/decs 升序/降序

默认是 asc,升序 ascend

如果要降序,必须写 desc,下降


3.基本查询语句


下面可以看出 select 后面跟着的字段内容就是在努力地为输出表格而服务的。

下面再看看函数方面的应用,下面是我们前面定义的 exam 表。


插入一个数据


上面是三列,通过函数能够得到 exam_score、regular_score 得到的一个成绩


同样我们也可以用别名使得得到的表头更好看。


4.使用distinct过滤结果集中重复数据

distinct

adj.不同的;明显的;清晰的;清楚的;明白的;有区别的;不同种类的;确定无疑的;确切的

-- 来自百度翻译

正常查询完整的表时,因为有 primary key 主键对应的列,那么就不会有重复的行,

但是如果只是部分查询表,只是部分列的话,那么极有可能就有重复的行,

可利用distinct过滤结果集中重复数据。只用在select和字段列表之间加 distinct 这个单词就行。

示例

    单列

    多列

其中

tables是系统数据库information_schema中的一张表,用来保存数据库中表和视图的信息。

能够看到 TABLES

这里关注 tables 的三个字段:

查询数据

这里我们的一共有338行数据

可以看出表名基本上不会重复,但是数据库名和类型就重复很多了。如果我们查询时候不包含表名,会发现包含大量的重复数据。

得到的很多行。

使用 distinct 后,就只有五行了。


5.使用imit限定返回行数

limit 不在SQL中要求,但是不同产品都会有这样的需求,所以每个产品使用的方式可能都不同,这个limit只是 MySQL 的用法。这个操作有一个统一的名称叫分页


语法

    

其中:

start: 表示从第一行记录开始检索,缺省值为0,表示第一行

length: 表示要检索的行数

示例

列出information_schema.tables表中的前10行记录的table_schema, table_name

列出information_schema.tables表中的第七页(每页10行)。这里为什么第七页是从60行开始?

原因 0行~9行 是第一页,即第一页的第一行是整张表的第0行(下标从0开始)。

第n页的第一行就是 (n-1)*10=60.

那么第七页的第一行就是 (7-1)*10=60.

同样成功。

注意,各人表不同,也许你处输出结果和我不一样,无碍。

未完待续

学习进度(13/42)

恭喜你掌握 SQL 的增删改查!

【D1n910】(13/42)学习【MySQL数据库】C++语言程序设计 - MySQL数据库的笔记的评论 (共 条)

分享到微博请遵守国家法律