一、MySQL简述

数据库 是一个有组织的集合,用于存储和管理数据的系统。它是一个软件系统,被设计用来存储、检索和管理数据,并提供数据的快速访问和处理。数据库可以被看作是一种特殊的文件系统,但与传统的文件系统不同的是:它能够更加高效的存储和管理大量结构化数据。

数据库主要由数据库管理系统(DBMS)和数据库组成:

image-20250810194211069

数据

数据是数据库存储与处理的基础素材,涵盖文本、数值、图像等各类信息形式 。在 MySQL 应用场景里,像学生信息管理系统中的学号、姓名,成绩统计里的分数,都属于待存储、分析的数据,是后续数据库操作的核心对象

数据库
  • 存储数据的仓库,是长期存放在计算机内、有组织、可共享的大量数据的集合。数据库中的数据按照一定数据模型组织、描述和存储,具有较小的冗余度,较高的独立性和易扩展性,并为各种用户共享,总结为以下几点:
  • 数据结构化 excel表 行 一条数据 一列一个属性(数据类型)

  • 数据的共享性高,冗余度低,易扩充

  • 数据独立性高

  • 数据由 DBMS 统一管理和控制(安全性、完整性、并发控制、故障恢复)

    注:

    1. 物理独立性高
      数据的物理存储细节(如存储路径、文件格式、索引类型、分表分库方式等)的改变,不会影响应用程序。
      例如:将数据从 MyISAM 引擎迁移到 InnoDB 引擎,或调整索引为 B + 树 / 哈希索引,应用程序的 SQL 查询无需修改 ——MySQL 通过 “模式 - 内模式映射” 自动处理底层存储与逻辑结构的适配。
    2. 逻辑独立性较强
      当数据的逻辑结构(如表结构、字段增减、表间关系)发生变化时,可通过视图(View)等机制隔离影响,减少对应用程序的改动。
      例如:在用户表中新增 “邮箱” 字段,只要应用程序查询依赖的视图(如仅包含 “ID”“姓名”)未变,原有查询语句可正常运行 —— 通过 “外模式 - 模式映射” 实现逻辑结构与应用的解耦。
常见数据库
关系型数据库

关系型数据库(RDBMS)是基于关系模型(二维表格结构)的数据库,核心特点是:

  • 数据结构固定:以表为单位,表由行列组成,字段定义严格(如数据类型、长度),表与表通过外键建立关联,形成严谨的关系模型。
  • 强事务支持:遵循 ACID 特性(原子性、一致性、隔离性、持久性),确保数据操作的准确性和完整性,适合需要严格事务的场景(如金融交易、订单管理)。
  • 标准化查询:使用 SQL(结构化查询语言)统一操作数据,支持复杂查询(如多表关联、聚合分析)。
  • 典型代表:MySQL、Oracle、SQL Server、PostgreSQL、浪潮K-DB 、武汉达梦、南大通用、人大金仓、华为高斯等。
非关系型数据库(NoSQL)

非关系型数据库是为解决海量数据、高并发、灵活结构等需求而设计,核心特点是:

  • 数据结构灵活:无固定表结构,支持键值对(Redis)、文档(MongoDB)、列族(HBase)、图形(Neo4j)等多种模型,可按需动态调整数据格式。

  • 侧重可用性与扩展性:遵循 BASE 理论(基本可用、软状态、最终一致性),牺牲部分强一致性以换取高吞吐量和横向扩展能力(通过增加节点扩容)。

  • 查询方式多样:无统一查询语言,多通过 API 操作,适合简单查询,复杂逻辑需在应用层实现。

  • 典型代表:Redis(缓存、计数)、MongoDB(文档存储)、HBase(海量数据)、Neo4j(图形关系)。

    类型数据模型核心特点代表产品典型应用场景
    键值存储键(Key)与值(Value)对应简单高效,查询速度快,适合简单数据映射Redis、Memcached、Riak缓存、会话存储、计数器
    文档存储类似 JSON 的文档格式支持嵌套结构,查询灵活,适合半结构化数据MongoDB、CouchDB内容管理(博客、电商商品描述)、日志存储
    列族存储按列族(Column Family)组织擅长读取大量数据,适合数据分析和历史数据存储HBase、Cassandra大数据分析、时序数据(如传感器数据)
    图形数据库节点(Node)和边(Edge)专注于存储实体间的关系,适合复杂关联查询Neo4j、JanusGraph社交网络关系、推荐系统、知识图谱
