MySQL - 数据库基础 | 数据库操作 | 表操作

文章目录

    • 1、数据库基础
      • 1.1为什么要有数据库
      • 1.2主流的数据库
      • 1.3连接MySQL
      • 1.4服务器、数据库、表的关系
      • 1.5 MySQL框架
      • 1.6 SQL分类
      • 1.7储存引擎
    • 2.数据库操作
      • 2.1创建数据库
      • 2.2字符集和校验规则
      • 2.3删除数据库
      • 2.4修改数据库
      • 2.5备份与恢复
      • 2.6查看连接情况
    • 3.表的操作
      • 3.1创建表
      • 3.2查看表结构
      • 3.3添加数据
      • 3.4查看表内容
      • 3.5修改表
      • 3.6删除表


1、数据库基础

1.1为什么要有数据库

文件也有保存数据的能力,那么为什么还需要数据库呢?

文件保存数据有以下几个缺点:

  1. 文件的安全性问题
  2. 文件不利于数据查询和管理
  3. 文件不利于存储海量数据
  4. 文件在程序中控制不方便

为了解决上述问题,专家们设计出更加利于管理数据的东西——数据库,它能更有效的管理数据。

数据库储存介质

  1. 磁盘
  2. 内存

1.2主流的数据库

  1. SQL Sever: 微软的产品,.Net程序员的最爱,中大型项目。
  2. Oracle: 甲骨文产品,适合大型项目,复杂的业务逻辑,并发一般来说不如MySQL。
  3. MySQL:世界上最受欢迎的数据库,属于甲骨文,并发性好,不适合做复杂的业务。主要用在电 商,SNS,论坛。对简单的SQL处理效果好。
  4. PostgreSQL :加州大学伯克利分校计算机系开发的关系型数据库,不管是私用,商用,还是学术研 究使用,可以免费使用,修改和分发。
  5. SQLite: 是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的 低,在嵌入式设备中,可能只需要几百K的内存就够了。
  6. H2: 是一个用Java开发的嵌入式数据库,它本身只是一个类库,可以直接嵌入到应用项目中。

1.3连接MySQL

mysql -h [hostname] -P [port] -u [username] -p
  1. [hostname] 是MySQL服务器的地址(例如localhost)(默认是127.0.0.1,如果省略-h选项默认连接本地)。
  2. [port]是MySQL服务器的端口号(默认是3306,如果省略-P选项,则使用默认端口)。
  3. [username] 是你的MySQL用户名。
  4. -p 选项会提示你输入密码。

如:root为登录用户名,忽略-h ,-P选项。
在这里插入图片描述

1.4服务器、数据库、表的关系

  1. 所谓安装数据库服务器,只是在机器上安装了一个数据库管理系统程序,这个管理程序可以管理多 个数据库,一般开发人员会针对每一个应用创建一个数据库。
  2. 为保存应用中实体的数据,一般会在数据库中创建多个表,以保存程序中实体的数据。

关系图:
在这里插入图片描述

1.5 MySQL框架

MySQL的整体架构可以分为几个主要层次,这些层次共同协作以提供数据库服务:

  1. 客户端(网络连接层): 提供与MySQL服务器建立连接的支持。客户端通过各自的API(如JDBC、ODBC等)与MySQL服务器进行通信。 处理连接请求,包括连接管理、用户认证和权限验证。MySQL服务器会维护一个连接池,以提高连接管理的效率。
  2. 服务层(MySQL Server): MySQL Server是数据库的核心部分,负责接收和处理来自客户端的SQL语句。 提供SQL接口,接受用户的SQL命令,并返回查询结果。 包含解析器(Parser),用于将SQL语句解析成可执行的内部数据结构(解析树)。 包含查询优化器(Optimizer),用于根据统计信息和算法生成最优的执行计划。 在早期版本中,还包含查询缓存(Cache),用于缓存查询结果以提高性能(但在MySQL 8.0及以后版本中已被移除)。
  3. 存储引擎层:
    存储引擎是MySQL架构中最具特色的部分之一,它提供了数据的物理存储和访问机制。 MySQL支持多种存储引擎,如InnoDB、MyISAM、Memory等,每种存储引擎都有自己的特点和适用场景。 存储引擎负责实现数据的存储、检索、更新和删除等操作,并通过存储引擎API与MySQL Server进行交互。
  4. 系统文件层:
    包含MySQL数据库的实际数据文件、日志文件以及相关的配置文件。
    数据文件和日志文件用于存储数据库的数据和事务日志,配置文件则用于设置MySQL服务器的运行参数。

