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

示例:

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

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

相关文章

Linux 安装redis主从模式+哨兵模式3台节点

下载 https://download.redis.io/releases/ 解压 tar -zxvf redis-7.2.4.tar.gz -C /opt chmod 777 -R /opt/redis-7.2.4/安装 # 编译 make # 安装&#xff0c; 一定是大写PREFIX make PREFIX/opt/redis-7.2.4/redis/ install配置为系统服务 cd /etc/systemd/system/主服务…

spring揭秘24-springmvc02-5个重要组件

文章目录 【README】【1】HanderMapping-处理器映射容器【1.1】HanderMapping实现类【1.1.1】SimpleUrlHandlerMapping 【2】Controller&#xff08;二级控制器&#xff09;【2.1】AbstractController抽象控制器&#xff08;控制器基类&#xff09; 【3】ModelAndView(模型与视…

从零开始搭建UVM平台(三)-加入objection机制

书接上回&#xff1a; 从零开始搭建UVM平台&#xff08;一&#xff09;-只有uvm_driver的验证平台 从零开始搭建UVM平台&#xff08;二&#xff09;-加入factory机制 加入objection机制 需要在第一个消耗仿真时间语句前raise_objection&#xff0c;最后再drop_objection&…

【微服务即时通讯系统】——etcd一致性键值存储系统、etcd的介绍、etcd的安装、etcd使用和功能测试

文章目录 etcd1. etcd的介绍1.1 etcd的概念 2. etcd的安装2.1 安装etcd2.2 安装etcd客户端C/C开发库 3. etcd使用3.1 etcd接口介绍 4. etcd使用测试4.1 原生接口使用测试4.2 封装etcd使用测试 etcd 1. etcd的介绍 1.1 etcd的概念 Etcd 是一个基于GO实现的 分布式、高可用、一致…

2024年7月大众点评武汉餐饮美食店铺基础信息

在做一些城市分析、学术研究分析、商业选址、商业布局分析等数据分析挖掘时&#xff0c;大众点评的数据参考价值非常大&#xff0c;截至2024年7月&#xff0c;大众点评美食店铺剔除了暂停营业、停止营业后的最新数据情况分析如下。 武汉餐饮美食店铺约9.6万家&#xff0c;有均…

实验1.2 熟悉VRP基本操作

实验1.2 熟悉VRP基本操作 原理概述 VRP&#xff08;Versatile Routing Platform&#xff0c;通用路由平台&#xff09;是华为公司数据通信产品的通用网络操作系统平台&#xff0c;拥有一致的网络界面、用户界面和管理界面。在VRP操作系统中&#xff0c;用户通过命令行对设备下…

Kettle9连接mysql8.0.36失败处理

一、问题描述 kettle作为数据转换同步的工具&#xff0c;使用java开发&#xff0c;连接数据库使用jar的驱动包&#xff0c;比如oracle连接使用ojdbc8.jar&#xff0c;mysql连接使用mysql-connect-java-8.0.*,但是截止目前mysql8.0.33到8.0.36在官网是没有mysql驱动包的&#x…

Vue之axios请求

Vue之axios请求 axios请求, 是Vue前端框架非常重要的一部分, 今天我们就讲解axios请求, 到底有什么作用, 以及会告诉大家axios的常见用法。 axios请求, 是网页向后端发起请求, 后端吧数据给我们网页, 这是一个前后端交互的过程。当我们学会了axios, 我们可以实现前端和后端练…

PIKACHU | PIKACHU 靶场初识

关注这个靶场的其他相关笔记&#xff1a;PIKACHU —— 靶场笔记合集-CSDN博客 0x01&#xff1a;PIKACHU 靶场简介 PIKACHU 是一款开源的练习 Web 漏洞的综合靶场&#xff0c;使用 PHP 代码编写而成&#xff0c;它包含了多种常见的 Web 安全漏洞&#xff0c;适合不同水平的用户…

redis 中IO多路复用与Epoll函数

