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

MySQL 使用方法以及教程

一、引言

MySQL是一个流行的开源关系型数据库管理系统(RDBMS),广泛应用于Web开发、数据分析等领域。它提供了高效、稳定的数据存储和查询功能。同时,Python作为一种强大的编程语言,也提供了多种与MySQL交互的库,其中pymysql就是其中之一。本文将介绍MySQL数据库的基础使用,并通过Python的pymysql库进行实际操作。

二、MySQL数据库基础

注意

文章中前面的MySQL部分特意使用了MySQL服务器自带的名为mysql的系统数据库,这个数据库用于存储与MySQL服务器自身操作和维护相关的元数据(metadata)和系统表。比如里面有个user表,这个表存储了MySQL的用户账号信息,包括用户名、密码、主机地址、权限等。其他的几个表由于配置MySQL一般不用,这里我就不解释了,可以自行上网查找资料了解一下。

1.安装MySQL

  • 在Linux系统中,可以通过包管理器(如apt、yum)进行安装。命令行输入:sudo apt install mysql-server和sudo apt install mysql-client。
  • 在Windows系统中,可以访问MySQL官网下载并安装MySQL安装包。或者用我网盘里的资源。链接:https://pan.baidu.com/s/1lO_XBxy9FOsvSis6zpPY8A?pwd=5as7 
    提取码:5as7

2.连接到MySQL

在命令行中输入mysql -u 用户名 -p,然后输入密码连接到MySQL。成功连接后,将看到MySQL的命令行提示符。一般都是root用户,直接输入mysql -u root -p回车然后输入密码就行了。Ubuntu上和Windows都是这样。

3.退出数据库

在mysql>提示符下输入quit或者exit就可以退出MySQL交互操作界面。

4.显示当前服务器版本

使用SELECT VERSION();命令可以查看当前MySQL服务器的版本信息。

5.显示当前时间

使用SELECT NOW();命令可以查看当前的日期和时间。

6.显示当前用户

使用SELECT USER();命令可以查看当前连接的MySQL用户。


7.显示所有数据库名称

使用SHOW DATABASES;命令可以列出MySQL服务器上的所有数据库。

8.使用数据库

使用USE my_db;命令可以选择一个数据库作为当前操作的数据库,其中my_db是数据库的名称。

9.创建数据库和表

创建数据库和表的语句就是sql语句中的CREATE DATABASECREATE TABLE,不熟悉的可以去我前两篇文章看一下。这里要说的是在MySQL里要想创建表,需要先选中一个数据库,选择数据库就是上面说的USE语句,比如use mydb就选择了MySQL里的mydb数据库,然后就可以在这个数据库创建表了。

10.显示当前数据库所有表

在选择了数据库之后,可以使用SHOW TABLES;命令列出该数据库中的所有表。

11.查看数据库字符集编码

使用SHOW CREATE DATABASE my_db;命令可以查看指定数据库的创建语句,从而得知数据库的字符集编码等信息。

12.查看数据表创建语句

使用SHOW CREATE TABLE my_tb;命令可以查看指定表的创建语句,包括表的字段、索引等信息。

13.查看数据表字段信息

使用SHOW COLUMNS FROM my_tb;或者describe my_tb;命令可以查看指定表的字段信息,包括字段名、数据类型、是否允许为空等。

14.查看警告信息

在某些情况下,MySQL会返回警告信息而不是错误。使用SHOW WARNINGS;命令可以查看这些警告信息。

三、Python中使用pymysql库操作MySQL

1.安装pymysql库

在Python中,我们可以使用pymysql库来执行上述的MySQL命令。首先,需要安装pymysql库,可以使用pip命令进行安装:

pip install pymysql

2.连接到MySQL数据库

使用pymysql库的connect()方法连接到MySQL数据库,并指定主机名、用户名、密码、数据库名等参数。或者使用pymysql库的Connection()对象来连接数据库,代码如下:

