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

【重学 MySQL】四十五、数据库的创建、修改与删除

【重学 MySQL】四十五、数据库的创建、修改与删除

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

在这里插入图片描述
在 MySQL 中,数据库(也称为 schema)是用于存储和组织数据的一种逻辑结构。数据库的创建、修改和删除是数据库管理的基本操作。

一条数据存储的过程

在数据库系统中,一条数据存储的过程通常涉及多个步骤,从数据的输入到其在数据库中的持久化存储。

数据输入

首先,用户或应用程序需要将数据输入到系统中。这可以通过多种方式实现,例如:

  • 用户界面(UI):用户通过图形界面(如网页表单、桌面应用程序窗口等)输入数据。
  • 应用程序接口(API):外部应用程序通过调用API将数据发送到数据库系统。
  • 批量导入:使用文件(如CSV、Excel等)批量导入数据。

数据验证

在数据被存储之前,通常需要进行验证以确保其准确性和完整性。这包括:

  • 数据类型检查:确保数据符合预期的格式和类型(如字符串、数字、日期等)。
  • 约束检查:验证数据是否满足数据库表定义的约束条件(如主键唯一性、外键关联、非空约束等)。
  • 业务逻辑验证:根据应用程序的业务逻辑检查数据的有效性(如年龄必须在0到120岁之间)。

数据处理

如果数据通过了验证,接下来可能需要进行一些处理,例如:

  • 数据转换:将数据转换为适合存储的格式(如日期格式转换、数据编码转换等)。
  • 数据清洗:去除或纠正数据中的错误、重复或不一致。
  • 数据标准化:将数据转换为统一的标准格式。

数据存储

处理后的数据将被存储到数据库中。这通常涉及以下步骤:

  • 数据库连接:建立与数据库的连接(如使用数据库驱动程序或ORM框架)。
  • SQL语句生成:根据要存储的数据生成相应的SQL语句(如INSERT、UPDATE等)。
  • 执行SQL语句:将SQL语句发送到数据库服务器执行。
  • 事务管理:确保数据存储操作的原子性、一致性、隔离性和持久性(ACID特性)。

数据持久化

一旦数据被成功存储到数据库中,它将被持久化,即即使数据库系统崩溃或重启,数据也不会丢失(假设使用了适当的备份和恢复策略)。

反馈与日志

最后,系统通常会向用户或应用程序提供反馈,表明数据存储操作的成功或失败。此外,还会记录相关的日志信息,以便进行审计、调试和故障排除。

注意事项

  • 安全性:在数据存储过程中,必须确保数据的安全性,包括防止未经授权的访问、篡改和泄露。
  • 性能:为了提高数据存储的效率,可以采取一些优化措施,如索引的使用、批量插入等。
  • 一致性:确保数据存储后与应用程序的其他部分保持一致,避免数据不一致导致的错误或冲突。

综上所述,数据存储是一个复杂而关键的过程,涉及多个步骤和考虑因素。通过仔细规划和实施这些步骤,可以确保数据的准确性、完整性和安全性。

标识符命名规则

MySQL中的标识符用于标识数据库、表、列等对象的名称。

基本规则

  1. 字符组成:标识符可以由字母(a-z、A-Z)、数字(0-9)、下划线(_)和美元符号($)组成。
  2. 首字符:标识符的第一个字符必须是字母或下划线,不能是数字。
  3. 大小写敏感性:MySQL对标识符的大小写敏感性取决于具体的存储引擎和操作系统。但在大多数情况下,MySQL在Windows系统上对标识符不区分大小写,而在Linux系统上则区分大小写。为了避免混淆,建议统一使用小写字母

长度限制

  • 数据库名、表名不得超过30个字符
  • 变量名不得超过29个字符

