MySQL数据库#6
Python操作mysql
在使用Python连接mysql之前我们需要先下载一个第三方的模块 pymysql的模块,导入后再进行操作。
操作步骤:1. 先连接mysql host,port,charset,username password 库,等等。
import pymysqlcoon = pymysql.connect(host='127.0.0.1',port=3306,user='root',passwd='12345',db='db10',charset='utf8',autocommit=True ) """coon = pymysql.connect(host='127.0.0.1', 本地ipport=3306, 端口user='root', 用户名passwd='12345', 密码db='db10'charset='utf8', 字符编码)"""
2.在Python中书写mysql语句
"""获取游标""" cur = coon.cursor()sql = 'select * from student'#写SQL语句affect_rows = cur.execute(sql)#代表影响的行数
3.执行SQL语句,拿到结果
fetchmany(3)就是前条数据
fetchall()所以信息
res = cur.fetchone() #使用fetchone()代表一个数 print(res) # (1, '男', 1, '理解')"""mysql> select * from student; +-----+--------+----------+-------+ | sid | gender | class_id | sname | +-----+--------+----------+-------+ | 1 | 男 | 1 | 理解 | | 2 | 女 | 1 | 钢蛋 | | 3 | 男 | 1 | 张三 | | 4 | 男 | 1 | 张一 | | 5 | 女 | 1 | 张二 |
4. 在Python中对数据的进一步处理
在游标这边加上cursor=pymysql.cursors.DictCursor让最终结果输出变为字典类型
cur = coon.cursor(cursor=pymysql.cursors.DictCursor)sql = 'select * from student'#写SQL语句affect_rows = cur.execute(sql) print(affect_rows) # #拿到结果res = cur.fetchone() print(res) # 加上之后变为字典类型 {'sid': 1, 'gender': '男', 'class_id': 1, 'sname': '理解'}
当我们在Python中修改数据后,那么在原来的数据库也会跟着修改
"""获取游标""" cur = coon.cursor(cursor=pymysql.cursors.DictCursor)sql = 'insert into teacher(tid, tname) values (6,"ll")'#输出结果为1 #当我们修改之后还要进行二次确认: coon.commit()#写SQL语句affect_rows = cur.execute(sql) print(affect_rows) #
添加二次确认 coon.commit(),之后就同步修改成功了
除了查询之外,都需要二次确认。
后续可以直接添加,只需要在开始的地方输入
autocommit=True
基于数据库写一个用户注册和登录功能(注册的数据保存在用户表中,然后根据这个用户名做登录)
1. 使用Navicat 来创建一个用户表:
2. 在python中使用sql语句来登录:
coon = pymysql.connect(host='127.0.0.1',port=3306,user='root',passwd='12345',db='db10',charset='utf8',autocommit=True
)# 游标
sor = coon.cursor(pymysql.cursors.DictCursor)# 写sql语句
ip_name = input('username')
ip_pwd = input('password')
sql1 = ''
sql = "select * from userinfo where username='%s' and password='%s'" % (ip_name, ip_pwd)add = sor.execute(sql)res = sor.fetchone()
if res:print('登录成功')
else:print('登录失败')
视图
什么是视图
MySQL中的视图是一个虚拟表,它根据 SELECT 语句的结果集生成。与物理表一样,视图包含一些列和行,但是这些列和行并不是真实存在的,而是基于 SELECT 语句所定义的查询结果。
为什么要使用视图
使用视图有以下优点:
- 可以简化复杂的查询,将多个表的数据组合在一起,提供新的查询界面,方便用户操作。
- 可以隐藏敏感数据,只向用户显示有限的数据。
- 可以在不修改底层表的结构的情况下,修改和更新数据。
如何使用视图
关键字:select view
select view 表名 as select * from teacher inner join course on teacher.tid = course.teacher_id;
这样就创建成功了
如何删除表
drop view (新建表名)
注意:在硬盘中,视图只有表结构,没有表数据文件,视图通常用于查询,尽量不要去修改。
在开发过程中,会不会去使用视图?
答:不会!视图是mysql的功能,如果你的项目里面大量的使用到了视图,那意味着你后期想要扩张某个功能的时候这个功能恰巧又需要对视图进行修改,意味着你需要先在mysql这边将视图先修改一下,然后再去应用程序中修改对应的sql语句,这就涉及到跨部门沟通的问题,所以通常不会使用视图,而是通过重新修改sql语句来扩展功能
触发器
什么是触发器
触发器(Trigger)是一种特殊的存储过程,可以在特定的数据库事件发生时(如插入、更新或删除数据)自动执行。触发器是通过设置一些触发条件来触发的,一旦触发条件满足,就会自动执行触发器所定义的操作。通常用于实现数据的约束性和完整性控制、数据同步、日志记录等功能。触发器可以在数据库中创建、修改和删除。
语法结构:
create trigger 触发器名称 before(之前)/after (之后)insert/update/delete on 表名 for each row
begin
sql语句
end
针对插入
针对插入
create trigger tri_after_insert_t1 after insert on 表名 for each row
begin
sql代码。。。
end
create trigger tri_after_insert_t2 before insert on 表名 for each row
begin
sql代码。。。
end
针对删除
针对删除
create trigger tri_after_delete_t1 after delete on 表名 for each row
begin
sql代码。。。
end
create trigger tri_after_delete_t2 before delete on 表名 for each row
begin
sql代码。。。
end
针对修改
针对修改
create trigger tri_after_update_t1 after update on 表名 for each row
begin
sql代码。。。
end
create trigger tri_after_update_t2 before update on 表名 for each row
begin
sql代码。。。
end
案例:
CREATE TABLE cmd (
id INT PRIMARY KEY auto_increment,
USER CHAR (32),
priv CHAR (10),
cmd CHAR (64),
sub_time datetime, #提交时间
success enum ('yes', 'no')0代表执行失败
);CREATE TABLE errlog (
id INT PRIMARY KEY auto_increment,
err_cmd CHAR (64),
err_time datetime
);delimiter $$ 将mysql默认的结束符由;换成$$
create trigger tri_after_insert_cmd after insert on cmd for each row
begin
if NEW.success = 'no' then # 新记录都会被MySQL封装成NEW对象
insert into errlog(err_cmd,err_time) values(NEW.cmd,NEW.sub_time);
end if;
end $$
delimiter ; 结束之后记得再改回来,不然后面结束符就都是$$了
往表cmd中插入记录,触发触发器,根据IF的条件决定是否插入错误日志
INSERT INTO cmd (
USER,
priv,
cmd,
sub_time,
success
)
VALUES
('egon','0755','ls -l /etc',NOW(),'yes'),
('egon','0755','cat /etc/passwd',NOW(),'no'),
('egon','0755','useradd xxx',NOW(),'no'),
('egon','0755','ps aux',NOW(),'yes');查询errlog表记录
select * from errlog;
删除触发器
drop trigger tri_after_insert_cmd;
事物
什么是事物:
开启一个事务可以包含一些sql语句,这些sql语句要么同时成功
要么一个都别想成功,称之为事务的原子性
事物的作用:
保证了数据操作的数据安全性
事物所拥有的四个属性
原子性(atomicity);一个事物是一个不可分割的工作单位,事物中包含了多个操作,要么都做,要么都不做。
一致性(consistency):事物必须是数据库中的一个一致性状态变成另一个一致性状态,一致性与原子性相关的
隔离性(isolation):一个事物的执行不能被其他事物所干扰,即一个事物内部操作级使用的数据,对并发的其他事物是隔开的,并发执行的各个事物之间,不能互相干扰。
持久性(durability):也被称为永久性(permanence )一个事物一旦提交,对于数据库的改变就是永久的,接下来的操作或故障不应该对其有所影响。
事物关键字:
start transaction;
commit;
rollback;
create table user(
id int primary key auto_increment,
name char(32),
balance int
);insert into user(name,balance)
values
('jason',1000),
('egon',1000),
('tank',1000);修改数据之前先开启事务操作
start transaction;修改操作
update user set balance=900 where name='jason'; 买支付100元
update user set balance=1010 where name='egon'; 中介拿走10元
update user set balance=1090 where name='tank'; 卖家拿到90元回滚到上一个状态
rollback;开启事务之后,只要没有执行commit操作,数据其实都没有真正刷新到硬盘
commit;
开启事务检测操作是否完整,不完整主动回滚到上一个状态,如果完整就应该执行commit操作站在python代码的角度,应该实现的伪代码逻辑,
try:
少了开事务...
update user set balance=900 where name='jason'; 买支付100元
update user set balance=1010 where name='egon'; 中介拿走10元
update user set balance=1090 where name='tank'; 卖家拿到90元
except 异常:
rollback;
else:
commit;
存储过程
基本使用:
delimiter $$
create procedure p1()
begin
select * from user;
end $$
delimiter ;调用
call p1()
创建存储过程
delimiter $$
create procedure p2(
in m int,in表示这个参数必须只能是传入不能被返回出去
in n int,
out res intout表示这个参数可以被返回出去
)begin
select tname from teacher where tid > m and tid < n;
set res=0;用来标志存储过程是否执行
end $$
delimiter ;
针对res需要先提前定义
set @res=10; 定义
select @res; 查看
call p1(1,5,@res) 调用
select @res 查看
函数
CREATE TABLE blog (
id INT PRIMARY KEY auto_increment,
NAME CHAR (32),
sub_time datetime
);INSERT INTO blog (NAME, sub_time)
VALUES
('第1篇','2015-03-01 11:31:21'),
('第2篇','2015-03-11 16:31:21'),
('第3篇','2016-07-01 10:21:31'),
('第4篇','2016-07-22 09:23:21'),
('第5篇','2016-07-23 10:11:11'),
('第6篇','2016-07-25 11:21:31'),
('第7篇','2017-03-01 15:33:21'),
('第8篇','2017-03-01 17:32:21'),
('第9篇','2017-03-01 18:31:21');
+----+--------------------------------------+---------------------+
| id | NAME | sub_time | month
+----+--------------------------------------+---------------------+
| 1 | 第1篇 | 2015-03-01 11:31:21 | 2015-03
| 2 | 第2篇 | 2015-03-11 16:31:21 | 2015-03
| 3 | 第3篇 | 2016-07-01 10:21:31 | 2016-07
| 4 | 第4篇 | 2016-07-22 09:23:21 | 2016-07
| 5 | 第5篇 | 2016-07-23 10:11:11 | 2016-07
| 6 | 第6篇 | 2016-07-25 11:21:31 | 2016-07
| 7 | 第7篇 | 2017-03-01 15:33:21 | 2017-03
| 8 | 第8篇 | 2017-03-01 17:32:21 | 2017-03
| 9 | 第9篇 | 2017-03-01 18:31:21 | 2017-03
+----+--------------------------------------+---------------------+select count(*) from blog group by month;
select date_format(sub_time,'%Y-%m'),count(id) from blog group by date_format(sub_time,'%Y-%m');
索引
我们知道数据都是存在硬盘上的,查询数据不可避免的使用IO操作
索引就是一种数据结构,类似于书的目录。意味着以后再查数据应该先找目录再找数据,而不是用翻页的方式查询数据
索引在MySQL中也叫做“键”,是存储引擎用于快速找到记录的一种数据结构。
primary key
unique key
index key
注意:上面三种key前两种除了有加速查询的效果之外还有额外的约束条件(primary key:非空且唯一,unique key:唯一),而index key没有任何约束功能只会帮你加速查询
相关文章:

