MySQL之基础篇

news2024/12/27 15:08:43

数据库操作

1.查看当前的数据库版本

select version();

2.显示所有数据库

show databases;

 

3.创建数据库

create [if not exists] database 数据库名 

        character set 字符编码集

        collate 排序规则;

我们这里提前说一下  被方括号括起来的代码 表示可写可不写

示例:

当然我们可以将第二、第三行也省略不写 如果不给予特定的字符编码集和排序规则

示例如下:

4.选择数据库

use 数据库名;

当想对某一数据库的表进行操作时 我们要先选择数据库 进而取操作表

5.查看当前选择了哪个数据库

select database();

示例:

6.删除数据库

drop [if exists] database 数据库名;  //这是非常危险的操作

7.查看警告信息

show warnings;

8.退出

quit/exit; 

表操作

在进行表操作之前 需要选择某一数据库

1.查看当前数据库中有哪些表

show tables;

示例如下:

 

2.创建一张新表

create table 表名(

    字段名 数据类型,

    字段名 数据类型,

    ....

);

示例如下:

3.查看表结构

desc 表名;

 示例如下:

4.删除表

drop 表名;  //非常危险的操作

数据库约束

约束类型

·NOT NULL:指定某列不能存储NULL值

·UNIQUE(唯一约束):保证某列的每行必须有唯一的值(如学生的学号)

·DEFAULT(默认值约束):当没有给列赋值时的默认值

·PRIMARY KEY(主键约束):NOT NULL和UNIQUE的结合  确保某列(或多个列的结合)有唯一标识 有助于更容易更快速地找到表中的一个特定的记录

·FOREIGN KEY(外键约束):保证一个表中的数据匹配另一个表中的值 的参照完整性

·CHECK:保证列中的值符合指定的条件  对于MySQL数据库 对于CHECK子句进行

分析 但忽略CHECK子句

示例:

PRI--主键约束  主键是NOT NULL和UNIQUE的结合

在表中的NULL列中显示的NO则表示NOT NULL

UNI--唯一约束

我们这里将学生id设置为主键 我们可以看到在主键后加了auto_increment

这里解释一下:

对于整数类型的主键 常搭配自增长auto_increment来使用  如果插入的该字段不给值时 使用表中最大的值+1

关于外键 foreign key

外键的主要目的是用来维护两张表或多张表之间的数据一致性和完整性

外键通过引用另一个表(父表)的主键来实现这一目的 从而确保在一个表中存储的外部键值(在当前表中设置 当前表为子表)在另一个表中是有效的(即 当前表的外部键值存在于父表的主键中)

示例:

假设我们有一个简单的在线书店数据库 其中包含两个表:author(作者表)和books(书籍表)

author表存储了作者的信息 而books表存储了书籍的信息 包括每本书是由哪位作者编写的

表结构定义

author表

在这个表中 author_id是主键 用于唯一标识每个作者

Primary key的效果等于not null+unique

books表

在这个books表中 book_id是主键 而author_id是外键

外键约束确保了books表中的author_id(子表)只能包含authors表(父表)中已经存在的author_id值

现在我们向authors表和books表中插入一些数据

查询books和authors表中的数据

我们在上述books表中设置了外键author_id  确保books表中的author_id只能包含authors表中已经存在author_id值

我们在authors表中看到author_id的值只有1和2  由于外键约束 如果我们向子表books中插入author_id不等于1或2的数据 则不会成功

主要作用

1.数据完整性:

·引用完整性:外键确保了一个表中(当前表为子表)的外键列只能包含另一个表(通常称为父表或主表)主键列中已经存在的值 这防止了无效或孤立的记录被插入到子表中 从而维护了数据的引用完整性

·约束完整性:通过外键约束 可以自动维护数据的完整性和一致性 当父表中的记录被删除或更新时 外键约束可以确保子表中的相关记录得到适当的处理(如级联删除或更新)

2.数据关系表达:

·外键是表达两个表之间关系的一种方式 通过外键 可以清晰地表示出哪些表是相关的 以及它们是如何关联的 这有助于数据库设计者和其他用户理解数据模型和数据结构

3.查询优化