import pymysql# 使用connect方法
# 创建连接
connection = pymysql.connect(host='localhost',port=3306,user='root',password='123456',database='py_sql',charset='utf8mb4'  # 使用utf8mb4字符集支持全字符集
)# 使用Connection对象
conn = pymysql.Connection(host="localhost",port=3306,user="root",password="123456",
)
# 参数是通用的,这里没有指定连接的database后面也可以用conn.select_db("py_sql")来选择要操作的数据库

3.执行SQL语句

使用游标对象的execute()方法执行SQL语句。

cursor = conn.cursor()    # 获取游标对象
cursor.execute("select * from student")  # 执行sql语句

4.获取查询结果

对于查询语句,可以使用游标对象的fetchone()fetchall()方法获取查询结果。

注意:这两个方法是有类似于指针的效果的,当你使用 fetchone() 方法时,它会从结果集的当前位置获取一条记录,并将内部的位置指针向后移动一位。如果你之后调用 fetchall(),它将从当前位置开始获取所有剩余的记录。

比如我现在数据库student表里有6条数据,分别为

(1, '小明', 31, '男')
(2, '小红', 33, '女')
(3, '小黑', 35, '男')
(4, '小王', 31, '男')
(5, '小米', 37, '女')
(6, '小哈', 32, '女')

我现在执行了一句sql语句select * from student,当我调用了一次fetchone()语句之后,打印这个结果是(1, '小明', 31, '男'),当我再调用fetchall()语句的时候,打印的结果为(2, '小红', 33, '女'),(3, '小黑', 35, '男'),(4, '小王', 31, '男'),(5, '小米', 37, '女'),(6, '小哈', 32, '女')。

两者的区别:

  • fetchone() 方法用于从查询结果中获取单条记录。这个方法在处理大量数据时特别有用,因为它允许你逐条处理记录,而不是一次性加载所有记录到内存中。
  • fetchall() 方法用于获取查询结果中的所有剩余记录。使用 fetchall() 时需要小心,因为如果查询结果很大,它会消耗大量内存来存储所有记录。不过在处理小量数据或确保结果集不会过大的情况下,使用 fetchall() 可以更方便地一次性获取所有数据。
result: tuple = cursor.fetchone()
print(result)
results: tuple = cursor.fetchall()
print(results)

5.关闭游标和连接

在操作完成后,使用close()方法关闭游标和连接,释放资源。

# 关闭游标对象
cursor.close()
# 关闭数据库的链接
conn.close()

6.代码汇总

import pymysql# 创建连接
connection = pymysql.connect(host='localhost',port=3306,user='root',password='123456',database='py_sql',charset='utf8mb4'  # 使用utf8mb4字符集支持全字符集
)
try:with connection.cursor() as cursor:# 执行SQL命令,例如查看当前时间# cursor.execute("SELECT NOW();")# 显示当前服务器版本cursor.execute("SELECT VERSION();")result = cursor.fetchone()print("当前时间:", result[0])
finally:connection.close()  # 关闭连接

相关文章:

MySQL 使用方法以及教程

一、引言 MySQL是一个流行的开源关系型数据库管理系统(RDBMS),广泛应用于Web开发、数据分析等领域。它提供了高效、稳定的数据存储和查询功能。同时,Python作为一种强大的编程语言,也提供了多种与MySQL交互的库&#…...

算法学习笔记——二进制