MySQL数据库#6
Python操作mysql 在使用Python连接mysql之前我们需要先下载一个第三方的模块 pymysql的模块,导入后再进行操作。 操作步骤:1. 先连接mysql host,port,charset,username password 库,等等。 import pymysql…...

YOLO v1(2016.5)
文章目录 AbstractIntroduction过去方法存在的问题我们提出的方法解决了... Unified DetectionNetwork DesignTrainingInference Comparison to Other Detection SystemsDeformable parts modelsR-CNNOther Fast DetectorsDeep MultiBoxOverFeatMultiGrasp ExperimentsConclusi…...
SQL比较两次的字段集合,找出并返回差异,主要用于更新记录事件
Create PROCEDURE [dbo].[SysGetTableFieldsCompare] -- Description: <比较两次的字段集合,找出并返回差异,主要用于更新记录事件> -- Return 0- 成功, -1- 没有这个表 -- Rev: 1.00 -- FieldsSource Nvarchar(max) , FieldsTarg…...
muduo源码剖析之Acceptor监听类
简介 Acceptor类用于创建套接字,设置套接字选项,调用socket()->bind()->listen()->accept()函数,接受连接,然后调用TcpServer设置的connect事件的回调。 listen()//在TcpServer::start中调用 封装了一个listen fd相关…...

