走进MySQL:从认识到入门(针对初学者)

news2025/5/26 8:27:59

一,引言

       MySQL是一款久负盛名且广泛应用的关系型数据库管理系统,自1995年Michael Widenius和David Axmark在瑞典和芬兰发起研发以来,其发展历程可谓辉煌且深远。作为开源软件的代表,MySQL以其卓越的成本效益、高性能及高可靠性赢得了全球范围内的大量企业和开发者青睐。在2008年,MySQL AB被Sun Microsystems收购,后又随着Sun并入Oracle麾下,进一步巩固了其在数据库市场的重要地位。

二,MySQL 的主要特点和优势

MySQL之所以备受推崇,主要原因在于:

  1. 成本优势:作为开源软件,MySQL提供免费使用和修改的权利,大大降低了企业及个人用户的初期投入和运维成本。

  2. 性能高效:MySQL经过长期迭代优化,执行速度快,能有效应对大数据量和高并发场景,满足各类应用程序的数据处理需求。

  3. 高度可靠:诸多知名大公司和高流量网站均选择MySQL作为其核心数据管理工具,足见其在处理关键业务数据方面的稳定性和可靠性。

  4. 易用性强:MySQL安装配置便捷,界面友好,适合各层次的开发者快速上手,并提供了丰富的文档和支持资源。

 三,Mysql的架构

       尽管早期MySQL曾因功能相对有限受到一定批评,但随着时间推移,MySQL不断推出的新版本持续增强了其功能特性,逐步缩小与其他高级DBMS的差距。

       从架构分类上看,DBMS可分为共享文件系统和客户机-服务器两种模式。其中,MySQL属于后者,这类系统适用于大型项目和关键任务环境。在客户机-服务器架构中,MySQL服务器软件负责所有数据的访问和处理,运行在专用的数据库服务器上,确保数据安全和高效操作。而客户端软件则充当用户与服务器之间的交互接口,无论是MySQL自带的工具,还是诸如Perl、ASP、ColdFusion、JSP、PHP等脚本或编程语言,都可以作为客户端向MySQL服务器发送查询请求、获取处理结果。

      这种结构的优势在于,用户无需直接接触底层数据文件,所有的数据访问、处理过程都被封装在服务器端进行,从而实现数据的安全隔离和高效利用。因此,要使用MySQL,用户需具备对运行MySQL服务器软件的计算机的访问权限,并通过合适的客户端工具或编程语言与其进行交互,实现数据的增删改查等各种操作。

四,如何安装Mysql5.7

      MySQL是一种流行的关系型数据库管理系统,适用于各种应用场景。以下将介绍如何在CentOS系统上安装MySQL 5.7,并进行简单的配置。

步骤一:关闭防火墙

确保系统安全性设置不会阻碍MySQL服务的安装和运行。首先,关闭并禁用防火墙:

sudo systemctl stop firewalld
sudo systemctl disable firewalld

如果不想关闭防火墙则可以参考以下配置:

直接放行开放3306端口命令(生产环境使用)
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --reload

步骤二:临时关闭 SELinux

为了简化安装过程,临时关闭SELinux:

sudo sed -i 's/enforcing/disabled/g' /etc/selinux/config
sudo setenforce 0

步骤三:清理可能存在的Mariadb配置

避免与MySQL产生冲突,清理可能存在的Mariadb配置:

sudo rpm -e --nodeps $(rpm -qa | grep mariadb)

步骤四:下载并安装MySQL软件仓库

下载并安装MySQL社区版的RPM软件仓库:

wget http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm    

sudo yum -y install mysql57-community-release-el7-11.noarch.rpm

步骤五:导入MySQL的GPG公钥

导入MySQL的GPG公钥以验证软件包完整性:

wget https://repo.mysql.com/RPM-GPG-KEY-mysql-2022 --no-check-certificate

sudo rpm --import  RPM-GPG-KEY-mysql-2022

