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

21 天 Python 计划:MySQL中DML与权限管理

文章目录

    • 前言
    • 一、介绍
    • 二、MySQL数据操作:DML
      • 2.1 插入数据(INSERT)
        • 2.1.1 插入完整数据(顺序插入)
        • 2.1.2 指定字段插入数据
        • 2.1.3 插入多条记录
        • 2.1.4 插入查询结果
      • 2.2 更新数据(UPDATE)
      • 2.3 删除数据(DELETE)
        • 练习
      • 2.4 查询数据(SELECT)
        • 2.4.1 单表查询
          • 基本语法
          • 示例
          • 查询所有学生的信息
          • 查询所有学生的姓名和年龄
          • 查询年龄大于 20 岁的学生信息
        • 2.4.2 多表查询
          • 基本类型
          • 内连接(INNER JOIN)
          • 左连接(LEFT JOIN)
          • 右连接(RIGHT JOIN)
          • 全连接(FULL JOIN)
          • 示例
        • 2.4.3 总结
    • 三、权限管理
      • 3.1 授权表
      • 3.2 创建用户
      • 3.3 授权
      • 3.4 删除权限
    • 结语

前言

Python是一种强大且易于学习的编程语言。通过这个21天的计划,我们将逐步深入MySQL中DML与权限管理。无论你是初学者还是有一定基础的开发者,这个计划都将帮助你巩固和扩展你的Python知识。

在学习本篇之前,我们先复习一下前面的内容:
day1:Python下载和开发工具介绍
day2:数据类型、字符编码、文件处理
day3:基础语法与课外练习
day4:函数简单介绍
day5:模块与包
day6:常用模块介绍
day7:面向对象
day8:面向对象高级
day9:异常处理
day10:网络编程
day11:并发编程
day12:MySQL数据库初识
day13:MySQL库相关操作
day14:MySQL表相关操作

一、介绍

在数据库管理中,数据的操作和权限管理是至关重要的环节。MySQL作为一款广泛使用的关系型数据库管理系统,提供了强大的功能来满足这些需求。本文将详细介绍MySQL中数据操作语言(DML)的使用,包括数据的插入、更新、删除和查询,同时也会涉及到用户权限管理的相关内容。

二、MySQL数据操作:DML

2.1 插入数据(INSERT)

在MySQL中,使用INSERT语句可以将数据插入到表中,具体有以下几种方式:

2.1.1 插入完整数据(顺序插入)
  • 语法一
INSERT INTO 表名(字段1,字段2,字段3…字段n) VALUES(1,2,3…值n);

这种语法明确指定了要插入数据的字段,然后按照字段顺序提供对应的值。

  • 语法二
INSERT INTO 表名 VALUES (1,2,3…值n);

此语法要求提供的值的顺序与表中字段的顺序一致,适用于插入所有字段的数据。

2.1.2 指定字段插入数据
INSERT INTO 表名(字段1,字段2,字段3) VALUES (1,2,3);

当只需要插入部分字段的数据时,可以使用这种语法,只指定要插入数据的字段及其对应的值。

2.1.3 插入多条记录
INSERT INTO 表名 VALUES(1,2,3…值n),(1,2,3…值n),(1,2,3…值n);

通过这种方式可以一次性插入多条记录,提高插入效率。

2.1.4 插入查询结果
INSERT INTO 表名(字段1,字段2,字段3…字段n) SELECT (字段1,字段2,字段3…字段n) FROM2WHERE;

该语法可以将从另一个表中查询到的结果插入到指定的表中,方便数据的迁移和整合。

2.2 更新数据(UPDATE)

使用UPDATE语句可以对表中的数据进行更新,语法如下:

UPDATE 表名 SET字段1=1,字段2=2,WHERE CONDITION;

其中,SET子句用于指定要更新的字段及其新值,WHERE子句用于指定更新的条件。例如:

UPDATE mysql.user SET password=password('123') where user='root' and host='localhost';

这条语句将mysql.user表中user为root且host为localhost的记录的password字段更新为加密后的123。

2.3 删除数据(DELETE)

DELETE语句用于从表中删除数据,语法如下:

DELETE FROM 表名 WHERE CONITION;

WHERE子句用于指定删除的条件,如果不指定WHERE子句,则会删除表中的所有记录。例如:

DELETE FROM mysql.user WHERE password='';

这条语句将mysql.user表中password为空的记录删除。

练习
  • 更新MySQL root用户密码为mysql123
UPDATE mysql.user SET password=password('mysql123') WHERE user='root';
  • 删除除从本地登录的root用户以外的所有用户
DELETE FROM mysql.user WHERE user!='root' OR (user='root' AND host!='localhost');