express session JWT JSON Web Token
了解 Session 认证的局限性 Session 认证机制需要配合 cookie 才能实现。由于 Cookie 默认不支持跨域访问,所以,当涉及到前端跨域请求后端接口的时候,需要做很多额外的配置,才能实现跨域 Session 认证。 注意: 当前端…...

负载均衡策略 LVS
一、集群功能分类 1、LB (1) 概念: LB:负载均衡 (Load Balancing) 是一种分发网络流量的技术,LB 负载均衡的基本原理是将传入的网络流量分发到多个后端服务器,以确保这些服务器都承担相似的工作负载,从而避免某一台…...

驱动开发6 IO多路复用——epoll
核心操作:一棵树、一张表、三个接口 相关案例 #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> #include <stdlib.h> #include <string.h> #include <sys…...
【python学习笔记——列表】
1、列表定义 列表是写在方括号 [] 之间、用逗号分隔开的元素列表。 空列表 list[]非空列表 列表定义时例如list[‘csdn’, ‘is’ ,‘good’ ,2023],直接给列表内赋值 2、列表索引规则 列表名[start:stop:step],前闭后开,即取索引为start…...

TensorRT量化实战课YOLOv7量化:YOLOv7-PTQ量化(一)
目录 前言1. YOLOv7-PTQ量化流程2. 准备工作3. 插入QDQ节点3.1 自动插入QDQ节点3.2 手动插入QDQ节点 前言 手写 AI 推出的全新 TensorRT 模型量化实战课程,链接。记录下个人学习笔记,仅供自己参考。 该实战课程主要基于手写 AI 的 Latte 老师所出的 Tens…...