步骤六:安装MySQL服务器

借助已安装的仓库,安装MySQL服务器:

sudo yum -y install mysql-server

步骤七:启动MySQL服务并检查状态

启动MySQL服务并检查其运行状态:

sudo systemctl start mysqld.service

sudo systemctl status mysqld.service

步骤八:提取临时密码并重设root密码

提取MySQL生成的临时密码,并使用该密码登录MySQL进行初始化配置:

temp_password=$(grep 'temporary password' /var/log/mysqld.log | awk '{print $NF}')

mysql --connect-expired-password -u root -p"$temp_password" <<- EOF ALTER USER 'root'@'localhost' IDENTIFIED BY 'Huawei@123'; SET PASSWORD FOR 'root'@'localhost' = PASSWORD('Huawei@123'); GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'Huawei@123' WITH GRANT OPTION; EOF

上面这段命令是用来在 MySQL 数据库中进行一系列的操作。首先,它连接到 MySQL 数据库,并使用之前提取的临时密码作为认证信息。然后,它执行以下操作:

  1. 修改 root 用户的密码为 'Huawei@123',以确保安全性和访问权限。
  2. 授予 root 用户对所有数据库的所有权限,并且允许 root 用户将权限授予其他用户。

至此,MySQL 5.7 已在 CentOS 系统上成功安装并完成了初步配置。您现在可以使用新的 root 密码登录并管理MySQL数据库了。

五,Mysql的基本操作

       每个MySQL安装都有一个名为mysql 的简单命令行实用程序。这 个实用程序没有下拉菜单、流行的用户界面、鼠标支持或任何类似的东西。接下来让我们一个有趣的例子来学习一下Mysql的基本操作吧

步骤一,登录Mysql

通过root账户接入到数据库,默认的端口是3306

[root@mysql ~]# mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 5.7.19 MySQL Community Server (GPL)

Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

mysql 命令行实用程序是使用最多的实用程序之一,它对于快速测试和执行脚本非常有价 值。

步骤二,创建数据库和表

首先,我们创建一个名为 company 的数据库,并在其中创建一个 employees 表。数据库是用来存储数据的容器,而表是数据库中组织数据的方式。

CREATE DATABASE IF NOT EXISTS company;
USE company;

CREATE TABLE IF NOT EXISTS employees (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    department VARCHAR(100) NOT NULL,
    position VARCHAR(100),
    salary DECIMAL(10, 2)
);

  • CREATE DATABASE IF NOT EXISTS company;:创建一个名为 company 的数据库。IF NOT EXISTS 部分表示如果数据库已经存在,则不再创建。
  • USE company;:选择使用 company 数据库。
  • CREATE TABLE IF NOT EXISTS employees (...);:创建一个名为 employees 的表。IF NOT EXISTS 部分表示如果表已经存在,则不再创建。表中定义了 idnamedepartmentpositionsalary 五个字段。

    步骤三,插入数据

 然后,我们向 employees 表中插入一些示例数据。这些数据包含了员工的姓名、部门、职位和薪水信息。

INSERT INTO employees (name, department, position, salary) VALUES
('John Doe', 'IT', 'Software Engineer', 60000.00),
('Jane Smith', 'HR', 'HR Manager', 70000.00),
('Michael Johnson', 'Finance', 'Accountant', 55000.00),
('Emily Davis', 'Marketing', 'Marketing Specialist', 65000.00);

  • INSERT INTO employees ...:将数据插入到 employees 表中。
  • VALUES (...), (...), ...:指定要插入的值。每个括号内部表示一条要插入的数据记录。

 步骤四,查询数据 

我们可以查询 employees 表中的所有员工信息。

SELECT * FROM employees;

  • SELECT * FROM employees;:从 employees 表中选择所有列的数据。* 表示所有列。

步骤五,更新数据

假设 John Doe 被提升为 IT 部门的经理,我们需要更新他的职位信息。