在这里插入图片描述

1.6 SQL分类

  1. DDL【data definition language】 数据定义语言,用来维护存储数据的结构 代表指令: create, drop,alter 。
  2. DML【data manipulation language】 数据操纵语言,用来对数据进行操作 代表指令: insert,delete,update 。
  3. DML中又单独分了一个DQL,数据查询语言,代表指令: select DCL【Data Control Language】 数据控制语言,主要负责权限管理和事务 代表指令: grant,revoke,commit。

1.7储存引擎

存储引擎是:数据库管理系统如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。MySQL的核心就是插件式存储引擎,支持多种存储引擎。
1.7.1查看引擎

show engines;

在这里插入图片描述
1.7.2储存引擎对比

在这里插入图片描述

2.数据库操作

在MySQL中,对于大多数SQL指令和关键字(如SELECT、INSERT、UPDATE等),MySQL服务器默认是不区分大小写的。这意味着你可以使用大写、小写或混合大小写来编写这些指令,它们都会被MySQL正确解析和执行。

2.1创建数据库

2.1.1语法

CREATE DATABASE [IF NOT EXISTS] db_name [create_specification [,
create_specification] ...]
create_specification:
[DEFAULT] CHARACTER SET charset_name
[DEFAULT] COLLATE collation_name
  1. [IF NOT EXISTS]是一个可选部分,用于防止在尝试创建已经存在的数据库时发生错误。如果数据库已经存在,并且你包含了IF NOTEXISTS,那么MySQL将不会创建数据库,也不会返回错误。
  2. db_name是你想要创建的数据库的名称。
  3. [create_specification [, create_specification] …]部分允许你指定一个或多个创建规范,每个规范之间用逗号分隔。这些规范可以包括:
    [DEFAULT] CHARACTER SET charset_name:设置数据库的默认字符集。字符集定义了数据库中可以存储的字符的集合。如果你不指定字符集,MySQL将使用默认字符集(这通常是utf8mb4,因为它支持完整的Unicode字符集)。
    [DEFAULT] COLLATE collation_name:设置数据库的默认校对规则。校对规则定义了字符的比较和排序方式。如果你指定了字符集但没有指定校对规则,MySQL将使用与该字符集关联的默认校对规则。

2.1.2使用

CREATE DATABASE IF NOT EXISTS mydatabase 
DEFAULT CHARACTER SET utf8mb3 
DEFAULT COLLATE utf8mb3_general_ci;
  1. IF NOT EXISTS防止了如果mydatabase已经存在时发生错误。
  2. DEFAULT CHARACTER SET utf8mb3设置了数据库的默认字符集为utf8mb3。
  3. DEFAULT COLLATE utf8mb3_general_ci设置了数据库的默认校对规则为utf8mb3_general_ci,这是一种不区分大小写的校对规则。

2.1.3查看当前存在的数据库

SHOW DATABASES	

在这里插入图片描述

2.2字符集和校验规则

2.2.1查看系统默认的字符集和校验规则

show variables like 'character_set_database';	//字符集
show variables like 'collation_database';	//字符校验规则

在这里插入图片描述
2.2.2查看系统支持的字符集和校验规则

show charset;

在这里插入图片描述
2.2.3校验规则对数据库的影响

  1. 字符集和校验规则不一致可能导致乱码,数据不一致的情况。
  2. 是否区分大小写。

2.3删除数据库

2.3.1语法

