Python进阶(三十一)往MySQL数据库里添加数据,update和insert效率分析_insert update 效率

最后总结我的面试经验

2021年的金三银四一眨眼就到了,对于很多人来说是跳槽的好机会,大厂面试远没有我们想的那么困难,摆好心态,做好准备,你也可以的。

另外,面试中遇到不会的问题不妨尝试讲讲自己的思路,因为有些问题不是考察我们的编程能力,而是逻辑思维表达能力;最后平时要进行自我分析与评价,做好职业规划,不断摸索,提高自己的编程能力和抽象思维能力。

BAT面试经验

实战系列:Spring全家桶+Redis等

其他相关的电子书:源码+调优

面试真题:

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

后来换种思路,考虑在执行数据插入之前先做数据表删除操作,然后再执行写入操作。因为自己臆想的是“数据插入的效率应该优于更新效率。”因此,决定对于该问题进行实际考察。

下面总结一下网络上针对该问题大家给出的观点。

  1. “不考虑主键变动,索引变动,触发器联动的情况下,updateInsert效率高。”
  2. 这个很难说,相关因素太多了:存储引擎类型、是否加索引(索引结构如B+树索引或者哈希索引、索引更新、聚集索引还是非聚集索引)、约束(如唯一性约束、外键约束等)…

还有提下三种插入语句(也有可能影响插入速度,从而难以判断插入快还是更新快):
MySQL中常用的三种插入数据的语句:

  • insert into表示插入数据,数据库会检查主键,如果出现重复会报错;
  • replace into表示插入替换数据,需要表中有Primary Key,或者唯一索引,如果表中已经存在数据,则用新数据替换,如果没有数据效果则和insert into一样;
  • insert ignore表示,如果表中如果已经存在相同的记录,则忽略当前新数据。

SQL中插入一个记录需要的时间由下列因素组成,其中的数字表示大约比例:
连接:(3)
发送查询给服务器:(2)
分析查询:(2)
插入记录:(1x记录大小)
插入索引:(1x索引)
关闭:(1)

如果我们每插入一条都执行一个SQL语句,那么我们需要执行除了连接和关闭之外的所有步骤N次,这样是非常耗时的,优化的方式有以下几种:

  • 在每个insert语句中写入多行,批量插入;
  • 将所有查询语句写入事务中;
  • 利用Load Data导入数据;

每种方式执行的性能如下。

InnoDBMySQL 提供了具有事务(commit)、回滚(rollback)和崩溃修复能力(crash recovery capabilities)的事务安全(transaction-safe (ACID compliant))型表。InnoDB 提供了行锁(locking on row level)以及外键约束(FOREIGN KEY constraints)。

InnoDB 的设计目标是处理大容量数据库系统,它的 CPU 利用率是其它基于磁盘的关系数据库引擎所不能比的。在技术上,InnoDB 是一套放在 MySQL 后台的完整数据库系统,InnoDB 在主内存中建立其专用的缓冲池用于高速缓冲数据和索引。

最后

整理的这些资料希望对Java开发的朋友们有所参考以及少走弯路,本文的重点是你有没有收获与成长,其余的都不重要,希望读者们能谨记这一点。

image

image

其实面试这一块早在第一个说的25大面试专题就全都有的。以上提及的这些全部的面试+学习的各种笔记资料,我这差不多来回搞了三个多月,收集整理真的很不容易,其中还有很多自己的一些知识总结。正是因为很麻烦,所以对以上这些学习复习资料感兴趣,

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

需要这份系统化的资料的朋友,可以点击这里获取

  • 9
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现这个功能,你需要先创建一个 Treeview 控件,并且将数据MySQL 数据库中加载到 Treeview 中。然后,你需要创建一个“修改”按钮,当用户点击该按钮时,它将获取所选行的数据,并将其填充到表单中。最后,用户修改表单中的数据,并再次点击“修改”按钮以更新 MySQL 数据库和 Treeview 控件。 以下是一个示例代码,它演示了如何实现这个功能: ```python import mysql.connector from tkinter import * from tkinter import ttk # 创建 MySQL 连接 mydb = mysql.connector.connect( host="localhost", user="yourusername", password="yourpassword", database="yourdatabase" ) # 创建 Tkinter 窗口 root = Tk() # 创建 Treeview 控件 tree = ttk.Treeview(root) tree["columns"] = ("Name", "Age", "Gender") # 定义 Treeview 列 tree.column("#0", width=0, stretch=NO) tree.column("Name", width=100) tree.column("Age", width=100) tree.column("Gender", width=100) # 定义 Treeview 列标题 tree.heading("#0", text="", anchor=W) tree.heading("Name", text="Name", anchor=W) tree.heading("Age", text="Age", anchor=W) tree.heading("Gender", text="Gender", anchor=W) # 加载数据到 Treeview 中 mycursor = mydb.cursor() mycursor.execute("SELECT * FROM people") for row in mycursor.fetchall(): tree.insert("", "end", text=row[0], values=(row[1], row[2], row[3])) # 创建“修改”按钮 def modify(): # 获取所选行的数据 selected_item = tree.selection()[0] name = tree.item(selected_item)["values"][0] age = tree.item(selected_item)["values"][1] gender = tree.item(selected_item)["values"][2] # 创建表单 form = Toplevel() form.title("Modify Person") # 创建表单字段 name_label = Label(form, text="Name") name_label.grid(row=0, column=0) name_entry = Entry(form) name_entry.grid(row=0, column=1) name_entry.insert(0, name) age_label = Label(form, text="Age") age_label.grid(row=1, column=0) age_entry = Entry(form) age_entry.grid(row=1, column=1) age_entry.insert(0, age) gender_label = Label(form, text="Gender") gender_label.grid(row=2, column=0) gender_entry = Entry(form) gender_entry.grid(row=2, column=1) gender_entry.insert(0, gender) # 创建“修改”按钮 def update(): # 更新 MySQL 数据库 mycursor = mydb.cursor() mycursor.execute("UPDATE people SET name=%s, age=%s, gender=%s WHERE name=%s", (name_entry.get(), age_entry.get(), gender_entry.get(), name)) mydb.commit() # 更新 Treeview 控件 tree.item(selected_item, text="", values=(name_entry.get(), age_entry.get(), gender_entry.get())) # 关闭表单 form.destroy() update_button = Button(form, text="Modify", command=update) update_button.grid(row=3, column=1) modify_button = Button(root, text="Modify", command=modify) modify_button.pack() # 显示 Treeview 控件 tree.pack() root.mainloop() ``` 这个示例程序演示了如何创建一个 Treeview 控件,并将数据MySQL 数据库中加载到 Treeview 中。它还演示了如何创建一个“修改”按钮,并在用户点击该按钮时,获取所选行的数据并将其填充到表单中。最后,它演示了如何更新 MySQL 数据库和 Treeview 控件以反映用户所做的更改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值