架构
  • 网络连接层:基于 TCP/IP 协议建立客户端与服务器连接,验证用户身份权限,借助连接池管理线程,控制连接数量,可用 show processlist 查看连接状态,负责连接建立与资源分配 。
  • 数据库服务层:处理核心逻辑,SQL 接口接收操作命令,解析器校验 SQL 语法语义,优化器选最优执行计划,缓存与缓冲区用内存暂存数据减磁盘 IO,还实现存储过程等跨引擎功能 。
  • 存储引擎层:作为可插拔的执行部件,不同引擎(如 InnoDB、MyISAM )依特性读写数据,InnoDB 适配高并发,MyISAM 适合读多写少,对接服务层计划并操作磁盘文件 。
  • 文件系统层:依托磁盘存数据,含日志(记录操作、保障恢复 )、数据(存储表及索引等 )、配置文件,实现数据持久化,借日志支持追溯与故障恢复

二、MySQL安装部署

Windows安装MySql8.0

三、数据类型

整数类型
数据类型字节数带符号值范围不带符号值范围 unsigned
tinyint unsigned1[-128,127][0,255]
smallint2[-32768,32767][0,65535]
mediumint3[-8388608,8388607][0,16777215]
int4[-2147483648,2147483647][0,4294967295]
bigint8[-9223372036854775808,9223372036854775807][0,18446744073709551616]
浮点数类型和定点数类型

浮点型:

数据类型字节数备注
float4单精度浮点型 7
double8双精度浮点型 15
  • 注意:可以使用float(M,D)、double(M,D)格式限制宽度按(M)和精度(D),如float(3,2),不指定M、D的时,会按照实际的精度来处理

  • 定点型:decimal(size,d) ,作为字符串存储的 DOUBLE 类型,允许固定的小数点,由于float、double类型存在精度丢失问题,即写入数据库的数据未必是插入数据库的数据,而decimal无论写入数据中的数据是多少,都不会存在精度丢失问题,这就是要引入decimal类型的原因,decimal类型常见于银行系统、互联网金融系统等对小数点后的数字比较敏感的系统中,结论:float/double在db中存储的是近似值,而decimal则是以字符串形式进行保存

字符串类型

在MySQL中常用CHAR 和 VARCHAR 表示字符串。两者不同的是:VARCHAR存储可变长度的字符串。
char是固定长度字符串,其长度范围为0~255且与编码方式无关,无论字符实际长度是多少,都会按照指定长度存储,不够的用空格补足,char类型数据时会将结尾的所有空格处理掉

数据类型描述
char(size)保存固定长度的字符串(可包含字母、数字以及特殊字 符)。在括号中指定字符串的长度。最多 255 个字符。
varchar(size)保存可变长度的字符串(可包含字母、数字以及特殊字 符)。在括号中指定字符串的最大长度。最多 255 个字 符。 注释:如果值的长度大于 255,则被转换为 TEXT 类型。
tinytext存放最大长度为 255 个字符的字符串。
text存放最大长度为 65,535 个字符的字符串。
blob用于 BLOBs (Binary Large OBjects)。存放最多 65,535 字节的数据。
mediumtext存放最大长度为 16,777,215 个字符的字符串。
mediumeBlob用于 BLOBs (Binary Large OBjects)。存放最多 16,777,215 字节的数据。
longtext存放最大长度为 4,294,967,295 个字符的字符串。
longblob用于 BLOBs (Binary Large OBjects)。存放最多 4,294,967,295 字节的数据。
enum(x,y,z,etc)允许输入可能值的列表。可以在 ENUM 列表中列出最大 65535 个值。如果列表中不存在插入的值,则插入空值。 注释:这些值是按照你输入的顺序存储的。 可以按照此格式输入可能的值: ENUM(‘X’,‘Y’,‘Z’)
set与 enum 类似, SET 最多只能包含 64 个列表项,不过 SET 可存储一个以上的值。
日期与时间类型