[微信小程序踩坑]微信小程序editor富文本组件渲染字符串时,内部图片超出大小导致无法正常渲染或回显(数据传输长度为 3458 KB,存在有性能问题!)
坑一:回显问题 富文本组件: <editor id"editor" name"{{name}}" style"font-size: 28rpx;color: #C9CDD4" read-only"{{true}}" placeholder"{{placeholder}}" bind:input"onChange11"…...
USACO12OPEN Balanced Cow Subsets G(meet in the middle)
洛谷P3067 [USACO12OPEN] Balanced Cow Subsets G 题目大意 我们定义一个奶牛集合 S S S是平衡的,当且仅当满足以下两个条件: S S S非空 S S S可以被划分为两个集合 A , B A,B A,B,满足 A A A里的奶牛产量之和等于 B B B里的牛奶产量之和 …...
GIT常用操作记录
1、后悔药:强制回退到某个具体历史提交记录,并强制推送到远程仓库 强制回退到某个具体历史提交记录,即要删除它之后的所有提交,可以用 git reset 命令。 首先找到目标提交记录的ID,可以在github远程仓库的历史提交记…...

【ETL工具】Datax-ETL-SqlServerToHDFS
🦄 个人主页——🎐个人主页 🎐✨🍁 🪁🍁🪁🍁🪁🍁🪁🍁 感谢点赞和关注 ,每天进步一点点!加油!&…...
Kubernetes (K8S)概述
1、K8S 是什么? K8S 的全称为 Kubernetes (K12345678S),PS:“嘛,写全称也太累了吧,不如整个缩写”。 1.1 作用 用于自动部署、扩展和管理“容器化(containerized)应用程序”的开源系统。 可以…...