DROP DATABASE [IF EXISTS] db_name;

IF EXISTS : 这个选项代表如果数据库存在就删除,不存在就不执行任何操作,如果不加时,数据库不存在就会报错。

在这里插入图片描述

2.4修改数据库

主要是对字符集的修改
2.4.1语法

ALTER DATABASE db_nameCHARACTER SET charset_nameCOLLATE collation_name;
  1. db_name 是你想要更改的数据库的名称。
  2. charset_name 是你想要设置为默认字符集的字符集名称。
  3. collation_name 是与字符集相关联的校对规则名称。

2.4.2使用

ALTER DATABASE mydatabase CHARACTER SET gbk COLLATE gbk_chinese_ci;

2.4.3查看一个库的字符集和校验规则

SELECT SCHEMA_NAME,          -- 选择数据库的名称DEFAULT_CHARACTER_SET_NAME,  -- 选择数据库的默认字符集DEFAULT_COLLATION_NAME       -- 选择数据库的默认校验规则(校对规则)
FROM information_schema.SCHEMATA  -- 从information_schema数据库的SCHEMATA表中查询
WHERE SCHEMA_NAME = 'mydatabase';  -- 筛选条件:数据库名称必须为'mydatabase'

在这里插入图片描述

2.5备份与恢复

2.5.1备份
2.5.1.1语法

 mysqldump -P3306 -u root -p 密码 -B 数据库名 > 数据库备份存储的文件路径	//单个数据库mysqldump -u root -p -B 数据库名1 数据库名2 ... > 数据库存放路径	//多个数据库

2.5.1.2使用

mysqldump -P3306 -u root -p -B  d1 > ./d1.sql

2.5.2恢复
使用SOURCE命令执行备份文件中的SQL语句:

source 文件名.sql

2.6查看连接情况

show processlist

在这里插入图片描述

3.表的操作

3.1创建表

3.1.1语法

CREATE TABLE table_name (
field1 datatype comment 注释,
field2 datatype  comment 注释,
field3 datatype  comment 注释
) character set 字符集 collate 校验规则 engine 存储引擎;
  1. field 表示列名。
  2. datatype 表示列的类型。
  3. character set 字符集,如果没有指定字符集,则以所在数据库的字符集为准。
  4. collate 校验规则,如果没有指定校验规则,则以所在数据库的校验规则为准。
  5. comment 后面跟的是注释。

3.1.2使用
3.1.2.1选择数据库

use 数据库名;//use helloworld;

3.1.2.2 创建表

create table student(-> id int->name varchar(32),->gender varchar(32)-> );

3.2查看表结构

desc 表名;

在这里插入图片描述

3.3添加数据

3.3.1语法

INSERT INTO users (字段名字) VALUES (填入的数据); 

users: 表名

3.3.2使用

insert into student(id,name,gender) values(1,'张三','男');

3.4查看表内容

3.4.1语法

SELECT column1, column2, ...
FROM table_name
[WHERE condition]
[GROUP BY column1, column2, ...]
[HAVING condition]
[ORDER BY column1 [ASC|DESC], column2 [ASC|DESC], ...]
[LIMIT number_of_rows];
  1. SELECT: 这是SQL查询的起始部分,表明你希望从数据库中获取数据。 column1, column2, …:
    你可以指定一个或多个字段(列),这些字段是你希望从表中检索的数据。 使用 * 可以选择所有字段。
  2. FROM table_name: 指出你想要查询的表名。
  3. [WHERE condition](可选): 这是一个条件子句,用于过滤数据。只有满足条件的记录才会被选中。
    可以使用各种比较运算符(如 =, <>, >, <, >=, <=)、逻辑运算符(如 AND, OR, NOT)以及字符串函数等。
  4. [GROUP BY column1, column2, …](可选): 这个子句用于将结果集中的记录按一个或多个列进行分组。通常与聚合函数(如 COUNT(), SUM(), AVG(), MAX(), MIN())一起使用。
  5. [HAVING condition](可选): 用于过滤分组后的数据。与 WHERE 不同,HAVING 是在分组后应用的。
  6. [ORDER BY column1 [ASC|DESC], column2 [ASC|DESC], …](可选): 用于对结果集进行排序。 ASC表示升序(默认),DESC 表示降序。
  7. [LIMIT number_of_rows](可选): 限制返回的记录数。 常用于分页或当你只关心结果集的前几条记录时。

