![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
MySQL讲义
睿思达DBA_WGX
从事数据库理论教学工作,有多年管理和维护Oracle、MySQL、SQL Server数据库的相关经验。
展开
-
MySQL讲义第 57 讲——MySQL用户权限管理之权限表结构分析
MySQL讲义第 57 讲——MySQL用户权限管理之权限表结构分析在 MySQL 中和权限有关的表存放在 mysql 数据库中,主要有 user、db、tables_priv、columns_priv 和 procs_priv 表。这几张表中存放的信息如下:(1)user 表:存放用户账户信息以及全局权限,如果在此表中拥有某个权限则意味着对所有数据库都有此权限。(2)db 表:存放数据库级别的权限。(3)tables_priv 表:存放表级别的权限。(4)columns_priv 表:存放列级别原创 2020-12-06 19:15:53 · 627 阅读 · 1 评论 -
MySQL讲义第 56 讲——MySQL用户权限管理之各种权限讲解
MySQL讲义第 56 讲——MySQL用户权限管理之各种权限讲解MySQL 在使用 GRANT 命令授予权限时,可以使用的权限以及每种权限代表的含义如下:All/All Privileges 权限:代表全局或者数据库对象级别的所有权限。Alter 权限:允许修改表结构,必须有 create 和 insert 权限配合。如果需要修改表名(rename), 则要求有 alter 和 drop 原表,以及 create 和 insert 新表的权限。Alter routine原创 2020-12-06 18:33:18 · 353 阅读 · 0 评论 -
MySQL讲义第 55 讲——用户权限管理之创建和删除用户
MySQL讲义第 55 讲——用户权限管理之创建和删除用户可以使用 create user 命令创建用户,此时创建的用户只具备登录权限,登录后只能执行一些不需要权限的操作。也可以使用 grant 命令创建用户同时授予相应的操作权限。也可以直接在 user 表中插入用户信息。一、创建用户1、使用 create user 命令创建用户可以使用 CREATE USER 语句来创建 MySQL 用户并设置口令。语法格式如下:CREATE USER 'username'@'host' IDENTIFIED原创 2020-12-06 18:00:07 · 906 阅读 · 0 评论 -
MySQL讲义第 54 讲——MySQL用户权限管理之用户权限管理概述
MySQL讲义第 54 讲——MySQL用户权限管理之用户权限管理概述如果用户使用 MySQL 中的各种资源,首先在连接 MySQL 时需要进行身份验证。当用户通过身份验证后,此用户只能进行权限范围内的各种操作。MySQL 使用 mysql 数据库中的 4 张表来控制用户权限,分别为:mysql.user 表、mysql.db 表、mysql.tables_priv 表和mysql.columns_priv 表。一、MySQL 权限的级别MySQL 权限分为全局权限、数据库级别、数据库对象级别(表、原创 2020-12-06 16:38:55 · 389 阅读 · 0 评论 -
MySQL讲义第 53 讲——select 查询之 select 语句执行过程分析
MySQL讲义第 53 讲——select 查询之 select 语句执行过程分析SELECT 语句包含多个子句,SELECT 语句在书写时需要遵循一定的顺序,否则会提示语法错误。而在执行过程中,各子句又有相应的执行顺序,在使用字段别名时需要注意各子句的执行顺序。一、数据准备以下查询使用到四张表,分别是:student、teacher、course 和 electives,表结构如下:CREATE TABLE student( s_id char(5) primary key, s原创 2020-11-19 14:47:44 · 785 阅读 · 7 评论 -
MySQL讲义第52讲——select 查询之查询练习(十):查询选修了周华建同学选修的全部课程的学生信息
MySQL讲义第52讲——select 查询之常见查询练习(十):查询选修了周华建同学选修的全部课程的学生信息以下查询使用到四张表,分别是:student、teacher、course 和 electives,表结构如下:CREATE TABLE student( s_id char(5) primary key, s_name char(20), birth datetime, phone char(20), addr varchar(100));INS原创 2020-11-11 11:15:46 · 696 阅读 · 3 评论 -
MySQL讲义第51讲——select 查询之查询练习(九):查询选修了全部课程的学生信息
MySQL讲义第51讲——select 查询之查询练习(九):查询选修了全部课程的学生信息以下查询使用到四张表,分别是:student、teacher、course 和 electives,表结构如下:CREATE TABLE student( s_id char(5) primary key, s_name char(20), birth datetime, phone char(20), addr varchar(100));INSERT INTO s原创 2020-11-11 10:10:41 · 2085 阅读 · 0 评论 -
MySQL讲义第50讲——select 查询之查询练习(八):查询每门课程成绩前三名的学生信息
MySQL讲义第50讲——select 查询之查询练习(八):查询每门课程成绩前三名的学生信息以下查询使用到四张表,分别是:student、teacher、course 和 electives,表结构如下:CREATE TABLE student( s_id char(5) primary key, s_name char(20), birth datetime, phone char(20), addr varchar(100));INSERT INTO原创 2020-11-09 22:00:36 · 2933 阅读 · 0 评论 -
MySQL讲义第49讲——select 查询之查询练习(七):使用多种方法添加排名
MySQL讲义第49讲——select 查询之常见查询练习(七):使用多种方法添加排名MySQL 没有提供 RANK() 函数,要生成排名,可以使用变量来完成。查询需要使用四张表,分别是:student、teacher、course 和 electives,表结构如下:CREATE TABLE student( s_id char(5) primary key, s_name char(20), birth datetime, phone char(20), a原创 2020-11-09 21:15:29 · 340 阅读 · 0 评论 -
MySQL讲义第 48 讲——select 查询之查询练习(六)
MySQL讲义第 48 讲——select 查询之查询练习(六)以下查询使用到四张表,分别是:student、teacher、course 和 electives,表结构如下:CREATE TABLE student( s_id char(5) primary key, s_name char(20), birth datetime, phone char(20), addr varchar(100));INSERT INTO studentVALUES原创 2020-11-08 20:48:14 · 364 阅读 · 0 评论 -
MySQL讲义第 47 讲——select 查询之查询练习(五)
MySQL讲义第 47 讲——select 查询之查询练习(五)以下查询使用到四张表,分别是:student、teacher、course 和 electives,表结构如下:CREATE TABLE student( s_id char(5) primary key, s_name char(20), birth datetime, phone char(20), addr varchar(100));INSERT INTO studentVALUES原创 2020-11-08 19:17:27 · 395 阅读 · 0 评论 -
MySQL讲义第 46 讲——select 查询之查询练习(四)
MySQL讲义第 46 讲——select 查询之查询练习(四)以下查询使用到四张表,分别是:student、teacher、course 和 electives,表结构如下:CREATE TABLE student( s_id char(5) primary key, s_name char(20), birth datetime, phone char(20), addr varchar(100));INSERT INTO studentVALUES原创 2020-11-08 18:27:49 · 316 阅读 · 0 评论 -
MySQL讲义第 45 讲——select 查询之查询练习(三)
MySQL讲义第 45 讲——select 查询之查询练习(三)以下查询使用到四张表,分别是:student、teacher、course 和 electives,表结构如下:CREATE TABLE student( s_id char(5) primary key, s_name char(20), birth datetime, phone char(20), addr varchar(100));INSERT INTO studentVALUES原创 2020-11-08 13:51:52 · 368 阅读 · 1 评论 -
MySQL讲义第 44 讲——select 查询之查询练习(二)
MySQL讲义第44讲——select 查询之常见查询练习(二)以下查询使用到四张表,分别是:student、teacher、course 和 electives,表结构如下:CREATE TABLE student( s_id char(5) primary key, s_name char(20), birth datetime, phone char(20), addr varchar(100));INSERT INTO studentVALUES原创 2020-11-08 12:12:14 · 387 阅读 · 0 评论 -
MySQL讲义第 43 讲——select 查询之查询练习(一)
MySQL讲义第 38 讲——select 查询之查询练习(一)以下查询使用到四张表,分别是:student、teacher、course 和 electives,表结构如下:CREATE TABLE student( s_id char(5) primary key, s_name char(20), birth datetime, phone char(20), addr varchar(100));INSERT INTO studentVALUES原创 2020-11-07 16:08:55 · 929 阅读 · 1 评论 -
MySQL讲义第 42 讲——select 查询之动态查询
MySQL讲义第 42 讲——select 查询之动态查询在执行查询的过程中,有时需要动态生成 SQL 语句。遇到这种情况可以使用以下方法:step1:把 SQL 语句中动态变化的部分保存到变量中。step2:使用 CONCAT 函数拼接 SQL 语句,把最终拼接好的 SQL 语句保存到一个变量中。step3:执行如下命令:SET @string = CONCAT(....);PREPARE stmt FROM @string;EXECUTE stmt;DROP PREPARE stmt;原创 2020-11-07 13:47:49 · 3175 阅读 · 1 评论 -
MySQL讲义第 41 讲——select 查询之函数(4):流程控制函数
MySQL讲义第41讲——select 查询之函数(4):流程控制函数使用函数可在查询时构造更加灵活的查询条件。MySQL 提供了IF、IFNULL、CASE等流程控制函数,下面对流程控制函数进行详细的介绍并举例说明其用法。一、数据准备在当前数据库中创建一个保存上市公司信息的 listed_company 表,表结构及表中的数据如下:CREATE TABLE listed_company( company_id CHAR(6) PRIMARY KEY, company_abbrev原创 2020-11-05 12:23:59 · 633 阅读 · 2 评论 -
MySQL讲义第 40 讲——select 查询之函数(3):数学函数
MySQL讲义第40讲——select 查询之函数(3):数学函数使用函数可在查询时构造更加灵活的查询条件。MySQL 提供了处理数值型数据的函数,下面对数学函数进行详细的介绍并举例说明其用法。一、数据准备在当前数据库中创建一个保存上市公司信息的 listed_company 表,表结构及表中的数据如下:CREATE TABLE listed_company( company_id CHAR(6) PRIMARY KEY, company_abbreviation CHAR(20)原创 2020-11-05 00:58:36 · 1923 阅读 · 0 评论 -
MySQL讲义第 39 讲——select 查询之函数(2):日期时间型函数
MySQL讲义第39讲——select 查询之函数(2):日期时间型函数使用函数可在查询时构造更加灵活的查询条件。MySQL 提供了处理日期和时间的函数,下面对日期时间函数进行详细的介绍并举例说明其用法。一、数据准备在当前数据库中创建一个保存上市公司信息的 listed_company 表,表结构及表中的数据如下:CREATE TABLE listed_company( company_id CHAR(6) PRIMARY KEY, company_abbreviation CHA原创 2020-11-04 23:17:18 · 1267 阅读 · 0 评论 -
MySQL讲义第 38 讲——select 查询之函数(1):字符串函数
MySQL讲义第 38 讲——select 查询之函数(1):字符串函数使用函数可在查询时构造更加灵活的查询条件。MySQL 提供了处理字符串的函数,下面对字符串函数进行详细的介绍并举例说明其用法。在当前数据库中创建一个 student 表,表结构及表中的数据如下:mysql> desc student;+--------+--------------+------+-----+---------+-------+| Field | Type | Null | Key | D原创 2020-11-01 13:54:50 · 3981 阅读 · 7 评论 -
MySQL讲义第 37 讲——LOAD DATA INFILE 命令
MySQL讲义第 37 讲——LOAD DATA INFILE 命令LOAD DATA INFILE 命令可以结合 SELECT 命令的 INTO OUTFILE 参数完成查询数据的导出和导入。一、LOAD DATA INFILE 命令的格式LOAD DATA INFILE 命令的格式如下:LOAD DATA [LOCAL] INFILE 'file_name'INTO TABLE tbl_nameFIELDS TERMINATED BY 'char';-- 说明:(1)使用 FIELDS原创 2020-10-24 21:14:33 · 8025 阅读 · 1 评论 -
MySQL讲义第 36 讲——select 查询之 INTO OUTFILE参数
MySQL讲义第 36 讲——select 查询之 INTO OUTFILE参数在 SELECT 查询语句中使用 INTO OUTFILE 参数可以将查询结果保存到文本文件中。一、SELECT … INTO OUTFILE 命令的格式SELECT … INTO OUTFILE 命令的格式如下:SELECT ... INTO OUTFILE 'file_name'fields terminated by 'char'; --说明:(1)OUTFILE参数指定的文件所在的路径需要有 m原创 2020-10-24 20:44:39 · 11663 阅读 · 0 评论 -
MySQL讲义第 35 讲——select 查询之正则表达式
MySQL讲义第 35 讲——select 查询之正则表达式正则表达式用来描述或者匹配符合规则的字符串。它的用法和 LIKE 相似,能够实现一些特殊的规则匹配。在MySQL中, 使用 REGEXP 操作符来进行正则表达式匹配。一、正则表达式匹配规则正则表达式常用的字符匹配列表:选项说明例子匹配值示例‘字符串A’包含【字符串A】‘银行’中国银行,交通银行股份有限公司|或者(OR)‘字符串A|字符串B|字符串C’包含【字符串A】 或 【字符串B】 或 【原创 2020-10-24 19:26:59 · 3884 阅读 · 3 评论 -
MySQL讲义第 34 讲——select 查询之动态交叉表查询
MySQL讲义第 34 讲——select 查询之动态交叉表查询交叉表分为静态交叉表和动态交叉表。静态交叉表中的列是固定的,而且要提前确定要进行行列转换的列中的数据内容,在使用中灵活性不够。动态交叉表中的列根据要进行行列转换的列中的数据动态生成,不用提前确定该列的数据内容,甚至不用知道该列的数据是什么。一、实现动态交叉表的基本原理实现动态交叉表的基本思想为:使用 GROUP_CONCAT 函数取出要进行行列转换的列中的所有数据,再使用 CONCAT 函数拼接成和静态交叉表查询相同的 SELECT原创 2020-10-22 17:43:54 · 993 阅读 · 0 评论 -
MySQL讲义第 33 讲——select 查询之静态交叉表查询
MySQL讲义第33讲——select 查询之静态交叉表查询交叉表查询是将来源于某个表中的字段进行分组,一组列在交叉表左侧,一组列在交叉表上部,并在交叉表行与列交叉处显示表中某个字段的各种计算值。交叉表分为静态交叉表和动态交叉表,其中静态交叉表中的列是固定的,而动态交叉表中的列需要动态生成。使用交叉表查询来计算和重构数据,可以简化数据分析。交叉表查询计算数据的总和,平均值,计数及其他类型的统计,并将它们分组,一组列在数据表左侧作为交叉表的行字段,另一组列在数据表的顶端作为交叉表的列字段。一、数据准备原创 2020-10-22 15:54:57 · 1394 阅读 · 2 评论 -
MySQL讲义第 32 讲——select 查询之 select 语句的执行顺序
MySQL讲义第 32 讲——select 查询之 select 语句的执行顺序SELECT 语句中各个子句的执行顺序与 SELECT 语句中子句的语法顺序是不一样的。一、SELECT 语句的语法顺序SELECT 语句在书写时各个关键字要保持下面的顺序:select [distinct] 字段或表达式列表from 表名 join(left join, right join) on 连接条件where 筛选条件group by 字段列表having 字段列表order by 字段列表lim原创 2020-10-21 23:07:35 · 712 阅读 · 0 评论 -
MySQL讲义第 31 讲—— DML 语句与 select 查询
MySQL讲义第 31 讲—— DML 语句与 select 查询DML 语句实现对表中数据的更新操作,包括 INSERT(插入记录)、DELETE(删除记录)、UPDATE(更新数据)。DML 语句结合 select 查询,可以实现一些复杂的操作。一、 INSERT … SELECT 语句该命令可以把一个查询的结果插入到一张表中。语法格式如下:INSERT INTO 表名 SELECT 语句;例如:有下面两张表,把 salary 表的 e_id,e_name,salary 三个字段对应的数据原创 2020-10-21 21:44:13 · 528 阅读 · 0 评论 -
MySQL讲义第 30 讲——select 查询之子查询
MySQL讲义第30讲——select 查询之子查询在一个 select 语句中嵌入另外一个 select 语句,被嵌入的 select 语句称之为子查询。子查询要么充当条件,要么充当主查询的数据源。根据子查询返回的结果可以把子查询分为以下几类:(1)标量子查询:子查询结果是一个数据(单行单列)。(2)列子查询:子查询结果是一列(多行单列)。(3)表子查询:子查询结果是一张临时表(多行多列)。(4)exists 子查询:根据子查询是否有返回值决定主查询的返回结果。一、标量子查询标量子查询的结果原创 2020-10-20 22:45:44 · 631 阅读 · 0 评论 -
MySQL讲义第 29 讲——select 查询之GROUP BY
MySQL讲义第 29 讲——select 查询之GROUP BY使用 GROUP BY 关键字可以将查询结果按照某个字段或多个字段进行分组。分组的依据为 GROUP BY 后面的字段中取值相等的分为一组。GROUP BY 通常与聚合函数一起使用。语法格式如下:GROUP BY 字段名|表达式 [HAVING 条件表达式] [WITH ROLLUP]说明:(1)使用分组查询时,select后面的字段列表只能包含 GROUP BY 后面的字段名或表达式以及聚合函数,不能包含其他字段或表达式,否则会报原创 2020-10-20 12:26:50 · 1679 阅读 · 0 评论 -
MySQL讲义第28讲——select 查询之聚合函数
MySQL讲义第28讲——select 查询之聚合函数聚合函数又称为统计函数,可以对查询结果进行统计和汇总,对一组值进行计算并返回一个单一的值。聚合函数经常与 GROUP BY 子句一同使用。常用的聚合函数包括SUM、COUNT、AVG、MAX 和 MIN,实现对表中数据的统计(求和、计数、平均值、最大值和最小值等)。一、count( ) 函数count( ) 函数统计记录数量并返回,常与 GROUP BY 子句连用。格式如下:count(distinct *|字段名|表达式)--使用count(原创 2020-10-20 11:05:26 · 566 阅读 · 0 评论 -
MySQL讲义第27讲——select 查询之自连接查询
MySQL讲义第27讲——select 查询之自连接查询顾名思义,自连接查询就是一张表和自己进行连接。就是把一张表看成两张表,使用别名进行区分。一、数据准备创建一张员工(emp)表,每个员工都有一个部门领导(leader),数据如下:mysql> select * from emp;+------+-----------+--------+---------+--------+| e_id | e_name | gender | salary | leader |+------+原创 2020-10-19 23:51:11 · 654 阅读 · 0 评论 -
MySQL讲义第 26 讲——select 查询之多表连接查询
MySQL讲义第 26 讲——select 查询之多表连接查询对多张表进行连接查询可以这样理解:先进行两张表的连接查询生成一张新表,然后用这张新表再和第三张表进行连接查询,以此类推。语法格式如下:....FROM(表1 [inner] join 表2 on 表1.外键 = 表2.主键)[inner] join 表3 on 表2.外键 = 表3.主键...例如:使用 dept、stu、course、score 四张表查询学生的成绩信息,查询结果包含 stu_id,stu_name,dept_i原创 2020-10-19 23:29:25 · 453 阅读 · 0 评论 -
MySQL讲义第 25 讲——select 查询之连接查询
MySQL讲义第 25 讲——select 查询之连接查询连接查询就是从多张表中查询数据,通常进行连接的两张表中的数据具有一对多的联系,依靠子表中的外键和对应的父表中的主键建立关联条件。一、交叉连接(CROSS JOIN)交叉连接(CROSS JOIN)又称为关系的笛卡儿积。是用左表中的每一行与右表中的每一行进行连接,所得到的结果是这两个表中各行数据的所有组合。例如:mysql> select * from dept;+---------+--------------+| dept_id原创 2020-10-19 23:13:44 · 701 阅读 · 0 评论 -
MySQL讲义第24讲——select 查询之分页查询(LIMIT)
MySQL讲义第24讲——select 查询之分页查询(LIMIT)使用 LIMIT 可以返回前几行或者中间某几行数据。其语法格式如下:LIMIT [offset,] rows或者LIMIT rows OFFSET offset 说明:(1)LIMIT 接受一个或两个整型数字参数。(2)第一条记录的偏移量为 0。(3)如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目。(4)如果只给定一个参数,则从第一条记录开始返回若干条记录。stu 表的原创 2020-10-19 23:12:40 · 781 阅读 · 0 评论 -
MySQL讲义第23讲——select 查询之ORDER BY
MySQL讲义第23讲——select 查询之ORDER BYORDER BY 语句用于对查询结果进行排序。默认按照升序对记录进行排序,如果希望按照降序对记录进行排序,可以使用 DESC 关键字。语法格式如下:ORDER BY字段名或表达式 [DESC] [,...]一、按单个字段排序1、查询所有学生信息,按姓名排序mysql> SELECT -> * -> FROM -> stu -> ORDER BY -> con原创 2020-10-19 22:36:03 · 1611 阅读 · 0 评论 -
MySQL讲义第22讲——select 查询之 LIKE 与通配符
MySQL讲义第22讲——select 查询之 LIKE 与通配符在搜索数据库中的数据时,SQL 通配符可以替代一个或多个字符。SQL 通配符必须与 LIKE 运算符一起使用。可使用以下通配符:通配符描述百分号( % )替代一个或多个字符下划线( _ )仅替代一个字符一、百分号( % )查询时表示在该位置可以是任意个(0 - n 个)任意字符,必须和 LIKE 运算符一起使用。例如:1、查询【姓王】的学生信息mysql> SELECT ->原创 2020-10-19 21:24:26 · 1615 阅读 · 0 评论 -
MySQL讲义第21讲——select 查询之查询条件
MySQL讲义第21讲——select 查询之查询条件在 MySQL 中,如果需要从数据表中查询满足某个条件的数据,可以使用 WHERE 关键字来指定查询条件。一、比较运算符和逻辑运算符可以使用比较运算符和逻辑运算符构造查询的条件。1、比较运算符比较运算符可以对两个数据的值进行比较,常用的比较运算符如下:比较运算符描述=等于<> 或 !=不等于>大于<小于>=大于等于<=小于等于BETWE原创 2020-10-19 20:50:17 · 650 阅读 · 0 评论 -
MySQL讲义第20讲——select 查询之字段或表达式列表
MySQL讲义第20讲——select 查询之字段或表达式列表在 select 查询语句中可以指定需要显示的字段,也可以利用字段名、运算符、函数等构造表达式。一、显示表中的所有字段如果需要显示表中的所有字段,可以使用字段列表把所有字段列出来,也可以使用(*)表示。如:mysql> SELECT -> * -> FROM -> stu;+-----------+-----------+--------+---------------------+--原创 2020-10-18 22:03:10 · 1678 阅读 · 1 评论 -
MySQL讲义第19讲—— select 查询之 select 语法
MySQL讲义第19讲—— 查询(select)之 select 语法MySQL 使用 SELECT 语句查询数据。查询数据是指从数据库中根据需求,使用不同的查询方式来获取不同的数据,是 MySQL 中最重要的操作。一、SELECT 语句的语法SELECT DISTINCT <字段或表达式列表>FROM <表名> <连接类型>JOIN <表名> ON <连接条件>WHERE <筛选条件>GROUP原创 2020-10-18 21:34:15 · 824 阅读 · 0 评论 -
MySQL讲义第18讲——使用explain命令查看与分析索引的使用情况
MySQL讲义第18讲——使用explain命令查看与分析索引的使用情况在查询语句中使用 explain 关键字,可以查看索引是否正在被使用,有没有做全表扫描,并且输出使用的索引信息。语法格式如下:explain select 语句;一、数据准备有一个 emp 表,表中的索引信息如下:mysql> show index from emp;+-------+------------+--------------+--------------+-------------+---------原创 2020-10-08 08:11:58 · 1970 阅读 · 3 评论