11月14号|Move生态Meetup相约浪漫土耳其
Move是基于Rust编程语言,由Mysten Labs联合创始人兼CTO Sam Blackshear在Meta的Libra项目中开发而来,旨在为开发者提供比现有区块链语言更通用的开发语言。Sam的目标是创建Web3的JavaScript,即一种跨平台语言,使开发人员能够在多个…...
mac vim没有颜色 问题
vim ~/.vimrc syntax on set nu! set autoindent...

Servlet核心API
目录 HttpServlet init destory service 实例:处理get、post、put、delete请求 1.通过postman得到请求 2.通过ajax得到请求 HttpServletRequest 常见方法 前端给后端传参 1.GET,query string 2.POST,form 3.POST,json HttpSeverletRespons…...

crs 维护模式 exclusive mode
How To Validate ASM Instances And Diskgroups On A RAC Cluster (When CRS Does Not Start). (Doc ID 1609127.1)编辑To Bottom [rootrac1 ~]# ps -ef|grep grid root 2477 1 1 20:47 ? 00:00:51 /opt/oracle.ahf/jre/bin/java -server -Xms32m -Xmx64…...

【OpenCV实现平滑图像形态学变化】
文章目录 概要目标腐蚀膨胀开运算结构元素(内核)小结 概要 形态学变化是一组简单的图像操作,主要用于处理二值图像,即只包含黑和白两种颜色的图像。这些操作通常需要两个输入,原始图像和一个内核(kernel&a…...
Ubuntu服务器中java -jar 后台运行Spring Boot项目
问:我在我的服务器中java -jar 运行springboot项目,但是我操作不了命令了,必须要终止掉才能执行后面的操作,怎么样才能让他后台运行呢?比如我的jar包名是tools-boot-0.0.1-SNAPSHOT.jar 使用nohup命令: 在…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型
摘要 拍照搜题系统采用“三层管道(多模态 OCR → 语义检索 → 答案渲染)、两级检索(倒排 BM25 向量 HNSW)并以大语言模型兜底”的整体框架: 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后,分别用…...
【位运算】消失的两个数字(hard)
消失的两个数字(hard) 题⽬描述:解法(位运算):Java 算法代码:更简便代码 题⽬链接:⾯试题 17.19. 消失的两个数字 题⽬描述: 给定⼀个数组,包含从 1 到 N 所有…...
C++.OpenGL (10/64)基础光照(Basic Lighting)
基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...
Linux离线(zip方式)安装docker
目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1:修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本:CentOS 7 64位 内核版本:3.10.0 相关命令: uname -rcat /etc/os-rele…...
GitHub 趋势日报 (2025年06月06日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...

并发编程 - go版
1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程,系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...
【Android】Android 开发 ADB 常用指令
查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...
NPOI操作EXCEL文件 ——CAD C# 二次开发
缺点:dll.版本容易加载错误。CAD加载插件时,没有加载所有类库。插件运行过程中用到某个类库,会从CAD的安装目录找,找不到就报错了。 【方案2】让CAD在加载过程中把类库加载到内存 【方案3】是发现缺少了哪个库,就用插件程序加载进…...

Ubuntu Cursor升级成v1.0
0. 当前版本低 使用当前 Cursor v0.50时 GitHub Copilot Chat 打不开,快捷键也不好用,当看到 Cursor 升级后,还是蛮高兴的 1. 下载 Cursor 下载地址:https://www.cursor.com/cn/downloads 点击下载 Linux (x64) ,…...

协议转换利器,profinet转ethercat网关的两大派系,各有千秋
随着工业以太网的发展,其高效、便捷、协议开放、易于冗余等诸多优点,被越来越多的工业现场所采用。西门子SIMATIC S7-1200/1500系列PLC集成有Profinet接口,具有实时性、开放性,使用TCP/IP和IT标准,符合基于工业以太网的…...