3.4.2举例

  1. 查询 users 表中的所有字段:
SELECT * FROM users;
  1. 查询 users 表中的 name 和 email 字段:
SELECT name, email FROM users;
  1. 查询 users 表中年龄大于30的用户:
SELECT * FROM users WHERE age > 30;
  1. 按 age 字段对 users 表中的记录进行升序排序:
SELECT * FROM users ORDER BY age ASC;
  1. 查询 orders 表中每个客户的订单总数,并按订单总数降序排序:
SELECT customer_id, COUNT(*) AS total_orders
FROM orders
GROUP BY customer_id
ORDER BY total_orders DESC;
  1. 查询 orders 表中订单总数超过10的客户:
SELECT customer_id, COUNT(*) AS total_orders
FROM orders
GROUP BY customer_id
HAVING total_orders > 10;
  1. 查询 users 表中的前5条记录:
SELECT * FROM users LIMIT 5;

3.5修改表

3.5.1增加字段
3.5.1.1语法

ALTER TABLE tablename ADD (column datatype [DEFAULT expr][, column datatype]...);
  1. ALTER TABLE tablename:指定要修改的表名。
  2. ADD:表示要添加列到表中。
  3. (column datatype [DEFAULT expr][, column datatype]…):在括号中指定要添加的列及其数据类型。可以为每个列指定一个默认值(DEFAULTexpr),多个列之间用逗号分隔。

3.5.1.2使用
添加年龄字段

ALTER TABLE student ADD (age INT);

3.5.2修改属性
3.5.2.1语法

ALTER TABLE tablename MODIFY (column datatype [DEFAULT expr][, column datatype]...);

MODIFY:表示要修改表中已存在的列的数据类型或默认值。
其他部分与添加列的语法相同。

3.5.2.2使用
将性别字段的varchar(32)改为char

 ALTER TABLE student MODIFY gender char(10);

3.5.3删除字段
3.5.3.1语法

ALTER TABLE users DROP signup_date;

3.5.3.2使用
删除性别字段

ALTER TABLE student DROP gender;

3.5.4修改表名
3.5.4.1语法

alter table 原表名 rename to 目标表名;

3.5.4.2使用
将表名student修改为st

alter table student  rename to st;

3.5.5修改字段
3.5.5.1语法

alter table 表名 change 旧字段 新字段; --新字段需要完整定义

3.5.5.2使用
将name修改为xingming

alter table st change name xingming char(5);

3.6删除表

3.6.1语法

DROP [TEMPORARY] TABLE [IF EXISTS] tbl_name [, tbl_name] ...
  1. DROPTABLE:这是SQL中用于删除表的基本命令。执行此命令后,指定的表以及表中的所有数据将从数据库中永久删除,且无法恢复(除非有备份)。
  2. [TEMPORARY]:这是一个可选的关键字。如果指定了TEMPORARY,则命令将仅删除临时表。临时表是在当前会话(或连接)中创建的,仅对当前会话可见。当会话结束时,临时表会自动删除。如果不指定TEMPORARY,则命令将删除永久表。
  3. [IF EXISTS]:这也是一个可选的关键字。如果指定了IF EXISTS,那么在尝试删除不存在的表时,SQL命令不会报错。如果未指定IF EXISTS且尝试删除的表不存在,SQL命令将返回一个错误。
  4. tbl_name [, tbl_name]…:这里指定了要删除的表的名称。可以一次性删除多个表,表名之间用逗号分隔。

3.6.2使用
删除st表

drop table st;

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

通过vite+vue3+pinia从0到1搭建一个uniapp应用

