当前位置: 首页 > news >正文

MySQL之基础篇

数据库操作

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的数量就会更新整个表

示例:

相关文章:

MySQL之基础篇

数据库操作 1.查看当前的数据库版本 select version(); 2.显示所有数据库 show databases; 3.创建数据库 create [if not exists] database 数据库名 character set 字符编码集 collate 排序规则&#xff1b; 我们这里提前说一下 被方括号括起来的代码 表示可写可不写 示例…...

13年408计算机考研-计算机网络

第一题&#xff1a; 解析&#xff1a;OSI体系结构 OSI参考模型&#xff0c;由下至上依次是&#xff1a;物理层-数据链路层-网络层-运输层-会话层-表示层-应用层。 A.对话管理显然属于会话层&#xff0c; B.数据格式转换&#xff0c;是表示层要解决的问题&#xff0c;很显然答案…...

camera2 + MediaRecorder 实现的分段循环录像功能

硬件设备Android系统 8.1&#xff1b; 硬件设备上开发过程中的问题记录&#xff1a; 问题1. 长时间录像后发现保存的录像文件始终只有4G。 原因及解决&#xff1a;Android 11之前的系统有对保存的文件大小有限制&#xff0c;所以只能修改成分段保存&#xff0c;即录像文件3.…...

LeetCode 每日一题 2024/9/23-2024/9/29

记录了初步解题思路 以及本地实现代码&#xff1b;并不一定为最优 也希望大家能一起探讨 一起进步 目录 9/23 2414. 最长的字母序连续子字符串的长度9/24 2207. 字符串中最多数目的子序列9/25 2306. 公司命名9/26 2535. 数组元素和与数字和的绝对差9/27 2516. 每种字符至少取 K…...

知识付费APP开发指南:基于在线教育系统源码的技术详解

本篇文章&#xff0c;我们将探讨基于在线教育系统源码的知识付费APP开发的技术细节&#xff0c;帮助开发者和企业快速入门。 一、选择合适的在线教育系统源码 选择合适的在线教育系统源码是开发的关键一步。市场上有许多开源和商业化的在线教育系统源码&#xff0c;开发者需要…...

物联网智能项目全面解析

目录 引言 一、物联网概述 1.1 什么是物联网 1.2 物联网的历史与发展 二、物联网智能项目分类 三、关键组件与技术 3.1 传感器和执行器 3.2 连接技术 3.3 数据处理与分析 3.4 用户界面 四、物联网智能项目案例分析 4.1 智能家居 4.2 智慧城市 4.3 工业物联网 4.4…...

【07】纯血鸿蒙HarmonyOS NEXT星河版开发0基础学习笔记-Swiper轮播组件与样式结构重用

序言&#xff1a; 本文详细讲解了关于我们在页面上经常看到的轮播图在鸿蒙开发中如何用Swiper实现&#xff0c;介绍了Swiper的基本用法与属性&#xff0c;及如何面对大段的重复代码进行封装和重用&#xff08;Extend、Styles、Builder&#xff09;&#xff0c;使代码更加简洁易…...

Springboot3保存日志到数据库

保存日志到数据库 请求日志几乎是所有大型企业级项目的必要的模块&#xff0c;请求日志对于我们来说后期在项目运行上线一段时间用于排除异常、请求分流处理、限制流量等。请求日志一般都会记录请求参数、请求地址、请求状态&#xff08;Status Code&#xff09;、SessionId、…...

叉车高位显示器无线摄影,安装更加便捷!

叉车叉货&#xff0c;基本功能&#xff0c;但货叉升降高度确不一定&#xff0c;普通的3米左右&#xff0c;高的十几米&#xff0c;特别是仓储车&#xff0c;仓库叉货空间小&#xff0c;环境昏暗&#xff0c;视线受阻严重&#xff0c;司机叉货升的那么高怎么准确无误的插到货呢&…...

模板的特化

模板的特化 1.概念2.函数模板特化3.类模板的特化3.1 全特化3.2 偏特化3.2.1 部分特化3.2.2 参数更进一步的限制 4.总结 1.概念 在原模板类的基础上&#xff0c;针对特殊类型所进行特殊化的实现方式 2.函数模板特化 步骤 1.必须要先有一个基础的函数模板 2.关键字 template后面接…...

PCIE总线架构

1 概述 PCIe总线(Peripheral Component Interconnect Express)是一种高速串行计算机扩展总线标准,它是基于PCI总线的一种升级版,现在已经被广泛应用于各种高性能的计算机和服务器系统中。 PCIe总线提供更高的数据传输速度和更先进的特性,它主要特点如下: 高带宽:提供比…...

Adobe PR与AE的区别与联系(附网盘地址)

从事视频后期制作的小伙伴&#xff0c;对于PR&#xff08;Premiere&#xff09;和AE&#xff08;After Effects&#xff09;应该不会陌生。随着短视频的兴起&#xff0c;就连我们普通用户&#xff0c;拍摄完视频&#xff0c;都会去糟取精的剪辑一下&#xff0c;而PR正是一款功能…...