·虽然外键本身并不直接优化查询性能 但它们通过维护数据之间的关系 使得数据库查询优化器能够更有效地执行连接(JOIN)操作 例如 在查询涉及多个表时 数据库可以利用外键关系来优化查询计划 减少不必要的表扫描和连接操作

4.级联操作

·外键约束支持级联操作 如级联删除(CASCADE DELETE)和级联更新(CASCADE UPDATE) 这意味着当父表中的记录被删除或更新时 子表中相关的记录也会自动被删除或更新 这简化了数据库维护的复杂性 并确保了数据的一致性

5.数据迁移和同步

·在数据库迁移或数据同步的场景中 外键可以确保数据在不同数据库或不同表之间保持一致性和完整性

然而 使用外键也需要注意一些潜在的问题和限制 例如:

·性能影响:虽然外键可以提高数据完整性和一致性 但它们可能会对数据库性能产生一定的影响 因为数据库需要额外的工作来维护外键约束 并在插入、更新和删除记录时检查这些约束

·设计复杂性:外键增加了数据库设计的复杂性 在设计表结构时 需要仔细考虑哪些表应该包含外键 以及这些外键应该如何设置

·灵活性限制:外键约束可能会限制数据库操作的灵活性 例如 如果子表中有依赖于父表的外键记录 那么删除或更新父表中的相关记录可能会收到限制

当然外键不仅仅只能用于两张表或多张表中 一张表也可以使用外键 这叫做自引用外键

自引用外键

自引用外键:虽然这种情况不常见 但在某些特殊场景下 一张表可能会通过外键引用自己的主键 这通常用于表示表内的层次结构或树状结构或父子关系  如组织架构、分类目录、评论的回复链等

例如 一个员工表可能包含员工ID和经理ID  其中经理ID是该表的一个外键 指向同一个表中的另一个员工ID(即该员工的经理)

示例:

manager_id是一个外键,它引用了同一个表(employees)中的employee_id字段。这个字段用于表示每个员工的直接上级。如果一个员工没有上级(比如CEO),那么这个字段可以为NULL

其实也就是 外键manager_id的值 存在于 父表employees中的employee_id中

现在我们想查询出每个员工的老板是谁 该如何操作呢?

操作如下:

在这个查询中:

·e是employees表的别名 代表员工

·m也是employees表的别名 但在这里它代表员工的上级

·我们通过left join将员工(e)与上级(m)连接起来 连接条件是 e.manager_id=m.employee_id

即员工的manager_id等于上级的id

在这里我们说明一下 left join是左连接 即员工全部出现

但是不一定所有员工都有上级 而他们依然会出现在查询结果中 只是manager_name会是NULL

查询结果选择了员工id和name以及它们上级的name(如果存在的话)

CRUD 增删改查

1.新增--插入

insert into 表名 ( [列名,列名....] )  values(值,值...);

指定了多少列名 就需要指定多少值  值与列名一一对应 

不指定列名 值的顺序与个数和表中所有列一一对应

示例:

我们先事先说一下 左图是全列查询操作 在下面查询操作有讲哦 大家可以先看一下

2.查询操作

a.全列查询

select  *  from 表名;  //使用 *  则会把表中所有的数据都查出来

 我们在上述的示例中就使用了全列查询 

b.指定列查询

select  列名...  from 表名;

 

c.列为表达式的查询

select 列名/表达式 from 表名;

d.别名查询

select 列名/表达式 [as] 别名 from 表名;  //别名中如果包含空格 需要用单引号引出来

e.去重查询

select distinct 列名...  from 表名;  //如果列名有多个 去重时只有所有的列都相等 才会判定为重复 从而进行去重

f.排序

select 列名...  from 表名 order by 列名 asc/desc;  //asc:升序  desc:降序

为了解决上述图中的问题 我们接下来插入一条chinese成绩为负数的数据 虽然是不合理的 但为了知道在排序中  NULL是不是在所有数中是最小的  这是值得的

g.条件查询

select 列名... from 表名 where 列名|表达式 比较/逻辑运算符 order by 列名 asc|desc;

h.区间查询

select 列名... from 表名 where 列名 between 开始条件 and 结束条件; 