2.4 查询数据(SELECT)

在数据库操作的众多功能中,查询数据无疑是使用频率最高的一项。MySQL作为一款广泛应用的关系型数据库管理系统,为我们提供了强大且丰富的查询功能,其中单表查询和多表查询是两个重要的组成部分。下面我们将详细探讨这两种查询方式。

2.4.1 单表查询

单表查询是指仅从一个表中获取数据的查询操作。它是数据库查询中最基础、最常见的操作,适用于只需要从一个数据源获取信息的场景。

基本语法

单表查询的基本语法如下:

SELECT column1, column2, ...
FROM table_name
WHERE condition;
  • SELECT关键字用于指定要查询的列,可以是一个或多个列,用逗号分隔。如果要查询所有列,可以使用 * 通配符。
  • FROM关键字用于指定要查询的表名。
  • WHERE子句是可选的,用于指定查询条件,只有满足条件的记录才会被返回。
示例

假设我们有一个名为students的表,包含 id、name、age和 gender四个列,以下是一些常见的单表查询示例:

查询所有学生的信息
SELECT * FROM students;

这个查询将返回students表中的所有记录和所有列。

查询所有学生的姓名和年龄
SELECT name, age FROM students;

这个查询只返回 name和 age两列的数据。

查询年龄大于 20 岁的学生信息
SELECT * FROM students WHERE age > 20;

这个查询使用 WHERE子句过滤出年龄大于 20 岁的学生记录。

2.4.2 多表查询

多表查询是指从多个表中获取数据的查询操作。在实际应用中,数据往往分散在多个表中,通过多表查询可以将这些数据关联起来,获取更全面的信息。

基本类型

多表查询主要有以下几种类型:

内连接(INNER JOIN)

内连接是最常用的多表查询类型,它只返回两个表中满足连接条件的记录。

SELECT column1, column2, ...
FROM table1
INNER JOIN table2
ON table1.column = table2.column;
左连接(LEFT JOIN)

左连接返回左表中的所有记录,以及右表中满足连接条件的记录。如果右表中没有匹配的记录,则用 NULL填充。

SELECT column1, column2, ...
FROM table1
LEFT JOIN table2
ON table1.column = table2.column;
右连接(RIGHT JOIN)

右连接与左连接相反,它返回右表中的所有记录,以及左表中满足连接条件的记录。如果左表中没有匹配的记录,则用 NULL填充。

SELECT column1, column2, ...
FROM table1
RIGHT JOIN table2
ON table1.column = table2.column;
全连接(FULL JOIN)

全连接返回两个表中的所有记录,无论是否满足连接条件。如果没有匹配的记录,则用 NULL填充。

SELECT column1, column2, ...
FROM table1
FULL JOIN table2
ON table1.column = table2.column;
示例

假设我们有两个表:orders 表包含 order_id、customer_id 和 order_date列,customers表包含 customer_id、customer_name和 customer_email列。以下是一个内连接的示例:

SELECT orders.order_id, customers.customer_name, orders.order_date
FROM orders
INNER JOIN customers
ON orders.customer_id = customers.customer_id;

这个查询将返回每个订单的订单号、客户姓名和订单日期。

2.4.3 总结

单表查询和多表查询是 MySQL 中非常重要的查询功能。单表查询适用于从单个数据源获取信息,而多表查询则可以将多个表中的数据关联起来,获取更全面的信息。通过不断学习和实践,我们可以熟练掌握这两种查询方式,更好地处理和分析数据库中的数据。

三、权限管理

在MySQL中,权限管理是保障数据安全的重要手段,通过授权表来控制用户对数据库、表和字段的访问权限。

3.1 授权表

  • user:该表放行的权限,针对所有数据,所有库下所有表,以及表下的所有字段。
  • db:该表放行的权限,针对某一数据库,该数据库下的所有表,以及表下的所有字段。
  • tables_priv:该表放行的权限,针对某一张表,以及该表下的所有字段。
  • columns_priv:该表放行的权限,针对某一个字段。

3.2 创建用户

create user 'xiao'@'1.1.1.1' identified by '123';
create user 'xiao'@'192.168.1.%' identified by '123';
create user 'xiao'@'%' identified by '123';

以上语句分别创建了可以从1.1.1.1、192.168.1网段和任意地址登录的用户xiao,密码均为123。

3.3 授权

常用权限有select、update、alter、delete,all可以代表除了grant之外的所有权限。

  • 针对所有库的授权
grant select on *.* to 'xiao1'@'localhost' identified by '123';