【QT 5 调试软件+Linux下调用脚本shell-无法调度+目录拼写+无法找目录+sudo权限(2)+问题解决方式+后续补充】

【QT 5 调试软件Linux下调用脚本shell-无法调度目录拼写无法找目录sudo权限&#xff08;2&#xff09;问题解决方式后续补充】 1、前言2、问题综述&#xff1a;自研qt上位机无法调度脚本&#xff08;1&#xff09;可能原因1&#xff1a;无法找到目录情况说明&#xff1a;解决思…...

企业防泄密妙招有哪些?请记住这8招!超实用,学起来!

在古代&#xff0c;有云&#xff1a;“密者&#xff0c;德之高也&#xff1b;事以密成&#xff0c;语以泄败。” 这些谚语不仅是对忠诚守密的高度赞扬&#xff0c;更是对保密工作重要性的深刻阐述。 在现代企业中&#xff0c;数据泄露已成为不容忽视的严峻挑战。 如何有效防止…...

pytorch千问模型源码分析

# 规范化技术&#xff0c;旨在替代传统的 Layer Normalization&#xff08;LN&#xff09; # 核心思想是对输入张量的每个样本的每个特征进行规范化&#xff0c;使其均值为 0&#xff0c;方差为 1 class Qwen2RMSNorm(nn.Module): def __init__(self, hidden_size, eps1e-6…...

滚雪球学SpringCloud[1.3]:SpringCloud环境搭建

全文目录&#xff1a; 前言1.3.1 环境要求1. JDK2. Maven3. IDE4. 其他工具 1.3.2 初始化Spring Boot项目方法一&#xff1a;使用Spring Initializr方法二&#xff1a;使用IDE项目结构 1.3.3 引入Spring Cloud依赖1. 更新pom.xml2. 添加Spring Cloud Starter依赖3. 示例完整的p…...

9.28今日错题解析(软考)

目录 前言面向对象技术——UML软件工程——软件能力成熟度模型&#xff08;CMM&#xff09;程序设计语言——编译 前言 这是用来记录我备考软考设计师的错题的&#xff0c;今天知识点为UML、软件能力成熟度模型&#xff08;CMM&#xff09;和编译&#xff0c;大部分错题摘自希…...

【Vue】以RuoYi框架前端为例,ElementUI封装图片上传组件——将图片信息转成base64后提交到后端保存

RuoYi 框架本身对于图片上传功能&#xff0c;在ElementUI的 <el-upload> 组件的基础装封装了 /components/ImageUpload/index.vue 组件。本组件就是在 RuoYi 自定义的 <ImageUpload> 组件的基础上进行改造&#xff0c;将图片的信息在上传之前处理成 base64 格式&am…...

【Linux】驱动的基本架构和编译

驱动源码 /** Silicon Integrated Co., Ltd haptic sih688x haptic driver file** Copyright (c) 2021 kugua <daokuan.zhusi-in.com>** This program is free software; you can redistribute it and/or modify it* under the terms of the GNU General Public Licen…...

1013. 将数组分成和相等的三个部分 数组切分

1013. 将数组分成和相等的三个部分 已解答 简单 相关标签 相关企业 提示 给你一个整数数组 arr&#xff0c;只有可以将其划分为三个和相等的 非空 部分时才返回 true&#xff0c;否则返回 false。 形式上&#xff0c;如果可以找出索引 i 1 < j 且满足 (arr[0] arr[…...

Docker 离线安装指南

参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性&#xff0c;不同版本的Docker对内核版本有不同要求。例如&#xff0c;Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本&#xff0c;Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...

Android Wi-Fi 连接失败日志分析

1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分&#xff1a; 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析&#xff1a; CTR…...

设计模式和设计原则回顾

设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...

SkyWalking 10.2.0 SWCK 配置过程

SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外&#xff0c;K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案&#xff0c;全安装在K8S群集中。 具体可参…...

Java 语言特性(面试系列1)

一、面向对象编程 1. 封装&#xff08;Encapsulation&#xff09; 定义&#xff1a;将数据&#xff08;属性&#xff09;和操作数据的方法绑定在一起&#xff0c;通过访问控制符&#xff08;private、protected、public&#xff09;隐藏内部实现细节。示例&#xff1a; public …...

Spring Boot面试题精选汇总

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...

JDK 17 新特性

#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持&#xff0c;不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的&#xff…...

USB Over IP专用硬件的5个特点

USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中&#xff0c;从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备&#xff08;如专用硬件设备&#xff09;&#xff0c;从而消除了直接物理连接的需要。USB over IP的…...

无人机侦测与反制技术的进展与应用

国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机&#xff08;无人驾驶飞行器&#xff0c;UAV&#xff09;技术的快速发展&#xff0c;其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统&#xff0c;无人机的“黑飞”&…...

【JVM】Java虚拟机(二)——垃圾回收

目录 一、如何判断对象可以回收 &#xff08;一&#xff09;引用计数法 &#xff08;二&#xff09;可达性分析算法 二、垃圾回收算法 &#xff08;一&#xff09;标记清除 &#xff08;二&#xff09;标记整理 &#xff08;三&#xff09;复制 &#xff08;四&#xff…...