【重学 MySQL】四十五、数据库的创建、修改与删除
【重学 MySQL】四十五、数据库的创建、修改与删除
- 一条数据存储的过程
- 数据输入
- 数据验证
- 数据处理
- 数据存储
- 数据持久化
- 反馈与日志
- 注意事项
- 标识符命名规则
- 基本规则
- 长度限制
- 保留字与特殊字符
- 命名建议
- 示例
- MySQL 中的数据类型
- 创建数据库
- 创建数据库时指定字符集和排序规则
- 查看数据库
- 修改数据库
- 修改数据库的字符集和排序规则
- 删除数据库
- 注意事项
- 总结

在 MySQL 中,数据库(也称为 schema)是用于存储和组织数据的一种逻辑结构。数据库的创建、修改和删除是数据库管理的基本操作。
一条数据存储的过程
在数据库系统中,一条数据存储的过程通常涉及多个步骤,从数据的输入到其在数据库中的持久化存储。
数据输入
首先,用户或应用程序需要将数据输入到系统中。这可以通过多种方式实现,例如:
- 用户界面(UI):用户通过图形界面(如网页表单、桌面应用程序窗口等)输入数据。
- 应用程序接口(API):外部应用程序通过调用API将数据发送到数据库系统。
- 批量导入:使用文件(如CSV、Excel等)批量导入数据。
数据验证
在数据被存储之前,通常需要进行验证以确保其准确性和完整性。这包括:
- 数据类型检查:确保数据符合预期的格式和类型(如字符串、数字、日期等)。
- 约束检查:验证数据是否满足数据库表定义的约束条件(如主键唯一性、外键关联、非空约束等)。
- 业务逻辑验证:根据应用程序的业务逻辑检查数据的有效性(如年龄必须在0到120岁之间)。
数据处理
如果数据通过了验证,接下来可能需要进行一些处理,例如:
- 数据转换:将数据转换为适合存储的格式(如日期格式转换、数据编码转换等)。
- 数据清洗:去除或纠正数据中的错误、重复或不一致。
- 数据标准化:将数据转换为统一的标准格式。
数据存储
处理后的数据将被存储到数据库中。这通常涉及以下步骤:
- 数据库连接:建立与数据库的连接(如使用数据库驱动程序或ORM框架)。
- SQL语句生成:根据要存储的数据生成相应的SQL语句(如INSERT、UPDATE等)。
- 执行SQL语句:将SQL语句发送到数据库服务器执行。
- 事务管理:确保数据存储操作的原子性、一致性、隔离性和持久性(ACID特性)。
数据持久化
一旦数据被成功存储到数据库中,它将被持久化,即即使数据库系统崩溃或重启,数据也不会丢失(假设使用了适当的备份和恢复策略)。
反馈与日志
最后,系统通常会向用户或应用程序提供反馈,表明数据存储操作的成功或失败。此外,还会记录相关的日志信息,以便进行审计、调试和故障排除。
注意事项
- 安全性:在数据存储过程中,必须确保数据的安全性,包括防止未经授权的访问、篡改和泄露。
- 性能:为了提高数据存储的效率,可以采取一些优化措施,如索引的使用、批量插入等。
- 一致性:确保数据存储后与应用程序的其他部分保持一致,避免数据不一致导致的错误或冲突。
综上所述,数据存储是一个复杂而关键的过程,涉及多个步骤和考虑因素。通过仔细规划和实施这些步骤,可以确保数据的准确性、完整性和安全性。
标识符命名规则
MySQL中的标识符用于标识数据库、表、列等对象的名称。
基本规则
- 字符组成:标识符可以由字母(a-z、A-Z)、数字(0-9)、下划线(_)和美元符号($)组成。
- 首字符:标识符的第一个字符必须是字母或下划线,不能是数字。
- 大小写敏感性:MySQL对标识符的大小写敏感性取决于具体的存储引擎和操作系统。但在大多数情况下,MySQL在Windows系统上对标识符不区分大小写,而在Linux系统上则区分大小写。为了避免混淆,建议统一使用小写字母。
长度限制
- 数据库名、表名不得超过30个字符
- 变量名不得超过29个字符
保留字与特殊字符
- 保留字:MySQL保留了一些关键字作为内部命令或函数的名称。当使用这些保留字作为标识符时,需要使用反引号(`)将其括起来,以避免冲突。
- 特殊字符:除了字母、数字、下划线和美元符号外,其他特殊字符通常不允许出现在标识符中。如果需要使用特殊字符,可以考虑使用反引号将其括起来(但请注意,这并不是一种推荐的做法,因为它可能会降低代码的可读性)。
命名建议
- 简洁明了:标识符应该简洁明了,能够清晰地表达出对象的含义。避免使用过长或含糊不清的名称。
- 避免保留字:尽量避免使用MySQL的保留字作为标识符,以减少潜在的冲突和混淆。
- 一致性:在命名时保持一致性,例如使用相同的命名风格(如驼峰命名法、下划线分隔法等)来命名数据库、表和列等对象。
示例
以下是一些符合MySQL标识符命名规则的示例:
- 正确的表名:
user、order_items、customer_details - 正确的列名:
id、name、email、birth_date - 使用反引号括起来的保留字作为标识符:
SELECT(注意:这里只是为了演示,实际上不建议这样做)
请注意,虽然MySQL允许在必要时使用反引号来避免与保留字的冲突,但过度使用反引号可能会降低代码的可读性和可维护性。因此,在命名时应尽量避免使用保留字,并遵循MySQL的标识符命名规则。
MySQL 中的数据类型
在MySQL中,数据类型用于指定表中列可以存储数据的种类。MySQL支持多种数据类型,包括数值类型、日期和时间类型以及字符串(文本)。
| 数据类型 | 描述 | 示例 |
|---|---|---|
| 数值类型 | ||
| TINYINT | 非常小的整数 | 127, -128(有符号);0~255, 0~-1(无符号) |
| SMALLINT | 小的整数 | 32,767, -32,768(有符号);0~65,535, 0~-1(无符号) |
| MEDIUMINT | 中等大小的整数 | 8,388,607, -8,388,608(有符号);0~16,777,215, 0~-1(无符号) |
| INT(或INTEGER) | 标准整数 | 2,147,483,647, -2,147,483,648(有符号);0~4,294,967,295, 0~-1(无符号) |
| BIGINT | 大的整数 | 9,223,372,036,854,775,807, -9,223,372,036,854,775,808(有符号);0~18,446,744,073,709,551,615, 0~-1(无符号) |
| FLOAT | 单精度浮点数 | 3.14159 |
| DOUBLE | 双精度浮点数 | 3.141592653589793 |
| DECIMAL | 定点数,用于存储精确的小数 | 123.456 |
| 日期和时间类型 | ||
| DATE | 日期值 | ‘2023-10-01’ |
| TIME | 时间值 | ‘12:34:56’ |
| DATETIME | 日期和时间值 | ‘2023-10-01 12:34:56’ |
| TIMESTAMP | 时间戳,通常用于记录行的创建或更新时间 | CURRENT_TIMESTAMP |
| YEAR | 年份值 | 2023 |
| 字符串(文本)类型 | ||
| CHAR | 定长字符串 | ‘hello’ |
| VARCHAR | 可变长字符串 | ‘hello’ |
| TINYTEXT | 非常小的文本字符串 | ‘This is a tiny text.’ |
| TEXT | 小文本字符串 | ‘This is a text.’ |
| MEDIUMTEXT | 中等大小的文本字符串 | ‘This is a medium text.’ |
| LONGTEXT | 大的文本字符串 | ‘This is a very long text.’ |
| ENUM | 枚举类型,允许你指定一个值的集合 | ENUM(‘small’, ‘medium’, ‘large’) |
| SET | 集合类型,允许你指定一个字符串对象的集合 | SET(‘apple’, ‘banana’, ‘cherry’) |
| BINARY | 二进制字符串 | b’010101’ |
| VARBINARY | 可变长的二进制字符串 | b’010101’ |
| TINYBLOB | 非常小的BLOB | BLOB数据 |
| BLOB | 小BLOB | BLOB数据 |
| MEDIUMBLOB | 中等大小的BLOB | BLOB数据 |
| LONGBLOB | 大的BLOB | BLOB数据 |
| JSON | 用于存储JSON格式的数据 | ‘{“name”: “John”, “age”: 30}’ |
请注意,上述表格中的示例数据仅用于说明数据类型,实际存储的数据将取决于列的定义和插入的数据值。此外,MySQL还允许在定义数据类型时指定额外的属性,如字符集、排序规则、是否允许为空以及默认值等。
创建数据库
要创建一个新的数据库,可以使用 CREATE DATABASE 语句。基本语法如下:
CREATE DATABASE [IF NOT EXISTS] database_name;
示例:
CREATE DATABASE IF NOT EXISTS my_database;
创建数据库时指定字符集和排序规则
你也可以在创建数据库时指定字符集和排序规则。例如:
CREATE DATABASE my_database
CHARACTER SET utf8mb4
COLLATE utf8mb4_general_ci;
查看数据库
要查看当前服务器上的所有数据库,可以使用 SHOW DATABASES 语句:
SHOW DATABASES;
修改数据库
MySQL 不提供直接修改数据库名称的语句。但是,你可以通过以下步骤间接地修改数据库名称:
- 创建一个新的数据库。
- 将旧数据库中的所有表和数据复制到新数据库中。
- 删除旧数据库(可选)。
修改数据库的字符集和排序规则
你可以使用 ALTER DATABASE 语句来修改数据库的字符集和排序规则:
ALTER DATABASE database_name
CHARACTER SET new_character_set
COLLATE new_collation;
示例:
ALTER DATABASE my_database
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
删除数据库
要删除一个数据库,可以使用 DROP DATABASE 语句。删除数据库将永久删除该数据库中的所有表和数据。基本语法如下:
DROP DATABASE [IF EXISTS] database_name;
示例:
DROP DATABASE IF EXISTS my_database;
注意事项
- 权限:创建、修改和删除数据库需要相应的权限。通常,这些操作只能由具有管理员权限的用户(如
root用户)执行。 - 数据备份:在删除数据库之前,确保已经备份了重要数据。删除数据库是不可逆的操作,数据将无法恢复。
- 数据库名称:数据库名称在 MySQL 服务器上必须是唯一的,并且符合命名规则(例如,不能使用保留字)。
总结
- 使用
CREATE DATABASE语句创建数据库。 - 使用
SHOW DATABASES语句查看所有数据库。 - 使用
ALTER DATABASE语句修改数据库的字符集和排序规则(但无法直接修改数据库名称)。 - 使用
DROP DATABASE语句删除数据库。
相关文章:
【重学 MySQL】四十五、数据库的创建、修改与删除
【重学 MySQL】四十五、数据库的创建、修改与删除 一条数据存储的过程数据输入数据验证数据处理数据存储数据持久化反馈与日志注意事项 标识符命名规则基本规则长度限制保留字与特殊字符命名建议示例 MySQL 中的数据类型创建数据库创建数据库时指定字符集和排序规则 查看数据库…...
STM32驱动直流电机
stm32通过PWM控制直流电机的方向和速度。 小直流电机需要几百毫安的电流,单片机只能提供几毫安的电流。电机内线圈转动时切割磁感线以及电机内转子线圈的电感效应都会产生反电动势,损坏芯片。 电机驱动芯片能够作为STM32驱动电机的帮手。 SLEEP暂停工作…...
【C++】二叉搜索树+变身 = AVL树
🚀个人主页:小羊 🚀所属专栏:C 很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~ 目录 前言一、AVL树二、AVL树的实现2.1 平衡因子2.2 旋转处理2.2.1 左单旋:插入新节点后单纯的右边高2.2.2 …...
Flutter String 按 ,。分割
在 Flutter 中,如果你想将一个字符串按特定的字符(例如中文逗号 , 和英文句号 .)进行分割,可以使用 Dart 语言的字符串处理功能。具体来说,你可以使用 split 方法,并传入一个正则表达式来匹配这…...
Redis: 集群高可用之MOVED转向和ASK转向解决方案
MOVED转向 1 ) 问题描述 在客户端操作Redis集群的时候 MOVED转向 或 MOVED错误是经常遇到的一类问题我们先连入集群:$ /usr/local/redis/bin/redis-cli -a 123456 -h 192.168.10.101 -p 6371之前在Redis中存储过一些数据,比如下面的情况,当输…...
idea插件市场安装没反应
https://plugins.jetbrains.com/idea重启后还是不行那就...
数据结构之排序(5)
摘要:本文主要讲各种排序算法,注意它们的时间复杂度 概念 将各元素按关键字递增或递减排序顺序重新排列 评价指标 稳定性: 关键字相同的元素经过排序后相对顺序是否会改变 时间复杂度、空间复杂度 分类 内部排序——数据都在内存中 外部排序——…...
R包的安装、加载以及如何查看帮助文档
0x01 如何安装R包 一、通过R 内置函数安装(常用) 1.安装CRAN的R包 install.packages()是一个用于安装 R 包的重要函数。 语法:install.packages(pkgs, repos getOption("repos"),...) 其中: pkgs:要安…...
【YOLO学习】YOLOv3详解
文章目录 1. 网络结构1.1 结构介绍1.2 改进 2. 训练与测试过程3. 总结 1. 网络结构 1.1 结构介绍 1. 与 YOLOv2 不同的是,YOLOv3 在 Darknet-19 里加入了 ResNet 残差连接,改进之后的模型叫 Darknet-53。在 ImageNet上 实验发现 Darknet-53 相对于 ResN…...
JDK1.0主要特性
JDK 1.0,也被称为Java 1,是Java编程语言的第一个正式版本,由Sun Microsystems公司在1996年发布。JDK 1.0的发布标志着Java作为一种编程语言和平台的正式诞生,它带来了许多创新的概念和特性,对后来的软件开发产生了深远…...
CSS基础-盒子模型(三)
9、CSS盒子模型 9.1 CSS常用长度单位 1、px:像素; 2、em:相对元素font-size的倍数; 3、rem:相对根字体的大小,html标签即是根; 4、%:相对于父元素进行计算。 注意:CSS样…...
深度学习中的损失函数详解
深度学习中的损失函数详解 文章目录 深度学习中的损失函数详解损失函数的基础概念常见的损失函数类型及应用场景回归问题的损失函数分类问题的损失函数自定义损失函数 如何选择合适的损失函数?损失函数在深度学习中的应用 在深度学习的世界中,损失函数&a…...
系统架构设计师-下午案例题(2022年下半年)
1.试题-(共25分):阅读以下关于软件架构设计与评估的叙述在答题纸上回答问题1和问题2。 【说明】某电子商务公司拟升级其会员与促销管理系统,向用户提供个性化服务,提高用户的粘性。在项目立项之初,公司领导层一致认为本次升级的主要目标是提…...
高级图片编辑器Photopea
什么是 Photopea ? Photopea 是一款免费的在线工具,用于编辑光栅和矢量图形,支持PSD、AI 和 Sketch文件。 功能上,Photopea 和 老苏之前介绍的 miniPaint 比较像 文章传送门:在线图片编辑器miniPaint 支持的格式 复杂…...
详解zookeeper四字命令
ZooKeeper 的四字命令(Four-Letter Words, 4LW)是一组简单的管理和监控命令,方便运维人员快速获取 ZooKeeper 集群和节点的运行状态。这些命令通常用于健康检查、性能监控、节点配置查看等操作。通过这些命令,可以轻松获取关于 Zo…...
docker 进入容器运行命令
要进入正在运行的Docker容器并在其中执行命令,你可以使用docker exec命令。以下是具体步骤和示例: 1. 查看正在运行的容器 首先,确认你的容器正在运行,可以使用以下命令查看所有运行中的容器: docker ps2. 进入容器…...
一行 Python 代码能实现什么丧心病狂的功能?圣诞树源代码
手头有 109 张头部 CT 的断层扫描图片,我打算用这些图片尝试头部的三维重建。基础工作之一,就是要把这些图片数据读出来,组织成一个三维的数据结构(实际上是四维的,因为每个像素有 RGBA 四个通道)。 这个…...
mit6824-01-MapReduce详解
文章目录 MapReduce简述编程模型执行流程执行流程排序保证Combiner函数Master数据结构 容错性Worker故障Master故障 性能提升定制分区函数局部性执行缓慢的worker(slow workers) 常见问题总结回顾参考链接 MapReduce简述 MapReduce是一个在多台机器上并行计算大规模数据的软件架…...
在Docker中运行微服务注册中心Eureka
1、Docker简介: 作为开发者,经常遇到一个头大的问题:“在我机器上能运行”。而将SpringCloud微服务运行在Docker容器中,避免了因环境差异带来的兼容性问题,能够有效的解决此类问题。 通过Docker,开发者可…...
白话进程>线程>协程
文章目录 概述进程线程协程区别与联系 举个栗子进程例子线程例子协程例子区别与联系的具体体现 代码示例进程例子线程例子协程(Goroutine)例子 概述 进程、线程和协程是计算机科学中的基本概念,它们在操作系统和并发编程中扮演着重要角色。以…...
MOOTDX:Python通达信数据接口的完整指南
MOOTDX:Python通达信数据接口的完整指南 【免费下载链接】mootdx 通达信数据读取的一个简便使用封装 项目地址: https://gitcode.com/GitHub_Trending/mo/mootdx MOOTDX是一个专为量化投资和股票数据分析设计的Python通达信数据接口封装库,它提供…...
保姆级教程:在IMX6ULL开发板上手把手实现红外遥控器驱动(基于NEC协议与Linux 5.x内核)
从零构建IMX6ULL红外遥控驱动:NEC协议全解析与Linux 5.x实战指南 当你想在嵌入式设备上实现红外遥控功能时,NEC协议驱动的开发往往是第一个需要攻克的堡垒。本文将带你深入理解红外通信原理,并手把手完成从硬件连接到驱动测试的全流程。不同于…...
Oto 核心架构深度解析:Context 与 Player 的设计哲学
Oto 核心架构深度解析:Context 与 Player 的设计哲学 【免费下载链接】oto ♪ A low-level library to play sound on multiple platforms ♪ 项目地址: https://gitcode.com/gh_mirrors/ot/oto Oto 是一个跨平台的低级音频播放库,其核心架构围绕…...
现有基准任务(如操纵、导航)是否足够
在人工智能与机器人技术飞速迭代的今天,基准任务作为衡量模型与系统能力的核心标尺,贯穿于技术研发、性能评估与落地应用的全流程。操纵、导航作为两类最基础、最核心的基准任务,长期以来支撑着机器人、具身智能等领域的进步,成为…...
手把手教你学Simulink--电动物流车预充电路控制及主继电器粘连检测电机负载仿真
目录 手把手教你学Simulink--电动物流车预充电路控制及主继电器粘连检测电机负载仿真 摘要 Abstract 1. 引言 1.1 电动物流车发展背景 1.2 研究目的与意义 1.3 研究方法与内容 2. 文献综述 2.1 电动物流车预充电路研究现状 2.2 主继电器粘连检测技术进展 2.3 Simulin…...
全栈AI应用开发框架Flappy:从智能体到生产级Web应用的快速构建指南
1. 项目概述:从“Flappy”到“Pleisto”的AI应用构建新范式最近在AI应用开发圈子里,一个名为“pleisto/flappy”的项目开始引起不少人的注意。乍一看这个名字,你可能会联想到那个经典的像素小鸟游戏,但此“Flappy”非彼“Flappy”…...
RakkasJS深度解析:基于Bun的全栈React框架性能与迁移实践
1. 项目概述:下一代全栈React框架的探索如果你和我一样,在过去几年里深度使用过Next.js、Remix或者SvelteKit这类全栈框架,那你肯定对它们带来的开发体验又爱又恨。爱的是它们统一了前后端,让全栈开发变得前所未有的顺畅ÿ…...
自托管MCP服务器模板:快速构建AI智能体私有工具箱
1. 项目概述:一个为AI智能体赋能的“工具箱”模板最近在折腾AI智能体(Agent)开发的朋友,可能都听说过MCP(Model Context Protocol)这个概念。简单来说,MCP就像是为AI大模型准备的一套标准化的“…...
工业多串口通信实战:基于EM9170的8串口方案设计与优化
1. 项目概述:为什么8串口在今天依然重要?在物联网、工业自动化、智能楼宇这些领域里摸爬滚打久了,你会发现一个有趣的现象:那些看似“古老”的通信接口,生命力往往比我们想象的要顽强得多。串口,或者说RS-2…...
Pixelle-Video完整指南:如何用AI在3分钟内创建专业短视频
Pixelle-Video完整指南:如何用AI在3分钟内创建专业短视频 【免费下载链接】Pixelle-Video 🚀 AI 全自动短视频引擎 | AI Fully Automated Short Video Engine 项目地址: https://gitcode.com/GitHub_Trending/pi/Pixelle-Video 在当今内容爆炸的时…...
