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开发者!

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/76372.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微信小程序 -- 原生封装table

文章目录 table.wxmltable.wxss注意 table.js注意 结果数据结构 最近菜鸟做微信小程序的一个查询功能,需要展示excel里面的数据,但是菜鸟找了一圈,也没发现什么组件库有table,毕竟手机端好像确实不太适合做table! 菜鸟…

LangChain-输出解析器 (Output Parsers)

输出解析器是LangChain的重要组件,用于将语言模型的原始文本输出转换为结构化数据。本文档详细介绍了输出解析器的类型、功能和最佳实践。 概述 语言模型通常输出自然语言文本,但在应用开发中,我们经常需要将这些文本转换为结构化的数据格式…

【安全】加密算法原理与实战

为了理解SSL/TLS原理,大家需要掌握一些加密算法的基础知识。当然,这不是为了让大家成为密码学专家,所以只需对基础的加密算法有一些了解即可。基础的加密算法主要有哈希(Hash,或称为散列)​、对称加密(Symm…

MySQL 优化教程:让你的数据库飞起来

文章目录 前言一、数据库设计优化1. 合理设计表结构2. 范式化与反范式化3. 合理使用索引 二、查询优化1. 避免使用 SELECT *2. 优化 WHERE 子句3. 优化 JOIN 操作 三、服务器配置优化1. 调整内存分配2. 调整并发参数3. 优化磁盘 I/O 四、监控与分析1. 使用 EXPLAIN 分析查询语句…

LangChain4j(1):初步认识Java 集成 LLM 的技术架构

LangChain 作为构建具备 LLM 能力应用的框架,虽在 Python 领域大放异彩,但 Java 开发者却只能望洋兴叹。LangChain4j 正是为解决这一困境而诞生,它旨在借助 LLM 的强大效能,增强 Java 应用,简化 LLM 功能在Java应用中的…

Linux服务器安装百度飞桨3.0(pip docker)

Linux安装部署百度飞桨3.0 1.官方文档指引2.确认服务器型号2.1 确认Python版本2.2 确认pip是否安装2.3 确认计算平台 3.本机安装(基于通过 pip 安装)3.1 下载安装 PaddlePaddle3.2 安装PaddleX3.2.1 安装PaddleX3.2.2 命令行规范3.2.3 运行示例3.2.4 查看…

Spring Boot 自动加载流程详解

前言 Spring Boot 是一个基于约定优于配置理念的框架,它通过自动加载机制大大简化了开发者的配置工作。本文将深入探讨 Spring Boot 的自动加载流程,并结合源码和 Mermaid 图表进行详细解析。 一、Spring Boot 自动加载的核心机制 Spring Boot 的自动加…

2025年危化品安全管理人员备考指南|智能题库+核心考点解析

作为危化品生产单位安全管理人员(主要负责人),考试内容主要涵盖三大模块: 法律法规体系 《安全生产法》修订要点(2023版) 危险化学品重大危险源辨识标准(GB 18218) 最新《化工过…

如何优雅使用 ReentrantLock 进行加解锁:避免常见坑点,提高代码可维护性

引言:锁的基本概念和问题 在多线程编程中,为了确保多个线程在访问共享资源时不会发生冲突,我们通常需要使用 锁 来同步对资源的访问。Java 提供了不同的锁机制,其中 ReentrantLock 是一种最常用且功能强大的锁,它属于…

Redhat红帽 RHCE8.0认证体系课程

课程大小:7.7G 课程下载:https://download.csdn.net/download/m0_66047725/90546064 更多资源下载:关注我 红帽企业 Linux 系统的管理技能已经成为现代数据中心的核心竞争力。 Linux 在支持混合云、跨物理服务器、虚机、私有云和公共云计…

Shell脚本编程

目录 1. Shell脚本概述 什么是Shell? Shell的作用 常见的Shell类型 2. 环境搭建与安装 Linux系统 macOS系统 Windows系统 3.安装并配置Zsh(macOS/Linux) 4. Shell基础语法 变量与数据类型 输入交互 5. Shell脚本进阶 进程管理 …

学生管理系统(Python)

运行结果: 源代码: """ 项目:类似于学生管理系统---增删改查 """ #封装一个学生类 import random class Student: def __init__(self,stuid,name,score): self.stuid stuid self.name name self.score …

电商素材革命:影刀RPA魔法指令3.0驱动批量去水印,实现秒级素材净化

本文 去除水印实操视频展示电商图片水印处理的困境​影刀 RPA 魔法指令 3.0 强势登场​利用魔法指令3.0两步实现去除水印操作关于影刀RPA 去除水印实操视频展示 我们这里选择了4张小红书里面比较帅气的图片,但凡用过小红书的都知道,小红书右下角是会有小…

Seq2Seq - GRU补充讲解

nn.GRU 是 PyTorch 中实现门控循环单元(Gated Recurrent Unit, GRU)的模块。GRU 是一种循环神经网络(RNN)的变体,用于处理序列数据,能够更好地捕捉长距离依赖关系。 ⭐重点掌握输入输出部分输入张量&#…

设计模式-观察者模式和发布订阅模式区别

文章目录 其他不错的文章 二者有类似的地方,也有区别。 引用的文章说的已经比较清楚了,这里只列出对比图。 对比点观察者模式发布订阅模式中间人角色无事件中心,观察者直接订阅目标有事件中心,发布者与订阅者通过事件中心通信关系…

【SQL】基于多源SQL 去重方法对比 -- 精华版

【SQL】基于SQL 去重方法对比 -- 精华版 一、引言二、基于SQL去重方法完整对比1. MySQL去重方法及优劣势1.1 ​DISTINCT关键字1.2 GROUP BY子句1.3 UNION系列操作1.4 子查询 自关联 2. Hive去重方法及优劣势2.1 DISTINCT关键字2.2 ​GROUP BY子句2.3 ​ROW_NUMBER窗口函数2.4 …

电脑命名配置很高,为什么运行软件特别卡

估计很多同学都碰见过这种情况,以我的Redmi G为例,I9-14待CPU,又换了一条内存条,现有配置I9-14900,40G内存5200MT/s,4060显卡,为啥运行两个办公软件就卡的不行,风扇狂转,…

Spring Boot默认注册的转换器列表及其功能说明。这些转换器使得控制器方法可以直接接收Integer、Long、Date等类型参数,无需手动实现转换

以下是Spring Boot默认注册的转换器列表及其功能说明。这些转换器使得控制器方法可以直接接收Integer、Long、Date等类型参数,无需手动实现转换: 默认转换器列表及功能 1. 基础类型转换器 转换器名称功能示例场景StringToIntegerConverter将字符串转换…

chrome提示https不安全, 不能记住账号密码怎么办? 可以利用js输入账号

背景: 在内网搭建的服务, 由于https证书问题, 可能会被chrome浏览器提示不安全 此时, 默认的记住账号密码功能就无法使用, 那么此时只能手动输入了吗? 想到了几种方案 1.利用外置软件, 模拟按键输入(比如按键精灵, 缺点是依赖外部软件, 运行速度也慢, 且执行时占用了输入焦…

探秘Transformer系列之(25)--- KV Cache优化之处理长文本序列

探秘Transformer系列之(25)— KV Cache优化之处理长文本序列 文章目录 探秘Transformer系列之(25)--- KV Cache优化之处理长文本序列0x00 概述0x01 优化依据1.1 稀疏性1.2 重要性1.3 小结 0x02 稀疏化1.1 分类1.2 静态稀疏化1.2.1…