该语句授予用户xiao1在本地登录时对所有数据库的select权限,只在user表中可以查到该用户的select权限被设置为Y。

  • 针对某一数据库
grant select on db1.* to 'xiao2'@'%' identified by '123';

此语句授予用户xiao2对数据库db1的所有表的select权限,只在db表中可以查到该用户的select权限被设置为Y。

  • 针对某一个表
grant select on db1.t1 to 'xiao3'@'%' identified by '123';

该语句授予用户xiao3对数据库db1中表t1的select权限,只在tables_priv表中可以查到该用户的select权限。

  • 针对某一个字段
grant select (id,name),update (age) on db1.t3 to 'xiao4'@'localhost' identified by '123';

此语句授予用户xiao4在本地登录时对数据库db1中表t3的id和name字段的select权限,以及age字段的update权限,可以在tables_priv和columns_priv中看到相应的权限。

3.4 删除权限

revoke select on db1.* from 'xiao'@'%';

该语句撤销用户xiao从任意地址登录时对数据库db1的所有表的select权限。

结语

通过这个21天的Python计划,我们了解了MySQL中数据操作语言(DML)的使用,包括数据的插入、更新、删除和查询,以及用户权限管理的相关内容。希望这些内容能帮助你更好地理解和使用Python。继续学习和实践,你将成为一名优秀的Python开发者!

📢 注意啦!文末有彩蛋!参与评论就有机会把这本好书抱回家~动动手指,说不定下个锦鲤就是你!赠书福利

相关文章:

21 天 Python 计划:MySQL中DML与权限管理

文章目录 前言一、介绍二、MySQL数据操作:DML2.1 插入数据(INSERT)2.1.1 插入完整数据(顺序插入)2.1.2 指定字段插入数据2.1.3 插入多条记录2.1.4 插入查询结果 2.2 更新数据(UPDATE)2.3 删除数…...

10-MySQL-性能优化思路

1、优化思路 当我们发现了一个慢SQL的问题的时候,需要做性能优化,一般我们是为了提高SQL查询更快,一个查询的流程由下图的各环节组成,每个环节都会消耗时间,要减少消耗时候需要从各个环节都分析一遍。 2 连接配置优化 第一个环节是客户端连接到服务端,这块可能会出现服务…...

MySQL学习笔记十

第十二章汇总数据 12.1聚集函数 聚集函数运行在行组上,计算和返回单个值。 12.1.1AVG()函数 输入: SELECT AVG(prod_price) AS avg_price FROM products; 输出: 说明:AVG()函数通过对表中行数计数并计算特定列值之和&#…...

在Halcon的语义分割中,过度拟合解决方法

在Halcon语义分割中出现过拟合是比较常见的问题,以下是一些解决方法。 数据方面 - 扩大数据集:收集更多不同场景、角度、光照条件下的图像数据。例如,在做工业零件语义分割时,如果仅用少量固定角度和光照下的零件图像训练&#xf…...

Active Directory 域服务

1.活动目录有什么特点 1. 目录服务 集中管理:提供集中式的用户、计算机、组和其他资源的管理。 结构化存储:以层次结构的方式存储信息,便于组织和检索。 2. 域和林结构 域(Domain):一个逻辑分组&#x…...

Redis快的原因

1、基于内存实现 Redis将所有数据存储在内存中,因此它可以非常快速地读取和写入数据,而无需像传统数据库那样将数据从磁盘读取和写入磁盘,这样也就不受I/O限制。 2、I/O多路复用 多路指的是多个socket连接;复用指的是复用一个线…...

Android 自己的智能指针

在 Android 系统中&#xff0c;强指针模板类&#xff08;sp<T>&#xff09; 是一种基于引用计数的智能指针实现&#xff0c;专门用于管理对象的生命周期。它被广泛用于 Android Framework 的底层&#xff08;Native 层/C 代码&#xff09;&#xff0c;尤其是与 Binder 通…...

如何在React中集成 PDF.js?构建支持打印下载的PDF阅读器详解

本文深入解析基于 React 和 PDF.js 构建 PDF 查看器的实现方案&#xff0c;该组件支持 PDF 渲染、图片打印和下载功能&#xff0c;并包含完整的加载状态与错误处理机制。 完整代码在最后 一个PDF 文件&#xff1a; https://mozilla.github.io/pdf.js/web/compressed.tracemo…...

【完美解决】VSCode连接HPC节点,已配置密钥却还是提示需要输入密码

目录 问题描述软件版本原因分析错误逻辑链 解决方案总结 问题描述 本人在使用 ​​VSCode Remote-SSH 插件​​连接超算集群节点时&#xff0c;遇到以下问题&#xff1a;已正确配置 SSH 密钥&#xff0c;且 VSCode 能识别密钥文件&#xff08;如图1&#xff09;&#xff0c;但在…...