最近项目上要做一个app&#xff0c;选择了用uniapp作为开发框架&#xff1b;我大概看了一下uniapp的文档&#xff0c;根据文档从0到1搭了一个uniapp应用供大家参考。 因为本人习惯使用了WebStorm编译器&#xff0c;但是uniapp官方推荐使用HBuilder搭建&#xff0c;如果和我一样…

学习路之phpstudy--安装mysql5.7后在my.ini文件中无法修改sql_mode

windows环境下使用phpstudy安装mysql5.7后需要修改mysql中的sql_mode配置&#xff0c;但是在phpstudy中打开mysql配置文件my.ini后&#xff0c; 通过查找找不到sql_mode或sql-mode&#xff0c; 此时无法在my.ini文件中直接进行修改&#xff0c;可以使用mysql命令进行修改&#…

IDEA:2023版远程服务器debug

很简单&#xff0c;但是很多文档没有写清楚&#xff0c;wocao 一、首先新建一个远程jvm 二、配置 三、把上面的参数复制出来 -agentlib:jdwptransportdt_socket,servery,suspendn,address5005 四、然后把这串代码放到服务器中&#xff08;这里的0.0.0.0意思是所有IP都能访问&a…

ts: 定义一个对象接收后端返回对象数据,但是报错了有红色的红线为什么

问&#xff1a; const backendProgressData ref<object>&#xff08;{}&#xff09; 这是我的代码&#xff0c;但是当我进行使用的时候&#xff1a; backendProgressData.value xxxx接口返回数据progressData:{percentage:123,text:"文字"} 在template中{{…

解决Docker环境变量的配置的通用方法

我们部署的很多服务都是以Docker容器的形式存在的。 在运行Docker容器前&#xff0c;除了设置网络、数据卷之外&#xff0c;还需要设置各种各样的环境变量。 有时候&#xff0c;由于容器版本的问题&#xff0c;一些文档没有及时更新&#xff0c;可能同时存在多个新旧版本的环…

【腾讯云产品最佳实践】腾讯云CVM入门技术与实践:通过腾讯云快速构建云上应用

目录 前言 什么是腾讯云CVM&#xff1f; 腾讯云CVM的技术优势 基于最佳技术实践&#xff0c;使用腾讯云CVM搭建应用 1. 开通CVM实例 2. 连接CVM实例 3. 配置Web环境 4. 部署PHP应用 腾讯云CVM行业应用案例&#xff1a;电商平台的双十一攻略 1. 弹性伸缩解决高并发问题…

51c嵌入式~IO合集2

我自己的原文哦~ https://blog.51cto.com/whaosoft/11697814 一、STM32串口通信基本原理 通信接口背景知识 设备之间通信的方式 一般情况下&#xff0c;设备之间的通信方式可以分成并行通信和串行通信两种。并行与串行通信的区别如下表所示。 串行通信的分类 1、按照数据传…

七、电机三环控制

电机三环控制指的是&#xff0c;直流有刷电机三环&#xff08;电流环速度环位置环&#xff09;PID 控制。 1、三环PID控制原理 三环 PID 控制就是将三个 PID 控制系统&#xff08;例如&#xff1a;电流环、速度环以及位置环&#xff09;串联起来&#xff0c;然后对前一个系统…

NLP论文速读(多伦多大学)|利用人类偏好校准来调整机器翻译的元指标

论文速读|MetaMetrics-MT: Tuning Meta-Metrics for Machine Translation via Human Preference Calibration 论文信息&#xff1a; 简介&#xff1a; 本文的背景是机器翻译&#xff08;MT&#xff09;任务的评估。在机器翻译领域&#xff0c;由于不同场景和语言对的需求差异&a…

【Vue】Vue指令

目录 概念 作用 分类 内容渲染指令 属性绑定指令 事件绑定指令 条件渲染指令 v-if/v-else-if/v-else多分支渲染 v-show和v-if的区别 列表渲染指令 v-for中的key属性 双向绑定指令 示例&#xff1a;图片切换 示例&#xff1a;可折叠面板 示例&#xff1a;书架…