MySQL提供的表示日期和时间的数据类型分别是 :YEAR、DATE、TIME、DATETIME 和 TIMESTAMP。下图列举了日期和时间数据类型所对应的字节数、取值范围、日期格式以及零值:

数据类型字节数格式备注
date3yyyy-MM-dd存储日期值
time3HH:mm:ss存储时分秒
year1yyyy存储年
datetime8yyyy-MM-dd HH:mm:ss存储日期+时间
timestamp4yyyy-MM-dd HH:mm:ss存储日期+时间,可作时间戳

四、数据库、数据表的基本操作

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

数据库的基本操作
[root@master ~]# mysql -uroot -pMysql@123
mysql> create database student;   		#创建数据库
Query OK, 1 row affected (0.00 sec)mysql> show create database student;    #查看该数据库基本信息
+----------+-----------------------------------------------------------------------------------------------------------------------------------+
| Database | Create Database                                                                                                                   |
+----------+-----------------------------------------------------------------------------------------------------------------------------------+
| student  | CREATE DATABASE `student` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */ /*!80016 DEFAULT ENCRYPTION='N' */ |
+----------+-----------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)mysql> drop database student;  	#删除数据库
Query OK, 0 rows affected (0.01 sec)mysql> show databases;				#查询出MySQL中所有的数据库
+--------------------+
| Database           |
+--------------------+
| db1                |
| db3                |
| db4                |
| db5                |
| information_schema |
| mydb4_product      |
| mydb5_sales        |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
10 rows in set (0.00 sec)
mysql>  select user();   		 #查看当前用户
+----------------+
| user()         |
+----------------+
| root@localhost |
+----------------+
1 row in set (0.00 sec)
数据库的基本操作

数据库创建成功后可在该数据库中创建数据表(简称为表)存储数据。请注意:在操作数据表之前应使用“USE 数据库名;”指定操作是在哪个数据库中进行先关操作,否则会抛出“No database selected”错误。

mysql>  select user();
+----------------+
| user()         |
+----------------+
| root@localhost |
+----------------+
1 row in set (0.00 sec)
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| db1                |
| db3                |
| db4                |
| db5                |
| information_schema |
| mydb4_product      |
| mydb5_sales        |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
10 rows in set (0.00 sec)
mysql> use db1
mysql> create table student1 (       #创建student1表-> id int ,-> name varchar(20),-> sex char(2),-> age int unsigned,-> score float,-> addr varchar(50));
ERROR 1050 (42S01): Table 'student1' already exists    #报错student1已存在
mysql> create table student10 ( id int , name varchar(20), sex char(2), agge int unsigned, score float, addr varchar(50));                              #修改为student10
Query OK, 0 rows affected (0.01 sec)mysql> desc student10;                                 查看表结构
+-------+--------------+------+-----+---------+-------+
| Field | Type         | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| id    | int          | YES  |     | NULL    |       |
| name  | varchar(20)  | YES  |     | NULL    |       |
| sex   | char(2)      | YES  |     | NULL    |       |
| age   | int unsigned | YES  |     | NULL    |       |
| score | float        | YES  |     | NULL    |       |
| addr  | varchar(50)  | YES  |     | NULL    |       |
+-------+--------------+------+-----+---------+-------+
6 rows in set (0.00 sec)mysql> drop table student1;                            #·删除student1
Query OK, 0 rows affected (0.00 sec)mysql> alter table student10 rename student1;          #将student10重命名为student1
Query OK, 0 rows affected (0.01 sec)mysql> desc student1;
+-------+--------------+------+-----+---------+-------+
| Field | Type         | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| id    | int          | YES  |     | NULL    |       |
| name  | varchar(20)  | YES  |     | NULL    |       |
| sex   | char(2)      | YES  |     | NULL    |       |
| age   | int unsigned | YES  |     | NULL    |       |
| score | float        | YES  |     | NULL    |       |
| addr  | varchar(50)  | YES  |     | NULL    |       |
+-------+--------------+------+-----+---------+-------+
6 rows in set (0.00 sec)mysql> alter table student1 add phone_num int after score;     #在score列之后插入phone——num列
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0mysql> alter table student1 change sex gender char(2) ;        #修改sex列名为gender
Query OK, 0 rows affected (0.00 sec)
Records: 0  Duplicates: 0  Warnings: 0mysql> alter table student1 modify  gender varchar(20) ;		#修改gender数据类型
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0mysql> alter table student1 modify  score int ;					#修改score数据类型为int
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0mysql> alter table student1 drop addr;							#删除addr列
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0mysql> desc student1;
+-----------+--------------+------+-----+---------+-------+
| Field     | Type         | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+-------+
| id        | int          | YES  |     | NULL    |       |
| name      | varchar(20)  | YES  |     | NULL    |       |
| gender    | varchar(20)  | YES  |     | NULL    |       |
| age       | int unsigned | YES  |     | NULL    |       |
| score     | int          | YES  |     | NULL    |       |
| phone_num | int          | YES  |     | NULL    |       |
+-----------+--------------+------+-----+---------+-------+
6 rows in set (0.00 sec)mysql> drop table student1;
Query OK, 0 rows affected (0.00 sec)

小结

# 新建表
create tables  表名(列名1 类型  , 列名2  类型 ……);
# 查看表结构
desc  表名;
# 修改表名
alter  table  旧表名  rename  新表名;
rename table 旧表名 to 新表名;
# 表中添加新列
alter table 表名 add  新列名 列类型  [after|first] 列名;after为之后)
# 删除列
alter table 表名 DROP 列名;
# 修改列名
alter table  表名 change  旧列名  新列名 列类型;
# 修改列类型
alter  table  表名  modify  列名  列类型;
# 移动列
alter table 表名 modify  列名  列类型 after 某列;
# 删除表
drop table  if  exists  表名;  

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

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