//等价于 开始条件<=列的值<=结束条件

i.模糊查询 

select * from 表名 where 列名 like '%值_';  //%:匹配任意个字符  _:匹配单个字符

我们举例说明:

j.分页查询

select * from 表名 where 条件 order by 列名 asc|desc limit num;//查询前num条记录

//从第start条开始  向后查询num条记录

select * from 表名 where 条件 order by 列名 asc|desc limit start,num;

select * from 表名 where 条件 order by 列名 asc|desc limit num offset start;

3.更新

update 表名 set 列名=值 where 条件 order by 子句 limit num; //将满足条件的 值修改

示例:

4.删除

delete from 表名 where 条件 order by 子句 limit num; 

//如果不指定条件和limit的数量就会更新整个表

示例:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2172601.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

1panel申请https/ssl证书自动续期

参考教程 https://hin.cool/posts/sslfor1panel.html #Acme 账户 #1panel.腾讯云dns账号 这里有一步不需要参考,腾讯云dns账号,就是子帐号授权 直接控制台搜索 访问管理 创建用户 授权搜索dns,选择第一个 点击用户名,去掉AdministratorAccess权限 5.点击api密钥生成即可…

python绘制多个wav文件的基频曲线图

任务描述 需要在一个图中绘制多个wav文件的基频图&#xff0c;具体一点&#xff0c;绘制三种不正常的基频曲线&#xff0c;和一种正常的基频曲线进行对比&#xff0c;并且将正常的基频曲线的范围画出。 代码 import pyworld as pw import librosa import numpy as npdef extr…

微调大模型(Finetuning Large Language Models)—Data_preparation(四)

1. 数据的质量 数据准备的步骤&#xff1a; 什么是tokenizing&#xff1f; 其实就是将文本数据转换为代表文本的数字&#xff0c;一般是基于字符出现的频率。需要注意的&#xff0c;编码和解码的tokenizer需保持一致&#xff0c;一般训练的模型有自己专属匹配的tokenizer。 …

实习结帖(flask加上AIGC实现设计符合OpenAPI要求的OpenAPI Schema,让AIGC运行时可以调用api,协助公司门后迁移新后端等)

终于&#xff0c;笔者的实习生活也要告一段落了&#xff0c;最后的几天都在忙着和公司做AIGC的项目&#xff0c;在搞api的设计以及公司门户网站的迁移。 牛马搬运工&#xff08;牛马了3天&#xff09; 先说这个门户网站的迁移&#xff0c;我原本以为只是换个后端&#xff08;若…

新版本Android Studio如何新建Java code工程

新版本Android Studio主推Kotlin&#xff0c;很多同学以为无法新建Java工程了&#xff0c;其实是可以的&#xff0c;如果要新建Java代码的Android工程&#xff0c;在New Project的时候需要选择Empty Views Activity&#xff0c;如图所示&#xff0c;gradle也建议选为build.grad…

RP2040 C SDK GPIO和IRQ 唤醒功能使用

RP2040 C SDK GPIO和中断功能使用 SIO介绍 手册27页&#xff1a; The Single-cycle IO block (SIO) contains several peripherals that require low-latency, deterministic access from the processors. It is accessed via each processor’s IOPORT: this is an auxiliary…

MyBatis——Plus

MyBatis——Plus怎么知道他是访问哪张表

48 旋转图像

解题思路&#xff1a; \qquad 这道题同样需要用模拟解决&#xff0c;原地算法要求空间复杂度尽量小&#xff0c;最好为 O ( 1 ) O(1) O(1)。模拟的关键是找到旋转的内在规律&#xff0c;即旋转前后的位置坐标的变化规律。 \qquad 正方形矩阵类似洋葱&#xff0c;可以由不同大小…

计算机毕业设计 在线问诊系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

又一条地铁无人线开通!霞智科技智能清洁机器人正式“上岗”

2024年9月26日12时&#xff0c;又一条无人线开通运营&#xff0c;这是陕西省首条全自动无人驾驶地铁线路。该线路作为北跨战略的先行工程&#xff0c;是连接主城区与渭北地区的轨道交通快线&#xff0c;对优化城市总体空间布局、推动区域融合发展、促进沿线产业升级具有十分重要…

