一篇文章打好SQL基础,熟悉数据库的基础操作和方法,以及安装MySQL软件包和Python操作MySQL基础使用
1.SQL的概述
SQL的全称:Structured Query Language,结构化查询语言,用于访问和处理数据库的标准计算机语言。
SQL语言1974年有Boyce和Chamberlin提出的,并且首先在IBM公司研制的关系数据库系统SystemR上实现。
经过多年发展,SQL已经成为数据库领域同意的数据操作标准语言,可以说几乎市面上所有的数据库系统都支持使用SQL语言来操作。
SQL语言的分类:
由于数据库管理系统(数据库软件)功能非常多,不仅仅是存储数据,还要包括数据的管理、表的管理、库的管理、账户管理、权限管理等等。
所以基于操作数据库的SQL语言,也基于此功能划分为四类:
-
数据定义:DDL(Data Definition Language)
库的创建删除、表的创建删除等
-
数据操控:DML(Data Manipulation Language)
新增数据、删除数据、修改数据等
-
数据控制:DCL(Data Control Language)
新增用户、删除用户、密码修改、权限管理等
-
数据查询:DQL(Data Query Language)
基于需求查询和计算数据
SQL的语法特征:
在学习DDL、DQL等之前,我们先来了解SQL的语法特征。
-
SQL语言,大小写不敏感
-
SQL可以单行或多行书写,最后以;号结束
-
SQL支持注释:
-
单行注释:--注释内容 (-- 后面一定要有一个空格)
-
单行注释:# 注释内容 (#后面可以不加空格,推荐加上)
-
多行注释:/* 注释内容 */
show -- 这是第一种注释方法 # 这是第二种注释方法 /* 多行注释 * */ databases;
2.SQL的DDL
DDL是指数据定义语言,用来对数据库中库表建立删除定义的。
创建库:
# 查看数据库 SHOW DATABASES # 使用数据库 USE 数据库名称: # 创建数据库 CREATE DATABASE数据库名称[CHARSET UTF8]: # 删除数据库 DROP DATABASE数据库名称; # 查看当前使用的数据库 SELECT DATABASE();
创建表和删除表:
# 查看有哪些表 SHOW TABLES; # 注意要先选择数据库 # 创建表 create table 表名称(列名称 列类型,列名称 列类型,…… ); drop table 表名称; drop table if exists 表名称; drop table where 条件判断;
列类型:
-- 列类型: int -- 整数 float -- 浮点数 varchar(长度) -- 文本,长度为数字,做最大长度限制 date -- 日期类型 timestamp -- 时间戳类型
3.SQL的DML
DML是指数据操作语言,用来对数据库中表的数据记录进行更新。
关键字:
-
插入INSERT
-
删除DELETE
-
更新UPDATE
基础语法:
insert into 表(列1,列2,列3,列4,……,列N) values(值1,值2,值3,……,值N)[(值1,值2,值3,……,值N),……,(值1,值2,值3,……,值N)]
示例:
create table student(id int,name varchart(20),age int ); # 仅插入id数据 insert into student(id) values(1000),(1002),(1003); # 插入全部id列数据 insert into student(id, name, age) values(1001, '张三', 20),(1002, '李四', 19),(1003, '王五', 21); # 插入全部列数据,快捷写法 insert into student values(1001, '张三', 20),(1002, '李四', 19),(1003, '王五', 21);
数据删除DELETE:
基础语法:
DELETE FROM 表名称 WHERE 条件判断 条件判断:列 操作符 值 操作符:= < > <= >= != 等 如: id = 5 id < 3 id >= 6 id != 5
演示案例:
CREATE TABLE student(id int,name varchar(10),age int
);
INSERT INTO student(id) values(1), (2), (3);
/** 等价于下面的代码* INSERT INTO student(id) values(1);* INSERT INTO student(id) values(2);* INSERT INTO student(id) values(3);
*/
insert into student(id, name, age) values(4, '张三', 31),(5, '李四',33);
delete from student where age = 33;
4.SQL的DQL
1.基础查询
基础语法:SELECT 字段列表|* FROM表
含义就是:从(FROM)表中,选择(SELECT)某些列进行展示
代码演示:
select id, name from student; select * from student; select * from student where age > 20; select * from student where id = '张三';
2.分组聚合
分组聚合应用场景,如:统计班级中男生和女生的人数。
这种需求就需要:
-
按性别分组
-
统计各组的人数
这就称之为:分组聚合。
基础语法:
select 字段|聚合函数 from 表 [where 条件] group by 列 聚合函数: sum(列) 求和 avg(列) 求平均值 min(列) 求最小值 max(列) 求最大值 count(列|*) 求数量
示例:
select gender, avg(age), sum(age), min(age), max(age), count(avg) from student group by gender;
3.排序分页
结果排序:
可以对查询结果,使用order by关键字,指定某个列进行排序,语法:
select 列|聚合函数|* from 表 where …… group by …… order by …… [ASC | DESC]
示例:
select * from student where age > 20 order by age asc; select * from student where age > 20 order by age desc;
结果分页限制:
同样,可以使用limit关键字,对查询结果进行数量限制或分页显示,语法:
select 列|聚合函数|* from 表 where …… group by …… order by …… [asc | desc] limit n[, m]
示例:
select * from student limit 10; # 取10条信息 select * from student limit 10, 5; # 从第11条开始往后取5条 select * from student where age > 20 group by age order by age limit 3;
5.Python操作MySQL基础使用
1.基础使用
pymysql
除了使用图像化工具以外,我们也可以使用编程编程语言来执行SQL从而操作数据库。
在Python中,使用第三方库:pymysql来完成对MySQL数据库的操作。
安装:pip install pymysql
but,一开始,在我的命令提示符里面怎么都下不下来,这时候按照notice里面的To update run后面的绿色的代码,粘贴到下面来进行操作:

或者使用下列的方式:
pip install pymysql -i http://pypi.douban.com/simple/ --trusted-host [pypi.douban.com](http://pypi.douban.com/)

创建到MySQL的数据库链接
代码如下:
from pymysql import Connection
# 获取到MySQL数据库的连接对象
conn = Connection(host='localhost', # 主机名(或者IP地址)port=3306, # 端口,默认3306user='root', # 账户名password='123456' # 密码
)
# 打开MySQL数据库软件信息
print(conn.get_server_info())
# 关闭到数据库的链接
conn.close()
或者输入如下的代码:
import pymysql
db = pymysql.connect(host="localhost",port=3306,user='root', #在这里输入用户名password='qazwsxedc.2345', #在这里输入密码charset='utf8mb4') #连接数据库
cursor = db.cursor() #创建游标对象
sql = 'show databases' #sql语句
cursor.execute(sql) #执行sql语句
one = cursor.fetchone() #获取一条数据
print('one:',one)
many = cursor.fetchmany(3) #获取指定条数的数据,不写默认为1
print('many:',many)
all = cursor.fetchall() #获取全部数据
print('all:',all)
cursor.close()
db.close() #关闭数据库的连接
出现上图界面就说明pymysql成功将pycharm和mysql连接起来了。
执行查询性质的SQL语句:
from pymysql import Connection
# 获取到MySQL数据库的连接对象
conn = Connection(host='localhost',port=3306,user='root',password='2345'
)
# 获取游标对象
cursor = conn.cursor()
conn.select_db("world")
# 使用游标对象,执行sql语句
cursor.execute("SELECT * FROM student")
# 获取查询结果
results = cursor.fetchall()
for r in results:print(r)
# 关闭到数据库的链接
conn.close()
2.数据插入
commit提交
pymysql在执行数据插入或其它产生数据更改的SQL语句时,默认是需要提交更改的,即,需要通过代码“确认”这种更改行为。
通过链接对象.commit()即可确认此行为。
from pymysql import Connection
# 获取到MySQL数据库的连接对象
conn = Connection(host='localhost',port=3306,user='root',password='2345'
)
# 获取游标对象
cursor = conn.cursor()
conn.select_db("world")
# 使用游标对象,执行sql语句
cursor.execute("insert into student values(10001, '唐七', 19)")
# 关闭到数据库的链接
conn.close()
6.综合案例
使用SQL语句和pymysql库完成综合案例的开发
DDL定义:
本次需求开发我们需要新建一个数据库来使用,数据库名称:py_sql
基于数据结构,可以得到建表语句:
CREATE TABLE order(order_date DATE,order_id, VARCHAR(255),money INT,province VARCHAR(10) );
实现步骤:
读取数据 -> 封装数据对象 -> 构建数据库链接 -> 写入数据库
import ..
text_file_reader = TextFileReader("D:/2011年1月销售数据.txt")
json_file_reader = JsonFileReader("0:/2011年2月销售数据JS0N.txt")
jan_data:list[Record] = text_file_reader.read_data()
feb_data:list[Record] = json_file_reader.read_data()
# 将2个月份的数据合并list来存储
all_data:list[Record] = jan_data + feb_data# 构建MySQL链接对象
cursor = conn.cursor()
conn.select_db("py_sql")
# 组织SQL语句
for record in all_data:sql = f"insert into orders(order_data, order_id, money, province)" f"values('{record.date}','{record.order_id)'{record.noney},'{record.province}')"print(sql)cursor.excute(sql)
conn.close()
相关文章:
一篇文章打好SQL基础,熟悉数据库的基础操作和方法,以及安装MySQL软件包和Python操作MySQL基础使用
1.SQL的概述 SQL的全称:Structured Query Language,结构化查询语言,用于访问和处理数据库的标准计算机语言。 SQL语言1974年有Boyce和Chamberlin提出的,并且首先在IBM公司研制的关系数据库系统SystemR上实现。 经过多年发展&am…...
C4D R26 渲染学习笔记 建模篇(3):生成器
文章目录 前文回顾介绍篇建模篇 生成器介绍生成器变形器搭配举例 生成器详细介绍细分曲面布料曲面 未完待续 前文回顾 介绍篇 C4D R26 渲染学习笔记(1):C4D版本选择和初始UI框介绍 C4D R26 渲染学习笔记(2)ÿ…...
智慧梁场3D建模
智慧梁场3D建模:数字化革命下的新起点 随着科技的迅猛发展,数字化已经成为了现代工业生产的必然趋势。作为传统工业的核心产业,建筑行业也在不断地探索数字化变革的新路径。而“智慧梁场3D建模”便是其中的一项杰出实践。 梁场是建筑…...
《程序员面试金典(第6版)》面试题 02.08. 环路检测(哈希法,双指针,检测链表是否有环)
题目描述 给定一个链表,如果它是有环链表,实现一个算法返回环路的开头节点。若环不存在,请返回 null。 题目传送门:面试题 02.08. 环路检测 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链…...
软考A计划-试题模拟含答案解析-卷六
点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例 👉关于作者 专注于Android/Unity和各种游戏开发技巧,以及各种资源分享&am…...
Linux 上的 .NET 崩溃了怎么抓 Dump
一:背景 1. 讲故事 训练营中有朋友问在 Linux 上如何抓 crash dump,在我的系列文章中演示的大多是在 Windows 平台上,这也没办法要跟着市场走,谁让 .NET 的主战场在工控 和 医疗 呢,上一张在 合肥 分享时的一个统计图…...
QT桌面项目(状态栏和导航栏设置)
文章目录 前言一、状态栏二、导航栏三、同时添加状态栏和导航栏总结 前言 为了和我们这个项目做的更加真实,这里为我们的项目添加上状态栏和导航栏让他变成更加接近手机的桌面效果。 一、状态栏 这个状态栏就是显示时间和wifi状态,电池电量的…...
数据链路层:点对点协议PPP
数据链路层:点对点协议PPP 笔记来源: 湖科大教书匠:点对点协议PPP 声明:该学习笔记来自湖科大教书匠,笔记仅做学习参考 数据链路层只负责直接相连的两个结点之间的通信 PPP是点对点数据链路层协议 用户通过ISP接入因特…...
C/C++读取txt文件中的float数据并用指针存储
C语言中读取txt文件中的数据 以下是一个简单的示例代码,演示如何在C语言中读取txt文件中的数据: #include <stdio.h>int main() {FILE *fp;char buffer[100];// 打开文件fp fopen("example.txt", "r");// 如果文件打开失败…...
对KMP算法的一点碎碎念——上篇
对KMP算法的一点碎碎念——上篇 文章目录 对KMP算法的一点碎碎念——上篇1. KMP 算法 Next数组 求解问题1.1 前置知识-最长公共前后缀LCP1.1.1 前缀与后缀1.1.2 最长公共前后缀LCP 1.2 手算法求解 Next数组值(3种常见情况)1.2.1 情况1: next数组 正常存放匹配字符的长度情况1的…...
算法---边界着色
题目 给你一个大小为 m x n 的整数矩阵 grid ,表示一个网格。另给你三个整数 row、col 和 color 。网格中的每个值表示该位置处的网格块的颜色。 两个网格块属于同一 连通分量 需满足下述全部条件: 两个网格块颜色相同 在上、下、左、右任意一个方向上…...
二叉排序树的查找、插入、删除
目录 二叉排序树的定义 二叉排序树的查找 二叉排序树的插入 二叉排序树的定义 二叉排序树的定义 二叉排序树(Binary Sort Tree, BST),也称二叉查找树。 二叉排序树或者是一棵空树,或者是一棵具有下列特性的非空二叉…...
《Opencv3编程入门》学习笔记—第三章
《Opencv3编程入门》学习笔记 记录一下在学习《Opencv3编程入门》这本书时遇到的问题或重要的知识点。 第三章 HighGUI图形用户界面初步 一、图像的载入、显示和输出到文件 (一)OpenCV的命名空间 简单的OpenCV程序标配: #include <o…...
如何从Ubuntu Linux中删除Firefox Snap?
Ubuntu Linux是一款广受欢迎的开源操作系统,拥有强大的功能和广泛的应用程序选择。默认情况下,Ubuntu提供了一种称为Snap的软件打包格式,用于安装和管理应用程序。Firefox是一款流行的开源网络浏览器,而Firefox Snap是Firefox的Sn…...
数学建模的初阶-快速上手
目录 第一步:明确问题 第二步:选择建模方法 第三步:收集数据 第四步:构建数学模型 第五步:模型验证与评估 数学建模软件推荐 统计模型 (1) 线性回归模型 (2) 逻辑回归模型 (3) 时间序列模型 优化模型 (1) …...
复习向 C/C++ 编程语言简介和概括(C++复习向p1)
文章目录 C 编程语言C 和 C 关系标准的 C 组成ANSI 标准比较重要的标准化时间 C 编程语言 是一种静态类型的、编译式的、通用式的、大小写敏感、不规则的编程语言支持过程化编程,面向对象,泛型编程 C 和 C 关系 C 是 C 的一个超集,任何合法…...
DRF之过滤,排序,分页
一、权限组件源码解读 1.继承了APIView 才有的---》执行流程---》dispatch中----》三大认证 APIView的dispatch def initial(self, request, *args, **kwargs):self.perform_authentication(request)self.check_permissions(request)self.check_throttles(request) 2 读…...
我的Redis学习,共写了14篇博客文章
早在19和20年全面学习SpringBoot相关技术知识时也曾经有学习到Redis,主要是看了几家的视频教程,但是未曾有具体的实践,后来再学习到Docker和Spring Session框架的Redis存储时,又稍微的实践了一丢丢,所有的实践也就仅此…...
mPython软件使用指南
①软件界面 一、软件界面的介绍 1.模式切换 硬件编程 Python3.6 Jupyter python3.6模式细节补充(一般不使用该模式,此处可跳过) Python3.6模式的界面 左侧指令分类栏 Python3.6模式的图形化指令分类分为: Python语法基础相关指令&…...
龙芯2K1000实战开发-系统配置详解
目录 概要 整体架构流程 技术名词解释 技术细节 编辑 总结...
label-studio的使用教程(导入本地路径)
文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...
利用ngx_stream_return_module构建简易 TCP/UDP 响应网关
一、模块概述 ngx_stream_return_module 提供了一个极简的指令: return <value>;在收到客户端连接后,立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量(如 $time_iso8601、$remote_addr 等)&a…...
简易版抽奖活动的设计技术方案
1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...
线程与协程
1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指:像函数调用/返回一样轻量地完成任务切换。 举例说明: 当你在程序中写一个函数调用: funcA() 然后 funcA 执行完后返回&…...
处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的
修改bug思路: 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑:async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...
LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》
这段 Python 代码是一个完整的 知识库数据库操作模块,用于对本地知识库系统中的知识库进行增删改查(CRUD)操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 📘 一、整体功能概述 该模块…...
【C++进阶篇】智能指针
C内存管理终极指南:智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...
Java严格模式withResolverStyle解析日期错误及解决方案
在Java中使用DateTimeFormatter并启用严格模式(ResolverStyle.STRICT)时,解析日期字符串"2025-06-01"报错的根本原因是:模式字符串中的年份格式yyyy被解释为YearOfEra(纪元年份),而非…...
部署DNS从服务器
部署DNS从服务器的目的 DNS域名解析服务中,从服务器可以从主服务器上获得指定的区域数据文件,从而起到备份解析记录与负载均衡的作用,因此通过部署从服务器可以减轻主服务器的负载压力,还可以提升用户的查询效率。 注意…...
【AI教我写网站-ECG datacenter】
阶段性总结:后端用户管理基础 在项目管理和协作中,清晰地阐述“为什么做”比“怎么做”更能凝聚共识和提供方向。我们不仅要理解技术实现,更要明白其背后的动机和意义。 让我们重新回顾并总结我们到目前为止的工作,这次会更侧重…...