相关文章

数据仓库命名规范

1. 概述 数据模型是数据管理的分析工具和交流的有力手段;同时,还能够很好地保证数据的一致性,是实现商务智能(Business Intelligence)的重要基础。因此建立、管理一个企业级的数据模型,应该遵循标准的命名…

FlinkSQL Joins全解析

1. Lookup Join用途:用于流表与外部维表(静态或缓慢变化表)的关联(如 MySQL、HBase 等)。特点:通过 实时查询外部存储 获取维度数据。仅支持 处理时间(Processing Time)语义&#xf…

【FileZilla】基于 FTP 的 Windows 和 Linux 文件传输

在嵌入式开发过程中我们经常需要在 Windows 和 Linux 下进行文件传输,本文就介绍一种通过 FTP 实现 Windows 和 Linux 文件传输的方法。 Windows 为物理主机,Linux 是在 Vmware 虚拟机中安装运行的 Ubuntu,版本为 18.04。 Ubuntu 安装 FTP …

【GPT入门】第42课 ollama安装与运行llama3模型

【GPT入门】第42课 ollama安装与运行llama3模型1. 安装ollama2.运行模型3.测试模型3.1 直接在命令行交互3.2 openai接口1. 安装ollama https://ollama.com/ 选download, 选linux 执行安装命令: curl -fsSL https://ollama.com/install.sh | sh2.运行模型 启动服…

Lua语言元表、协同程序

元表元表的定义允许我们改变table的行为。setmetatable(普通表,元表)-- 元表a {"a","b","c"} -- 普通表 b {} --元表c setmetatable(a,b)print("------------------------")f {}print("f:",f)d setmetatabl…

[已解决]VSCode右键菜单消失恢复

前言 莫名其妙,好似VSCode自动更新以后,右键菜单就失效了,重装也无果. 手动搞一个吧 保存下面代码到桌面修复VSCODE右键菜单.reg,双击运行即可. Windows Registry Editor Version 5.00[HKEY_CLASSES_ROOT\Directory\Background\shell\VSCode]"使用 VSCode 打开""…

什么是浏览器标识?

浏览器标识 层面一:网络层指纹 (HTTP/TLS) 这是最基础的指纹,即使不用浏览器,只用Go的 net/http 发请求也会留下。HTTP Headers (请求头): User-Agent: 最著名的标识,声明自己是什么浏览器。很容易伪造,但也很容易被识…

五十八、【Linux系统nginx服务】nginx代理服务器、nginx优化