UPDATE employees SET position = 'IT Manager' WHERE name = 'John Doe';

  • UPDATE employees ...:更新 employees 表中的数据。
  • SET position = 'IT Manager':设置 position 字段的值为 'IT Manager'
  • WHERE name = 'John Doe':指定更新条件,只更新姓名为 'John Doe' 的员工的数据。

 步骤六,删除数据

假设 Emily Davis 离职了,我们可以从 employees 表中删除她的信息。

DELETE FROM employees WHERE name = 'Emily Davis';

  • DELETE FROM employees ...:从 employees 表中删除数据。
  • WHERE name = 'Emily Davis':指定删除条件,只删除姓名为 'Emily Davis' 的员工的数据。

步骤七,查询与筛选

让我们查询所有薪水大于 60000 的员工。

SELECT * FROM employees WHERE salary > 60000;

  • SELECT * FROM employees ...:从 employees 表中选择所有列的数据。
  • WHERE salary > 60000:指定条件,只选择薪水大于 60000 的员工。

 步骤八,排序与限制数据

让我们按照薪水降序标题二排列并显示前两名员工。

SELECT * FROM employees ORDER BY salary DESC LIMIT 2;

  • ORDER BY salary DESC:按照薪水降序排列结果。
  • LIMIT 2:限制结果只显示前两条记录。

 步骤九,统计数据

让我们统计每个部门的员工数量。

SELECT department, COUNT(*) AS total_employees FROM employees GROUP BY department;

  • SELECT department, COUNT(*) AS total_employees ...:从 employees 表中选择部门和员工数量,并对部门进行分组统计。COUNT(*) 统计每个部门的员工数量。

步骤十, 数据分组与聚合

让我们统计每个部门的平均薪水。

SELECT department, AVG(salary) AS average_salary FROM employees GROUP BY department;
  • AVG(salary) AS average_salary:计算每个部门的平均薪水,并将结果命名为 average_salary
  • GROUP BY department:按照部门进行分组,以便对每个部门进行统计。

步骤十一,数据删除与批量操作 

假设 Lisa Taylor 和 David Lee 都离职了,让我们删除他们的信息。

DELETE FROM employees WHERE name IN ('Lisa Taylor', 'David Lee');

  • DELETE FROM employees ...:从 employees 表中删除数据。
  • WHERE name IN ('Lisa Taylor', 'David Lee'):指定删除条件,删除姓名为 'Lisa Taylor' 或 'David Lee' 的员工的数据。

通过以上操作,我们完成了一个完整的案例,涵盖了数据库的创建、表的设计、数据的插入、查询、更新、删除、条件筛选、排序、统计、多表查询、数据联合等多种操作。这样的案例展示了 MySQL 数据库的丰富功能和灵活性。 

六,结论

         综上所述,MySQL凭借其开源、低成本、高性能、高度可靠和易于使用的特性,在全球范围内吸引了无数开发者和企业的关注。通过详细的安装步骤和基本操作示例,初学者不仅能够成功在CentOS系统上部署MySQL 5.7,还能够在实践中掌握数据库创建、数据操作、查询分析等一系列基础技能。

      然而,MySQL的强大之处远不止于此。随着对MySQL更深入的探索,你会发现它在数据安全、事务处理、性能调优、集群部署等方面同样表现出色。对于初学者来说,这只是迈向数据库技术殿堂的第一步。未来,你可以通过学习更复杂的SQL查询、索引策略、存储过程、触发器等功能,进一步提升数据库管理水平,并将其应用到实际项目开发与运维工作中。

      在此鼓励每一位初学者积极拓展知识领域,熟悉MySQL的更多高级特性,并结合实际需求灵活运用。同时,时刻关注MySQL社区的最新动态和技术更新,紧跟数据库技术发展的步伐,不断提升自身的技术实力和竞争力。希望本文提供的入门指南能够为你的MySQL学习之旅打开一扇窗,引领你在数据管理的世界里自信前行,创造出更多的价值与可能。