二进制 负数的十进制转二进制数(-2 -> 1110): 正数 - 1,再取反,得到负数的二进制。 例如:-2 :0010 -> 0010 - 1 -> 0001 -> 取反 -> 1110 负数的二进制转十进制(…...

计算机网络介绍

计算机网络介绍 概述网络概述相关硬件 链路层VLAN概念VLAN 特点VLAN 的划分帧格式端口类型原理 STP概念特点原理 Smart Link概念特点组网 网络层ARP概念原理 IP概念版本IP 地址 IPv4IP 地址数据报格式 IPv6特点IP 地址数据报格式 ICMP概念分类报文格式 VRRP概念原理报文格式 OS…...

解锁数据宝藏:高效查找算法揭秘

代码下载链接:https://gitee.com/flying-wolf-loves-learning/data-structure.git 目录 一、查找的原理 1.1 查找概念 1.2 查找方法 1.3平均查找长度 1.4顺序表的查找 1.5 顺序表的查找算法及分析 1.6 折半查找算法及分析 1.7 分块查找算法及分析 1.8 总结…...

利用EasyCVR视频智能监控技术,构建智慧化考场监管体系

随着科技的进步,视频监控在各个领域的应用越来越广泛,其中在考场中的应用尤为显著。视频监控不仅能够提高考场的监管水平,确保考试的公平、公正和公开,还能有效预防和打击作弊行为,为考生营造一个良好的考试环境。 传…...

深度解析:速卖通618风控下自养号测评的技术要点

速卖通每年的618大促活动平台的风控都会做升级,那相对的测评技术也需要进行相应的做升级,速卖通618风控升级后,自养号测评需要注意以下技术问题,以确保测评 的稳定性和安全性: 一、物理环境 1. 硬件参数伪装&#x…...

国产算力——沐曦GPU性能及应用

沐曦集成电路(上海)有限公司(简称“沐曦”)成立于2020年9月,专注于为异构计算提供全栈GPU芯片及解决方案,满足数据中心对“高性能”、“高能效”及“高通用性”的算力需求。 产品系列 沐曦构建了全栈高性…...

贪心算法拓展(反悔贪心)

相信大家对贪心算法已经见怪不怪了,但是一旦我们的决策条件会随着我们的步骤变化,我们该怎么办呢?有没有什么方法可以反悔呢? 今天就来讲可以后悔的贪心算法,反悔贪心。 https://www.luogu.com.cn/problem/CF865Dhttp…...

在spring框架的基础上自定义autowired注解

在Spring框架的基础上自定义Autowired注解是不可能的,因为注解本身是Java语言的一部分,并且Autowired是Spring框架提供的注解,用于实现自动装配。但是,你可以创建自己的注解,并结合Spring框架的扩展机制来实现类似的功…...

2005NOIP普及组真题 3. 采药

线上OJ: [05NOIP普及组] 采药 核心思想: 1、题与 2006 年普及组第2题《开心的金明》一样,考察的都是01背包。 2、直接套用01背包的一阶模板即可 a、限定时间看成背包总容量m b、每件物品的采药时间 v 看成占用背包的体积 c、每件物品的价格w作为该物品的…...

preventDefault()与stopPropagation()有什么区别?

1、event.preventDefault()方法 (1)可防止元素的默认行为 (2)如果在表单元素中使用,它将阻止其提交 (3)如果在锚元素中使用,它将阻止其导航 (4)如果在上下…...

AIGC 全面介绍

随着人工智能技术的不断进步,生成式人工智能(AI Generated Content, AIGC)成为了一个日益热门的话题。AIGC 指利用人工智能技术生成各类内容,包括文本、图像、音频、视频等。与传统的内容生成方法相比,AIGC 具有速度快…...

网站入门:Flask用法讲解

Flask是一个使用Python编写的轻量级Web服务框架,旨在帮助开发人员快速构建和部署Web应用程序。下面将对Flask进行更为详细的解释说明,并展示其使用示例与注意事项: 1.解释说明 定义及特点: Flask以其简洁和灵活著称,允许开发者以…...

头歌数据库备份与恢复

第1关:数据库的备份和恢复 mysql -uroot -p123123 -h127.0.0.1 < /data/workspace/myshixun/src/data.sqlmysqldump -u root -p studb student> /student_bk.sqlmysql -uroot -p123123 -h127.0.0.1 -e "create database studb2;"mysql -u root -p123123 studb…...

小程序项目创建与Vant-UI引入

一&#xff0c;创建小程序项目 AppID可先用测试号&#xff1b; 模板来源选择 ’全部来源‘ &#xff0c;’基础‘ 。模板一定JS开头的&#xff1b; vant-weapp 官网 vant-Weapp 二&#xff0c;下载vant-weapp 组件 1&#xff0c;在新项目中打开 ’调试器‘&#xff1b; 2…...

xtrabackup 使用

官网 Percona XtraBackup Use APT repositories - Percona XtraBackup 一 安装 下载 wget https://repo.percona.com/apt/percona-release_latest.$(lsb_release -sc)_all.deb wget https://repo.percona.com/apt/percona-release_latest.zesty_all.deb 可下载列表 Perc…...

C++写一个简单的计算器程序案例

1. 编写C源代码 创建一个名为 advanced_calculator.cpp 的文件&#xff0c;并编写以下代码&#xff1a; // advanced_calculator.cpp #include <iostream> #include <limits>int main() {char operatorChoice;bool keepRunning true;while (keepRunning) {int nu…...

Spring Boot 开发 -- swagger3.0 集成

前言 随着微服务架构的普及和API数量的增长&#xff0c;API文档的管理和维护变得尤为重要。Swagger作为一款强大的API文档生成工具&#xff0c;能够帮助我们自动生成API文档&#xff0c;并提供在线测试功能&#xff0c;极大地提高了开发效率。本文将介绍如何在Spring Boot项目…...

探索安全之道 | 企业漏洞管理:从理念到行动

如今&#xff0c;网络安全已经成为了企业管理中不可或缺的一部分&#xff0c;而漏洞管理则是网络安全的重中之重。那么企业应该如何做好漏洞管理呢&#xff1f;不妨从业界标准到企业实践来一探究竟&#xff01;通过对业界标准的深入了解&#xff0c;企业可以建立起完善的漏洞管…...

【记录贴:分布式系列文章】

分布式系列文章目录 文章目录 分布式系列文章目录前言一、Redisq1.怎么判断是否命中缓存1. MySQL数据库如何检查询查缓存是否命中链接2.如何判断redis是否命中缓存链接 q2.Redis缓存穿透、雪崩、击穿以及分布式锁和本地锁 二、分布式q1.分布式订单号生成策略q2.接口幂等性,防止…...

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)