智能DNS解析:解决高防IP地区访问异常的实战指南

摘要&#xff1a;针对高防IP在部分地区无法访问的问题&#xff0c;本文设计基于智能DNS的流量调度方案&#xff0c;提供GeoDNS配置与故障切换代码示例。 一、问题背景 运营商误拦截或线路波动可能导致高防IP在福建、江苏等地访问异常。传统切换方案成本高&#xff0c;智能DNS可…...

【JSON2WEB】16 login.html 登录密码加密传输

【JSON2WEB】系列目录 【JSON2WEB】01 WEB管理信息系统架构设计 【JSON2WEB】02 JSON2WEB初步UI设计 【JSON2WEB】03 go的模板包html/template的使用 【JSON2WEB】04 amis低代码前端框架介绍 【JSON2WEB】05 前端开发三件套 HTML CSS JavaScript 速成 【JSON2WEB】06 JSO…...

ruby超高级语法

以下是 Ruby 中一些 极度硬核 的语法和底层特性&#xff0c;涉及元编程的深渊、虚拟机原理、语法黑魔法等&#xff0c;适用于追求极限的 Ruby 开发者&#xff1a; 高级语法一 一、语法核弹级操作 1. 动态修改继承链 class A; def foo; "A"; end end class B; def …...

第十二天 - Flask/Django基础 - REST API开发 - 练习:运维管理后台API

从零开始用Flask/Django构建运维管理后台API&#xff08;实战指南&#xff09; 前言&#xff1a;为什么选择Python Web框架&#xff1f; 在运维自动化领域&#xff0c;构建管理后台是每个运维工程师的必修课。本文将通过Flask和Django两个主流框架&#xff0c;手把手教你构建…...

Docker 容器内运行程序的性能开销

在 Docker 容器内运行程序通常会有一定的性能开销&#xff0c;但具体损失多少取决于多个因素。以下是详细分析&#xff1a; 1. CPU 性能 理论开销&#xff1a;容器直接共享宿主机的内核&#xff0c;CPU 调度由宿主机管理&#xff0c;因此 CPU 运算性能几乎与原生环境一致&…...

从递归入手一维动态规划

从递归入手一维动态规划 1. 509. 斐波那契数 1.1 思路 递归 F(i) F(i-1) F(i-2) 每个点都往下展开两个分支&#xff0c;时间复杂度为 O(2n) 。 在上图中我们可以看到 F(6) F(5) F(4)。 计算 F(6) 的时候已经展开计算过 F(5)了。而在计算 F(7)的时候&#xff0c;还需要…...

【2025年认证杯数学中国数学建模网络挑战赛】A题解题思路与模型代码

【2025年认证杯数学建模挑战赛】A题 该题为典型的空间几何建模轨道动力学建模预测问题。 ⚙ 问题一&#xff1a;利用多个天文台的同步观测&#xff0c;确定小行星与地球的相对距离 问题分析 已知若干地面天文台的观测数据&#xff1a;方位角 (Azimuth) 和 高度角 (Altitude)&…...

蓝桥杯备赛 Day16 单调数据结构

单调栈和单调队列能够动态的维护&#xff0c;还需用1-2两个数组在循环时从单调栈和单调队列中记录答案 单调栈 要点 1.时刻保持内部元素具有单调性质的栈(先进后出),核心是:入栈时逐个删除所有"更差的点",一般可分为单调递减栈、单调递增栈、单调不减栈、单调不增…...

轻量级爬虫框架Feapder入门:快速搭建企业级数据管道

一、目标与前置知识 1. 目标概述 本教程的主要目标是&#xff1a; 介绍轻量级爬虫框架 Feapder 的基本使用方式。快速搭建一个采集豆瓣电影数据的爬虫&#xff0c;通过电影名称查找对应的电影详情页并提取相关信息&#xff08;电影名称、导演、演员、剧情简介、评分&#xf…...

golang gmp模型分析

思维导图&#xff1a; 1. 发展过程 思维导图&#xff1a; 在单机时代是没有多线程、多进程、协程这些概念的。早期的操作系统都是顺序执行 单进程的缺点有&#xff1a; 单一执行流程、计算机只能一个任务一个任务进行处理进程阻塞所带来的CPU时间的浪费 处于对CPU资源的利用&…...

深入理解Java Optional:告别NullPointerException的优雅方式