一 IO多路复用 1.1 IO多路复用作用

C++之Swap类

main.cpp #include <iostream> #include <vector> #include <ctime> #include "Swap.h"using namespace std;int main() {Array myArrays;srand(time(0));for (int i 0; i < 7; i) {int tempArray (rand() % 100); // 生成0到99之间的随机数…

【动态规划】最长回文子串

最长回文子串&#xff08;难度&#xff1a;中等&#xff09; 该题对应力扣网址 思路 题目分成三种情况 情况一&#xff1a;每一个字符都是长度为1的回文串 情况二&#xff1a;长度大于2的回文串&#xff1a;看从i到j的字符串包含的从i1到j-1的字符串是否是回文串&#xff08…

关于液氮罐的液氮补给方式

液氮用于低温保存生物样本&#xff0c;如细胞、组织和其他样品&#xff0c;确保其长期存储而不失活。当液氮罐中的液氮水平下降时&#xff0c;及时补给是至关重要的。补给液氮的步骤较为简单&#xff0c;但需要遵循一定的安全标准和操作规范&#xff0c;以确保样本的安全和液氮…

数据治理005-血缘关系

数据血缘是元数据产品的核心能力&#xff0c;但数据血缘是典型的看起来很美好但用起来门槛很高的技术&#xff0c;只要你采买过元数据产品就知道了。这篇文章对数据血缘的特征、价值、用途和方法做了系统阐述&#xff1a; 1、特征&#xff1a;归属性、多源性、可追溯及层次性 2…

2022年上真题(案例分析)

一、数据流图 1. E1&#xff1a;商户 E2&#xff1a;外卖平台 E3&#xff1a;用户 E4&#xff1a;支付系统 2. D1&#xff1a;商户用户信息表 D2&#xff1a;订单表 D3&#xff1a;餐品信息表 D4&#xff1a;评价表 3. 数据流名称 …

Python Daphne库:ASGI服务的高效Web服务器

更多Python学习内容&#xff1a;ipengtao.com 随着 Web 开发技术的不断发展&#xff0c;异步编程逐渐成为构建高性能 Web 应用的主流方式。传统的 WSGI 接口已经不能满足现代异步 Web 应用的需求。ASGI&#xff08;Asynchronous Server Gateway Interface&#xff09;作为 WSGI…

智慧园区建设,构建智能监控和安防体系

智慧园区是指运用先进的信息技术和互联网思维&#xff0c;以提升园区管理和服务水平为目标&#xff0c;通过整合各类资源、优化园区运营&#xff0c;打造智能化、智能、绿色、低碳的现代园区。在智慧园区中&#xff0c;智慧楼宇、智能监控、智慧消防和智慧安防是不可或缺的重要…

项目实战:k8s部署考试系统

一、新建nfs服务器&#xff08;192.168.1.44&#xff09; 1.基础配置&#xff08;IP地址防火墙等&#xff09; 2.配置时间同步 [rootlocalhost ~]# yum -y install ntpdate.x86_64 [rootlocalhost ~]# ntpdate time2.aliyun.com 27 Sep 10:28:08 ntpdate[1634]: adjust tim…

机器学习-KNN

KNN&#xff1a;K最邻近算法&#xff08;K-Nearest Neighbor,KNN&#xff09; 用特征空间中距离待分类对象的最近的K个样例点的类别来预测。 投票法&#xff1a;K 个样例的对数类别。 k1:最近邻分类 k 通常是奇数&#xff08;因为我们根据这个K数据判断类别&#xff0c;如果…

基于Hive和Hadoop的保险分析系统

本项目是一个基于大数据技术的保险分析系统&#xff0c;旨在为用户提供全面的汽车保险信息和深入的保险价格分析。系统采用 Hadoop 平台进行大规模数据存储和处理&#xff0c;利用 MapReduce 进行数据分析和处理&#xff0c;通过 Sqoop 实现数据的导入导出&#xff0c;以 Spark…