保留字与特殊字符

  1. 保留字:MySQL保留了一些关键字作为内部命令或函数的名称。当使用这些保留字作为标识符时,需要使用反引号(`)将其括起来,以避免冲突。
  2. 特殊字符:除了字母、数字、下划线和美元符号外,其他特殊字符通常不允许出现在标识符中。如果需要使用特殊字符,可以考虑使用反引号将其括起来(但请注意,这并不是一种推荐的做法,因为它可能会降低代码的可读性)。

命名建议

  1. 简洁明了:标识符应该简洁明了,能够清晰地表达出对象的含义。避免使用过长或含糊不清的名称。
  2. 避免保留字:尽量避免使用MySQL的保留字作为标识符,以减少潜在的冲突和混淆。
  3. 一致性:在命名时保持一致性,例如使用相同的命名风格(如驼峰命名法、下划线分隔法等)来命名数据库、表和列等对象。

示例

以下是一些符合MySQL标识符命名规则的示例:

  • 正确的表名:userorder_itemscustomer_details
  • 正确的列名:idnameemailbirth_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非常小的BLOBBLOB数据
BLOB小BLOBBLOB数据
MEDIUMBLOB中等大小的BLOBBLOB数据
LONGBLOB大的BLOBBLOB数据
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 不提供直接修改数据库名称的语句。但是,你可以通过以下步骤间接地修改数据库名称:

  1. 创建一个新的数据库。
  2. 将旧数据库中的所有表和数据复制到新数据库中。
  3. 删除旧数据库(可选)。

修改数据库的字符集和排序规则

你可以使用 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;

注意事项

  1. 权限:创建、修改和删除数据库需要相应的权限。通常,这些操作只能由具有管理员权限的用户(如 root 用户)执行。
  2. 数据备份:在删除数据库之前,确保已经备份了重要数据。删除数据库是不可逆的操作,数据将无法恢复。
  3. 数据库名称:数据库名称在 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)例子 概述 进程、线程和协程是计算机科学中的基本概念,它们在操作系统和并发编程中扮演着重要角色。以…...

蓝桥杯 2024 15届国赛 A组 儿童节快乐

P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡,轻快的音乐在耳边持续回荡,小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下,六一来了。 今天是六一儿童节,小蓝老师为了让大家在节…...

高频面试之3Zookeeper

高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个?3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制(过半机制&#xff0…...

c++ 面试题(1)-----深度优先搜索(DFS)实现

操作系统:ubuntu22.04 IDE:Visual Studio Code 编程语言:C11 题目描述 地上有一个 m 行 n 列的方格,从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子,但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

Matlab | matlab常用命令总结

常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

【Java学习笔记】BigInteger 和 BigDecimal 类

BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点:传参类型必须是类对象 一、BigInteger 1. 作用:适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...

【分享】推荐一些办公小工具

1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由:大部分的转换软件需要收费,要么功能不齐全,而开会员又用不了几次浪费钱,借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...

Python Einops库:深度学习中的张量操作革命

Einops(爱因斯坦操作库)就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库,用类似自然语言的表达式替代了晦涩的API调用,彻底改变了深度学习工程…...

android13 app的触摸问题定位分析流程

一、知识点 一般来说,触摸问题都是app层面出问题,我们可以在ViewRootImpl.java添加log的方式定位;如果是touchableRegion的计算问题,就会相对比较麻烦了,需要通过adb shell dumpsys input > input.log指令,且通过打印堆栈的方式,逐步定位问题,并找到修改方案。 问题…...

MinIO Docker 部署:仅开放一个端口

MinIO Docker 部署:仅开放一个端口 在实际的服务器部署中,出于安全和管理的考虑,我们可能只能开放一个端口。MinIO 是一个高性能的对象存储服务,支持 Docker 部署,但默认情况下它需要两个端口:一个是 API 端口(用于存储和访问数据),另一个是控制台端口(用于管理界面…...

Qt 事件处理中 return 的深入解析

Qt 事件处理中 return 的深入解析 在 Qt 事件处理中,return 语句的使用是另一个关键概念,它与 event->accept()/event->ignore() 密切相关但作用不同。让我们详细分析一下它们之间的关系和工作原理。 核心区别:不同层级的事件处理 方…...