Nginx代理技术全景图 #mermaid-svg-0dRktnHYPXypO9xB {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-0dRktnHYPXypO9xB .error-icon{fill:#552222;}#mermaid-svg-0dRktnHYPXypO9xB .error-text{fill:#552222;stroke…

[0CTF 2016]piapiapia

usernamepassword回显推断admin123Invalid user name or passwordadmin123Invalid user name or passwordadmin123Invalid user name or passworda123Invalid user name说明username是adminadmin1Invalid password这很奇怪了admin0200?admin11Invalid user name or …

人工智能系列(7)人工神经网络中的无监督学习

一. 无监督学习简介神经网络的一个关键属性是能够从环境中学习,并在不断学习的过程中持续改善性能。在无监督学习(又称自组织学习,self-organized learning)中,网络无需外部教师提供目标输出,而是通过对输入…

250810-OpenWebUI集成Dify应用

A. 最终效果 B. 环境配置 配置并启动Open-WebUI 随后浏览器访问:http://localhost:8080 pip install open-webui open-webui serve配置并启动Pipelines Pipelines默认占用80端口相比于Docker的启动方式,可以在相同的命令行中,查看pipelines …

day22|学习前端ts语言

抽象类,继承。不能创造实例class类:属性声明,构造器,方法,实例继承super()override重写父类继承的方法声明提升(hoisting)同一个js作用域内部,编译阶段把函数…

【网络安全】CTF——[网鼎杯2018]Unfinish-SQL注入-二次注入

目录 一、前言 二、环境 三、复现 3.1寻找注入点 3.2尝试盲注 3.3正则限制 3.4脚本注入获取flag 四、总结 一、前言 前两天复现了一道CTF题目[网鼎杯 2018]Comment,今天继续来学习一下SQL二次注入。 二、环境 BUUCTF在线评测 三、…

【langchain】如何给langchain提issue和提pull request?

什么是issue? 可以这么理解,bug是issue的子集。issue可以包含bug\feature\sercurity and others. https://github.com/langchain-ai/langchain/issues/32484 什么是pull request? 其实我真不是很理解,但不妨我来提pr https://github.com/langchain-ai/…

MySQL的存储引擎:

目录 InooDB引擎: MyISAM引擎: InooDB引擎与MyISAM存储引擎的区别: Archive引擎: Blackhole引擎: CSV引擎: Memory引擎: Federated引擎: Merge引擎: NDB引擎&a…

Mock与Stub

一、核心概念与差异对比特性MockStub核心目的验证对象间的交互行为提供预定义的固定响应验证重点方法调用次数、参数、顺序不关注调用过程,只关注结果行为模拟可编程的智能模拟静态的简单响应适用场景验证协作关系隔离依赖、提供固定数据复杂性较高(需要…

香港服务器容器网络插件的多节点通信性能基准测试

香港服务器容器网络插件的多节点通信性能基准测试在云计算和容器化技术快速发展的今天,香港服务器因其优越的地理位置和网络环境,成为众多企业部署容器服务的首选。本文将深入探讨香港服务器环境下容器网络插件的多节点通信性能,通过详实的基…

Vue3 学习教程,从入门到精通,Vue 3 全局 API 语法知识点及案例详解(32)

Vue 3 全局 API 语法知识点及案例详解 Vue 3 提供了丰富的全局 API,用于创建应用实例、注册全局组件、指令、插件等。以下将详细介绍 Vue 3 的主要全局 API,并结合详细的案例代码进行说明。每个案例代码都包含中文注释,帮助初学者更好地理解…

UE5多人MOBA+GAS 41、制作一个飞弹,添加准心索敌

文章目录添加新角色(不写了)创建一个发射技能创建一个飞弹类添加击中特效添加准星UI获取瞄准目标添加新角色(不写了) 将原本的机器人蓝图改为BP_PlayerCharacter,以此创建子蓝图 创建动画蓝图模板(具体就…

解决渲染抖动与滚动锚点定位不准确问题的方法与经验分享

场景描述:React 虚拟列表(Virtualized List)是当我们在处理大列表时,为了提升性能而采用的一种技术。然而在实现过程中,可能会遇到渲染抖动问题以及滚动锚点定位不准确的问题。  解决方案:React虚拟列表实…