OK,今天的分享就到这里啦,我们下期见^_^,需要获取镜像包,也可以私聊博主哦

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

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

相关文章

【数据结构与算法】:二叉树经典OJ

目录 1. 二叉树的前序遍历 (中&#xff0c;后序类似)2. 二叉树的最大深度3. 平衡二叉树4. 二叉树遍历 1. 二叉树的前序遍历 (中&#xff0c;后序类似) 这道题的意思是对二叉树进行前序遍历&#xff0c;把每个结点的值都存入一个数组中&#xff0c;并且返回这个数组。 思路&…

c++11 标准模板(STL)本地化库 - 平面类别(std::codecvt) - 在字符编码间转换,包括 UTF-8、UTF-16、UTF-32 (四)

本地化库 本地环境设施包含字符分类和字符串校对、数值、货币及日期/时间格式化和分析&#xff0c;以及消息取得的国际化支持。本地环境设置控制流 I/O 、正则表达式库和 C 标准库的其他组件的行为。 平面类别 在字符编码间转换&#xff0c;包括 UTF-8、UTF-16、UTF-32 std::…

ReactRouter

React-Router 概念&#xff1a;一个路劲path对应一个组件component 当我们在浏览器中访问一个path的时候&#xff0c;path对应的组件会在页面中进行渲染路由语法&#xff1a; import {createBrowserRouter, RouterProvider} from react-router-dom// 1. 创建router实例对象并…

【数据结构】习题之链表的回文结构和相交链表

&#x1f451;个人主页&#xff1a;啊Q闻 &#x1f387;收录专栏&#xff1a;《数据结构》 &#x1f389;前路漫漫亦灿灿 前言 今日的习题是关于链表的&#xff0c;分别是链表的回文结构和相交链表的判断。 链表的回文结构 题目为&#xff1a;链表的回文结…

RUM 最佳实践-交互延迟的探索与发现

FID 在互联网高速发展的时代&#xff0c;用户体验已成为企业竞争的关键所在。网页性能作为用户体验的重要组成部分&#xff0c;直接影响着用户的满意度和工作效率。First Input Delay&#xff08;FID&#xff09;作为衡量网页性能的重要指标&#xff0c;越来越受到业界关注。今…

【RV1106的ISP使用记录之二】设备树的构建

基于MIPI接口的两种摄像头接入方式&#xff0c;理清楚各链路关系&#xff0c;方便后续的开发调试工作&#xff0c;先上一张图&#xff0c;后面再补充解释。

一起学习python——基础篇(20)

前言&#xff0c;之前经常从网上找一些免费的接口来测试&#xff0c;有点受制于人的感觉。想了想还不如直接写一个接口&#xff0c;这样方便自己测试。自己想返回什么格式就返回什么样子&#xff0c;不用担心服务报错&#xff0c;因为自己就可以完全掌控。然后宿舍二哥告诉我py…

帝国cms仿《鳄鱼下载站》网站源码

仿《鳄鱼下载站》网站源码手机安卓软件网站模版 PHP网站源码 帝国cms内核 采用帝国cms7.5 环境PHPmysql 恢复数据库后如何修改密码: 双击表&#xff0c;进入对应的详细数据表&#xff0c;然后找到&#xff1a;www_96kaifa_com_enewsuser这个表&#xff0c;双击打开修改&…

Command开源AI的未来

在AI的浩瀚宇宙中&#xff0c;有一个新星正在闪耀——Command R。这个开源的大型语言模型不仅在技术排行榜上名列前茅&#xff0c;更以其开放性和高性能赢得了全球开发者的关注和喜爱。 开源精神的胜利 Command R是由CohereAI推出的一款开源大语言模型&#xff0c;拥有1040亿…

mysql题目4

tj11&#xff1a; select count(*) 员工总人数 from tb_dept a join tb_employee b on a.deptnob.deptno where a.dname 市场部

openGauss 之min/max 优化代码走读

一. 前言 在openGuass中&#xff0c;如果对索引列执行max/min操作,openGauss会优化成只读取索引的最前/后的一行数据&#xff0c;避免了对整表数据进行读取和聚合操作&#xff0c;如下所示&#xff1a; 二. min/max优化代码走读 1. 首先需要将min/max 算子转成成执行计划中降序…

逐步学习Go-sync.RWMutex(读写锁)-深入理解与实战

概述 在并发编程中&#xff0c;我们经常会遇到多个线程或协程访问共享资源的情况。为了保护这些资源不被同时修改&#xff0c;我们会用到"锁"的概念。 Go中提供了读写锁&#xff1a;sync.RWMutex。 sync.RWMutex是Go语言提供的一个基础同步原语&#xff0c;它是Rea…

Python | Leetcode Python题解之第26题删除有序数组中的重复项

题目&#xff1a; 题解&#xff1a; class Solution:def removeDuplicates(self, nums: List[int]) -> int:if not nums:return 0n len(nums)fast slow 1while fast < n:if nums[fast] ! nums[fast - 1]:nums[slow] nums[fast]slow 1fast 1return slow

内存函数memcpy、mommove、memset、memcmp

目录 1、memcpy函数 memcpy函数的模拟实现 2、memmove函数 memmove函数的模拟实现 3、memset函数 4、memcmp函数 1、memcpy函数 描述&#xff1a; C 库函数 void *memcpy(void *str1, const void *str2, size_t n) 从存储区 str2 复制 n 个字节到存储区 str1。 声明&…

UnityShader学习计划

1.安装ShaderlabVS,vs的语法提示 2. 常规颜色是fixed 3.FrameDebugger调试查看draw的某一帧的全部信息&#xff0c;能看到变量参数的值

基于博客系统的功能测试和性能测试

目录 项目介绍 项目功能 设计测试用例 功能测试--自动化测试 测试代码 登录测试 博客详情页测试 发布博客测试 删除博客测试 退出账号测试 性能测试 项目介绍 1.博客系统采用前后端分离的方法来实现&#xff0c;同时使用了数据库来存储相关的数据&#xff0c;同时将…

Vue - 5( 16000 字 Vue2 入门级教程)

一&#xff1a;Vue 初阶 1.1 组件自定义事件 在 Vue 中&#xff0c;组件间通过自定义事件进行通信是一种常见的模式。自定义事件允许子组件向父组件发送消息&#xff0c;也可以在组件内部进行事件的绑定、触发和解绑。让我们详细讲解这些知识点。 1.1.1 组件自定义事件 在 …

CSS核心样式-02-盒模型属性及扩展应用

目录 三、盒模型属性 常见盒模型区域 盒模型图 盒模型五大属性 1. 宽度 width 2. 高度 height 3. 内边距 padding 四值法 三值法 二值法 单值法 案例 4. 边框 border 按照属性值的类型划分为三个单一属性 ①线宽 border-width ②线型 border-style ③边框颜色 bo…

开源项目one-api的k8s容器化部署(下)-- 部署至k8s

一、接着上文 本文讲述如何把上文制作好的docker镜像部署到K8S&#xff0c;会涉及以下部分&#xff1a; 健康检测应用程序的配置应用程序的端口日志路径 二、健康检测 1、健康状态 从官方的docker-compose.yml可以得知其健康检测方法 curl http://localhost:5175/api/statu…

正则表达式:特殊序列(五)

正则表达式中的特殊序列包括&#xff1a;1. \d&#xff1a;匹配任意数字字符&#xff0c;等同于[0-9]。2. \D&#xff1a;匹配任意非数字字符&#xff0c;等同于[^0-9]。3. \w&#xff1a;匹配任意字母、数字或下划线字符&#xff0c;等同于[A-Za-z0-9_]。4. \W&#xff1a;匹配…