电脑上数据丢了怎么找回来 Win系统误删文件如何恢复

无论是在工作中&#xff0c;还是生活中&#xff0c;电脑都是不可缺少的重要工具&#xff0c;尤其是在工作中&#xff0c;电脑不仅可以高效的完成工作&#xff0c;还可以存储工作中的重要资料。不过在使用电脑的时候&#xff0c;也会遇到数据丢失的情况。针对这一问题&#xff0…

渗透测试--文件上传常用绕过方式

文件上传常用绕过方式 1.前端代码&#xff0c;限制只允许上传图片。修改png为php即可绕过前端校验。 2.后端校验Content-Type 校验文件格式 前端修改&#xff0c;抓取上传数据包&#xff0c;并且修改 Content-Type 3.服务端检测&#xff08;目录路径检测&#xff09; 对目…

在Java中使用GeoTools解析POI数据并存储到PostGIS实战

目录 前言 一、POI数据相关介绍 1、原始数据说明 2、空间数据库表设计 二、POI数据存储的设计与实现 1、对应的数据模型对象的设计 2、属性表数据和空间信息的读取 3、实际运行结果 三、总结 前言 POI点&#xff0c;全称为Point of Interest&#xff08;兴趣点&#xf…

大数据技术:Hadoop、Spark与Flink的框架演进

大数据技术&#xff0c;特别是Hadoop、Spark与Flink的框架演进&#xff0c;是过去二十年中信息技术领域最引人注目的发展之一。这些技术不仅改变了数据处理的方式&#xff0c;而且还推动了对数据驱动决策和智能化的需求。在大数据处理领域&#xff0c;选择合适的大数据平台是确…

git 清除二进制文件的 changes 状态

问题&#xff1a;某个分支上修改了二进制文件&#xff0c;导致 changes 一直存在&#xff0c;切换到主分支也仍然存在&#xff0c;点击 Discard 也没用 使用 git reset --hard 还原到初始状态&#xff0c;也不行&#xff0c;不过输出结果会给出错误信息 Encountered 7 file(s) …

raise Exception(“IPAdapter model not found.“)

IPAdapter模型文件太多了&#xff0c;而节点IPAdapter Unified Loader是通过函数&#xff08;get_ipadapter_file与get_clipvision_file&#xff09;预设来加载模型文件&#xff0c;当发生错误“IPAdapter model not found.“时并不指明模型文件名&#xff0c;导致想要有针对性…

C语言 | Leetcode C语言题解之第438题找到字符串中所有字母异位词

题目&#xff1a; 题解&#xff1a; /*** Note: The returned array must be malloced, assume caller calls free().*/ /* *int strCmpn&#xff1a;比较滑动窗口和字符串的相同值 char * s&#xff1a;字符串s&#xff0c;滑动窗口的位置 char * p&#xff1a;字符串p&#…

【Python】Flask-Admin:构建强大、灵活的后台管理界面

在 Web 应用开发中&#xff0c;构建一个直观且功能丰富的后台管理系统对于处理数据和维护应用至关重要。虽然构建一个完全自定义的管理后台界面非常耗时&#xff0c;但 Flask-Admin 提供了一个简洁、灵活的解决方案&#xff0c;可以让开发者快速集成一个功能齐全的后台管理系统…

【移植】轻量系统STM32F407芯片移植案例

往期知识点记录&#xff1a; 鸿蒙&#xff08;HarmonyOS&#xff09;应用层开发&#xff08;北向&#xff09;知识点汇总 鸿蒙&#xff08;OpenHarmony&#xff09;南向开发保姆级知识点汇总~ 持续更新中…… 介绍基于 STM32F407IGT6 芯片在拓维信息 Niobe407 开发板上移植 Op…

Linux操作系统中MongoDB

1、什么是MongoDB 1、非关系型数据库 NoSQL&#xff0c;泛指非关系型的数据库。随着互联网web2.0网站的兴起&#xff0c;传统的关系数据库在处理web2.0网站&#xff0c;特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心&#xff0c;出现了很多难以克服的问…