文章目录
- 前言
- 一、介绍
- 二、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) FROM 表2
WHERE …;
该语法可以将从另一个表中查询到的结果插入到指定的表中,方便数据的迁移和整合。
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开发者!
📢 注意啦!文末有彩蛋!参与评论就有机会把这本好书抱回家~动动手指,说不定下个锦鲤就是你!赠书福利