说明&#xff1a; 想象一下&#xff0c;你正在用eNSP搭建一个虚拟的网络世界&#xff0c;里面有虚拟的路由器、交换机、电脑&#xff08;PC&#xff09;等等。这些设备都在你的电脑里面“运行”&#xff0c;它们之间可以互相通信&#xff0c;就像一个封闭的小王国。 但是&#…...

业务系统对接大模型的基础方案:架构设计与关键步骤

业务系统对接大模型&#xff1a;架构设计与关键步骤 在当今数字化转型的浪潮中&#xff0c;大语言模型&#xff08;LLM&#xff09;已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中&#xff0c;不仅可以优化用户体验&#xff0c;还能为业务决策提供…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻

在如今就业市场竞争日益激烈的背景下&#xff0c;越来越多的求职者将目光投向了日本及中日双语岗位。但是&#xff0c;一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧&#xff1f;面对生疏的日语交流环境&#xff0c;即便提前恶补了…...

Java 语言特性(面试系列2)

一、SQL 基础 1. 复杂查询 &#xff08;1&#xff09;连接查询&#xff08;JOIN&#xff09; 内连接&#xff08;INNER JOIN&#xff09;&#xff1a;返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...

练习(含atoi的模拟实现,自定义类型等练习)

一、结构体大小的计算及位段 &#xff08;结构体大小计算及位段 详解请看&#xff1a;自定义类型&#xff1a;结构体进阶-CSDN博客&#xff09; 1.在32位系统环境&#xff0c;编译选项为4字节对齐&#xff0c;那么sizeof(A)和sizeof(B)是多少&#xff1f; #pragma pack(4)st…...

Java如何权衡是使用无序的数组还是有序的数组

在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...

12.找到字符串中所有字母异位词

&#x1f9e0; 题目解析 题目描述&#xff1a; 给定两个字符串 s 和 p&#xff0c;找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义&#xff1a; 若两个字符串包含的字符种类和出现次数完全相同&#xff0c;顺序无所谓&#xff0c;则互为…...

C++ 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战

在现代战争中&#xff0c;电磁频谱已成为继陆、海、空、天之后的 “第五维战场”&#xff0c;雷达作为电磁频谱领域的关键装备&#xff0c;其干扰与抗干扰能力的较量&#xff0c;直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器&#xff0c;凭借数字射…...