C++:类和对象(三)

1.深入了解构造函数 1.1初始化列表 引入&#xff1a;我们首先要知道&#xff0c;在类中我们是声明变量&#xff0c;在实例化的时候才是开空间&#xff0c;在调用构造函数的时候又分两段&#xff0c;一段是定义&#xff08;所有的成员变量进行定义&#xff09;&#xff0c;一段…

北京申请中级职称流程(2024年)

想找个完整详细点的申请流程资料真不容易&#xff0c;做个分享送给需要的人吧。 不清楚为什么说文章过度宣传&#xff0c;把链接和页面去掉了&#xff0c;网上自己找一下。 最好用windows自带的EDGE浏览器打开申请网站&#xff0c;只有在开始申请的时间内才可以进行网上申报&…

好用的js组件库

lodash https://www.lodashjs.com/https://www.lodashjs.com/ uuid 用于生成随机数&#xff0c;常用于生成id标识 GitHub - uuidjs/uuid: Generate RFC-compliant UUIDs in JavaScripthttps://github.com/uuidjs/uuid dayjs 常用于时间的处理 安装 | Day.js中文网 (fenxi…

php:使用socket函数创建WebSocket服务

一、前言 闲来无事&#xff0c;最近捣鼓了下websocket&#xff0c;但是不希望安装第三方类库&#xff0c;所以打算用socket基础函数创建个服务。 二、构建websocket服务端 <?phpclass SocketService {// 默认的监听地址和端口private $address 0.0.0.0;private $port 8…

Tailscale 自建 Derp 中转服务器(全程无 Docker + 无域名纯 IP 版本)

文章目录 整体大纲目的&#xff1a;为什么要建立 Derp 中转服务器云服务器安装 DerpDerp 中转服务器介绍安装 Go 环境通过 Go 安装 Derp处理证书文件自签一个域名给 Derp验证 Derp 是否启动 云服务器安装并登录 Tailscale第一种组合&#xff1a; 官方 Tailscale 账号 自己的 D…

shell--第一次作业

1.接收用户部署的服务名称 # 脚本入口 read -p "请输入要部署的服务名称&#xff1a;" service_name 2.判断服务是否安装 # 判断服务是否安装 if rpm -q "$service_name" &>/dev/null; then echo "服务 $service_name 已安装。" 已…

项目部署问题bug记录(长期更新)

一、编译相关 1.submodules/simple-knn/simple_knn.cu(90): error: identifier "FLT_MAX" is undefined me.minn { FLT_MAX, FLT_MAX, FLT_MAX }; 部署photoreg工程&#xff0c;在编译simple_knn的时候&#xff0c;报错&#xff1a; (photoreg) leelee…

ant-design-vue中table组件多列排序

antD中table组件多列排序 使用前注意实现效果图实现的功能点及相关代码1. 默认按某几个字段排序2. 点击排序按钮可同时对多个字段进行排序3. 点击重置按钮可恢复默认排序状态。 功能实现完整的关键代码 使用前注意 先要确认你使用的antD版本是否支持多列排序&#xff0c;我这里…

影视后期学习Ⅰ~

1.DV是光盘 磁带 2.序列就是我们要制作的一个视频。 打开界面显示&#xff1a; 一号面板放的是素材&#xff0c;二号面板叫源监视器面板&#xff08;它的名字需要记住&#xff09;在一号面板点击文件之后&#xff0c;进入二号面板&#xff0c;在二号面板预览没问题后&#xf…

大语言模型---Llama模型文件介绍;文件组成

文章目录 1. 概要2. 文件组成 1. 概要 在使用 LLaMA&#xff08;Large Language Model Meta AI&#xff09;权重时&#xff0c;通常会涉及到与模型权重存储和加载相关的文件。这些文件通常是以二进制格式存储的&#xff0c;具有特定的结构来支持高效的模型操作。以下以Llama-7…