大家好&#xff01;今天我们来聊聊Java 8引入的一个超实用类 - Optional。不是那个让你重启电脑的CtrlAltDel哦&#xff01;&#x1f604; 这是一个能让我们优雅处理null值的工具类&#xff0c;彻底告别烦人的NullPointerException&#xff01; 一、为什么需要Optional&#x…...

【算法竞赛】树上最长公共路径前缀(蓝桥杯2024真题·团建·超详细解析)

目录 一、题目 二、思路 1. 问题转化&#xff1a;同步DFS走树 2. 优化&#xff1a;同步DFS匹配 3. 状态设计&#xff1a;dfs参数含义 4. 匹配过程&#xff1a;用 map 建立权值索引 5. 终止条件&#xff1a;无法匹配则更新答案 6. 总结 三、完整代码 四、知识点总…...

【windows10】基于SSH反向隧道公网ip端口实现远程桌面

【windows10】基于SSH反向隧道公网ip端口实现远程桌面 1.背景2.SSH反向隧道3.远程连接电脑 1.背景 ‌Windows 10远程桌面协议的简称是RDP&#xff08;Remote Desktop Protocol&#xff09;‌。 RDP是一种网络协议&#xff0c;允许用户远程访问和操作另一台计算机。 远程桌面功…...

Python----概率论与统计(贝叶斯,朴素贝叶斯 )

一、贝叶斯 1.1、贝叶斯定理 贝叶斯定理&#xff08;Bayes Theorem&#xff09;也称贝叶斯公式&#xff0c;是关于随机事件的条件概率的定理 贝叶斯的的作用&#xff1a;根据已知的概率来更新事件的概率。 1.2、定理内容 提示&#xff1a; 贝叶斯定理是“由果溯因”的推断&…...

NO.88十六届蓝桥杯备战|动态规划-多重背包|摆花(C++)

多重背包 多重背包问题有两种解法&#xff1a; 按照背包问题的常规分析⽅式&#xff0c;仿照完全背包&#xff0c;第三维枚举使⽤的个数&#xff1b;利⽤⼆进制可以表⽰⼀定范围内整数的性质&#xff0c;转化成01 背包问题。 ⼩建议&#xff1a;并不是所有的多重背包问题都能…...

vue项目打包里面pubilc里的 tinymce里的js文件问题

以下是解决 Vue 项目打包后 public/tinymce 中 JS 文件路径问题的完整方案&#xff1a; 问题原因 当使用 public 目录存放静态资源时&#xff0c;Vue CLI 默认会将 public 下的文件 直接复制到打包目录的根路径&#xff0c;但以下操作可能导致路径错误&#xff1a; 开发环境使…...

Python星球日记 - 第18天:小游戏开发(猜数字游戏)

🌟引言: 上一篇:Python星球日记 - 第17天:数据可视化 名人说:路漫漫其修远兮,吾将上下而求索。(屈原《离骚》) 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 一、游戏概述与原理1. 游戏基本规则2. 编程知识点3.猜数字游戏流程图二、游戏逻辑设计…...

爬虫抓包工具和PyExeJs模块

我们在处理一些网站的时候, 会遇到一些屏蔽F12, 以及只要按出浏览器的开发者工具就会关闭甚至死机的现象. 在遇到这类网站的时候. 我们可以使用抓包工具把页面上屏蔽开发者工具的代码给干掉. Fiddler和Charles 这两款工具是非常优秀的抓包工具. 他们可以监听到我们计算机上所…...

无人机击落技术难点与要点分析!

一、技术难点 1. 目标探测与识别 小型化和低空飞行&#xff1a;现代无人机体积小、飞行高度低&#xff08;尤其在城市或复杂地形中&#xff09;&#xff0c;雷达和光学传感器难以有效探测。 隐身技术&#xff1a;部分高端无人机采用吸波材料或低可探测设计&#xff0c;进…...

2025年Java无服务器架构实战:AWS Lambda与Spring Cloud Function深度整合

摘要 &#x1f4dd; 本文深入探讨如何在2025年Java生态中实现AWS Lambda与Spring Cloud Function的无缝整合。我们将从基础概念讲起&#xff0c;逐步深入到实际部署、性能优化和最佳实践&#xff0c;通过详实的代码示例展示如何构建高效、可扩展的无服务器Java应用。 目录 &a…...

LeetCode 题目 「二叉树的右视图」 中,如何从「中间存储」到「一步到位」实现代码的优化?

背景简介 在 LeetCode 的经典题目 「二叉树的右视图」 中&#xff0c;我们需要返回从右侧看一棵二叉树时所能看到的节点集合。每一层我们只能看到最右边的那个节点。 最初&#xff0c;我采用了一个常规思路&#xff1a;层序遍历 每层单独保存节点值 最后提取每层最后一个节…...