Mysql数据库 | SQL语句解析『下篇』

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: Mysql数据库 | SQL语句解析

DML


数据操作语言,凡是对数据进行增删改操作的语句都是DML


insert delete update


insert 增


delete 删


update 改


这个主要操作表中的data


数据表记录的插入


  • 插入完整记录
mysql> desc xs;
+----------+------------------+------+-----+---------+-------+
| Field    | Type             | Null | Key | Default | Extra |
+----------+------------------+------+-----+---------+-------+
| 学号     | char(6)          | NO   | PRI | NULL    |       |
| 姓名     | char(8)          | NO   |     | NULL    |       |
| 专业名   | varchar(20)      | YES  |     | NULL    |       |
| 性别     | char(2)          | NO   |     | 男      |       |
| 出生日期 | date             | NO   |     | NULL    |       |
| 总学分   | tinyint unsigned | YES  |     | NULL    |       |
| 备注     | text             | YES  |     | NULL    |       |
+----------+------------------+------+-----+---------+-------+
7 rows in set (0.01 sec)
mysql> insert into xs values('200201','张明','计算机应用技术','男','1998-8-5','9','学习委员');
Query OK, 1 row affected (0.01 sec)
  • 插入数据就录的一部分
mysql> insert into xs(学号,姓名,性别,出生日期) values('200326','唐辉阳','男','2003-2-6');
Query OK, 1 row affected (0.01 sec)

插入多行数据

mysql> insert into xs(学号,姓名,性别,出生日期)
    -> values
    -> ('200336','李昌城','男','2003-6-3'),
    -> ('200327','徐斌','男','2003-3-5'),
    -> ('200308','郑明鑫','男','2003-4-5');
Query OK, 3 rows affected (0.01 sec)
Records: 3  Duplicates: 0  Warnings: 0

数据表记录的修改

mysql> update xs
    -> set 姓名='魏硕' where 学号='200201';
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

数据表记录的删除


  • 使用delete语句删除数据
mysql> delete from xs
    -> where 姓名='高远';
Query OK, 1 row affected (0.01 sec)

使用truncate语句删除数据


(清空数据记录)

mysql> select * from sss;
+-------+-------+---------+------+--------+
| uid   | uname | ugender | uedu | upor   |
+-------+-------+---------+------+--------+
| 11111 | tang  | n       | bk   |        |
| 22222 | zhang | n       | bk   | 副教授 |
+-------+-------+---------+------+--------+
2 rows in set (0.00 sec)
mysql> truncate sss;
Query OK, 0 rows affected (0.04 sec)
mysql> select * from sss;
Empty set (0.01 sec)

DDL


数据定义语言,凡是带create,drop,alter的都是DDL


DDL主要操作的是表的结构,不是表中的数据


create 增


drop 删


alter 改


这个增删改和DML不同,主要是对表的结构进行操作


alter 改

  • 修改数据表名
alter table cj rename 成绩表;
  • 修改字段名和数据类型


语法格式:

     alter  table  表名  change  旧字段名  新字段名  新数据类型;
alter table 信息管理学生表 change 专业名 zym varchar(15);
  • 修改字段的数据类型


语法格式:

     alter  table  表名  modify  字段名  新数据类型;
alter table 信息管理学生表 modify zy varchar(20);
  • 添加字段


语法格式:

     alter  table 表名  add  新字段名 新数据类型  [约束条件]  [first | after 已经存在的字段名];
alter  table  xs  drop  备注;

create 增


  • 根据查询创建数据表
create table 软件技术 select 学号,姓名,性别,出生日期,总学分,备注 from xs where 专业名='软件技术';

drop 删


  • 删除表
create table zyrs like xs;
drop table zyrs;

TCL


事务控制语言


包括:

 事务提交:commit;
 事务回滚:rollback;

DCL


数据控制语言


例如:授权grant、撤销权限revoke……


导入数据库

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| cjgl               |
| cjgl1              |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| tang               |
+--------------------+
7 rows in set (0.00 sec)
mysql> use cjgl1;
Database changed
mysql> source D:\Program Files\QQ files\cjgl-bak.sql
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected, 1 warning (0.04 sec)
Query OK, 0 rows affected (0.04 sec)
Query OK, 0 rows affected (0.05 sec)
Query OK, 0 rows affected (0.05 sec)
Query OK, 29 rows affected (0.05 sec)
Records: 29  Duplicates: 0  Warnings: 0
Query OK, 0 rows affected (0.06 sec)
Query OK, 0 rows affected (0.06 sec)
Query OK, 0 rows affected (0.06 sec)
Query OK, 0 rows affected (0.06 sec)
Query OK, 0 rows affected (0.06 sec)

数据处理函数


数据处理函数又被称为单行处理函数


单行处理函数的特点:一个输入对应一个输出


和单行处理函数相对的是:多行处理函数(多行处理函数的特点:多个输入,对应一个输出!)


单行处理函数


  • lower 转换小写
mysql> select lower(课程名) 课程名,开课学期 from kc where 课程号=212;
+--------------+----------+
| 课程名       | 开课学期 |
+--------------+----------+
| oracle数据库 |        2 |
+--------------+----------+
1 row in set (0.01 sec)
mysql> select 课程名,开课学期 from kc where 课程号=212;
+--------------+----------+
| 课程名       | 开课学期 |
+--------------+----------+
| ORACLE数据库 |        2 |
+--------------+----------+
1 row in set (0.00 sec)

upper 转换大写

mysql> select upper(课程名) 课程名,开课学期 from kc;
+--------------+----------+
| 课程名       | 开课学期 |
+--------------+----------+
| 计算机基础   |        1 |
| C语言        |        1 |
| 高等数学     |        3 |
| 数据结构     |        5 |
| 操作系统     |        6 |
| 计算机组装   |        4 |
| ORACLE数据库 |        2 |
| 计算机网络   |        1 |
| 软件工程     |        7 |
+--------------+----------+
9 rows in set (0.01 sec)
mysql> select 课程名,开课学期 from kc;
+--------------+----------+
| 课程名       | 开课学期 |
+--------------+----------+
| 计算机基础   |        1 |
| c语言        |        1 |
| 高等数学     |        3 |
| 数据结构     |        5 |
| 操作系统     |        6 |
| 计算机组装   |        4 |
| ORACLE数据库 |        2 |
| 计算机网络   |        1 |
| 软件工程     |        7 |
+--------------+----------+
9 rows in set (0.00 sec)

substr取子串

#模糊查询课程号中第二位为零的行
mysql> select 课程号 from kc where substr(课程号,2,1)='0';
+--------+                           从课程号中第2位开始,取1位
| 课程号 |
+--------+
| 102    |
| 209    |
| 208    |
| 101    |
| 301    |
| 302    |
| 206    |
+--------+
7 rows in set (0.00 sec)

concat字符串拼接

mysql> select concat('Hello','World') result;
+------------+
| result     |
+------------+
| HelloWorld |
+------------+
1 row in set (0.00 sec)

length取长度

mysql> select length('hhgjfgks') as result;
+--------+
| result |
+--------+
|      8 |
+--------+
1 row in set (0.00 sec)

trim去空格

mysql> select trim('   hkhhukhhyiyy  ') result;
+--------------+
| result       |
+--------------+
| hkhhukhhyiyy |
+--------------+
1 row in set (0.00 sec)

首字母小写

mysql> select concat(lower(substr(课程名,1,1)),substr(课程名,2,length(课程名)-1)) as result from kc where 课程号='212';
+--------------+
| result       |
+--------------+
| oRACLE数据库 |
+--------------+
1 row in set (0.00 sec)
mysql> select 课程名 from kc where 课程号='212';
+--------------+
| 课程名       |
+--------------+
| ORACLE数据库 |
+--------------+
1 row in set (0.00 sec)
  • str_to_date将字符串转化成日期


  • date_format格式化日期


  • format设置千分位


  • round四舍五入
mysql> select round(3.6) as result;
+--------+
| result |
+--------+
|      4 |
+--------+
1 row in set (0.00 sec)
mysql> select round(3.764,2) as result;  //四舍五入保留两位小数
+--------+
| result |
+--------+
|   3.76 |
+--------+
1 row in set (0.00 sec)

rand()生成随机数

mysql> select round(rand(),1) 随机数 from kc;//生成0到1之间的随机数,保留一位小数
+--------+
| 随机数 |
+--------+
|    0.9 |
|      0 |
|    0.4 |
|    0.8 |
|    0.8 |
|    0.6 |
|    0.5 |
|    0.8 |
|    0.6 |
+--------+
9 rows in set (0.00 sec)
mysql> select round(rand()*100,0) result from kc;  //100以内随机数
+--------+
| result |
+--------+
|      6 |
|     76 |
|     60 |
|     76 |
|     97 |
|     58 |
|     98 |
|     19 |
|     98 |
+--------+
9 rows in set (0.00 sec)
  • ifnull函数


可以将null转化成一个具体的值


注意:


null如果参与运算,最终结果一定是null。为了避免这一现象,需要ifnull函数。


ifnull函数用法:


ifnull(数据,被当做那个值)


如果“数据”为null是,那么这个数据结构当做那个值

mysql> select 6 + ifnull(备注,8)  result from xs;
+--------+
| result |
+--------+
|     14 |
|     14 |
|     14 |
|     14 |
|     14 |
|     14 |
|     14 |
|     14 |
|      6 |
|     14 |
|      6 |
|     14 |
|      6 |
|     14 |
|     14 |
|     14 |
|     14 |
|     14 |
|     14 |
|     14 |
+--------+
20 rows in set (0.00 sec)

case…when…then…when…then…else…end

mysql> select 开课学期,学分 from kc;
+----------+------+
| 开课学期 | 学分 |
+----------+------+
|        1 |    3 |
|        1 |    3 |
|        3 |    3 |
|        5 |    6 |
|        6 |    3 |
|        4 |    4 |
|        2 |    5 |
|        1 |    4 |
|        7 |    2 |
+----------+------+
9 rows in set (0.00 sec)
mysql> select  开课学期,(case 开课学期 when '1' then 学分+1 when '2' then 学分+2 else 学分 end) new from kc;
+----------+------+
| 开课学期 | new  |
+----------+------+
|        1 |    4 |
|        1 |    4 |
|        3 |    3 |
|        5 |    6 |
|        6 |    3 |
|        4 |    4 |
|        2 |    7 |
|        1 |    5 |
|        7 |    2 |
+----------+------+
9 rows in set (0.00 sec)

分组函数(多行处理函数)


多行处理函数的特点:输入多行,最终输出一行


count 计数


sum 求和


avg 平均值


max 最大值


min 最小值

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
21天前
|
SQL 关系型数据库 MySQL
MySQL进阶突击系列(07) 她气鼓鼓递来一条SQL | 怎么看执行计划、SQL怎么优化?
在日常研发工作当中,系统性能优化,从大的方面来看主要涉及基础平台优化、业务系统性能优化、数据库优化。面对数据库优化,除了DBA在集群性能、服务器调优需要投入精力,我们研发需要负责业务SQL执行优化。当业务数据量达到一定规模后,SQL执行效率可能就会出现瓶颈,影响系统业务响应。掌握如何判断SQL执行慢、以及如何分析SQL执行计划、优化SQL的技能,在工作中解决SQL性能问题显得非常关键。
|
21天前
|
SQL 存储 关系型数据库
MySQL原理简介—1.SQL的执行流程
本文介绍了MySQL驱动、数据库连接池及SQL执行流程的关键组件和作用。主要内容包括:MySQL驱动用于建立Java系统与数据库的网络连接;数据库连接池提高多线程并发访问效率;MySQL中的连接池维护多个数据库连接并进行权限验证;网络连接由线程处理,监听请求并读取数据;SQL接口负责执行SQL语句;查询解析器将SQL语句解析为可执行逻辑;查询优化器选择最优查询路径;存储引擎接口负责实际的数据操作;执行器根据优化后的执行计划调用存储引擎接口完成SQL语句的执行。整个流程确保了高效、安全地处理SQL请求。
162 76
|
1月前
|
关系型数据库 MySQL 数据库连接
数据库连接工具连接mysql提示:“Host ‘172.23.0.1‘ is not allowed to connect to this MySQL server“
docker-compose部署mysql8服务后,连接时提示不允许连接问题解决
|
20天前
|
关系型数据库 MySQL 数据库
Docker Compose V2 安装常用数据库MySQL+Mongo
以上内容涵盖了使用 Docker Compose 安装和管理 MySQL 和 MongoDB 的详细步骤,希望对您有所帮助。
116 42
|
11天前
|
关系型数据库 MySQL 网络安全
如何排查和解决PHP连接数据库MYSQL失败写锁的问题
通过本文的介绍,您可以系统地了解如何排查和解决PHP连接MySQL数据库失败及写锁问题。通过检查配置、确保服务启动、调整防火墙设置和用户权限,以及识别和解决长时间运行的事务和死锁问题,可以有效地保障应用的稳定运行。
65 25
|
6天前
|
SQL 关系型数据库 MySQL
数据库数据恢复——MySQL简介和数据恢复案例
MySQL数据库数据恢复环境&故障: 本地服务器,安装的windows server操作系统。 操作系统上部署MySQL单实例,引擎类型为innodb,表空间类型为独立表空间。该MySQL数据库没有备份,未开启binlog。 人为误操作,在用Delete命令删除数据时未添加where子句进行筛选导致全表数据被删除,删除后未对该表进行任何操作。
|
6天前
|
SQL Oracle 关系型数据库
【YashanDB 知识库】如何将 mysql 含有 group by 的 SQL 转换成崖山支持的 SQL
在崖山数据库中执行某些 SQL 语句时出现报错(YAS-04316 not a single-group group function),而这些语句在 MySQL 中能成功执行。原因是崖山遵循 SQL-92 标准,不允许选择列表中包含未在 GROUP BY 子句中指定的非聚合列,而 MySQL 默认允许这种操作。解决办法包括:使用聚合函数处理非聚合列或拆分查询为两层,先进行 GROUP BY 再排序。总结来说,SQL-92 更严格,确保数据一致性,MySQL 在 5.7 及以上版本也默认遵循此标准。
|
16天前
|
SQL 存储 关系型数据库
MySQL原理简介—10.SQL语句和执行计划
本文介绍了MySQL执行计划的相关概念及其优化方法。首先解释了什么是执行计划,它是SQL语句在查询时如何检索、筛选和排序数据的过程。接着详细描述了执行计划中常见的访问类型,如const、ref、range、index和all等,并分析了它们的性能特点。文中还探讨了多表关联查询的原理及优化策略,包括驱动表和被驱动表的选择。此外,文章讨论了全表扫描和索引的成本计算方法,以及MySQL如何通过成本估算选择最优执行计划。最后,介绍了explain命令的各个参数含义,帮助理解查询优化器的工作机制。通过这些内容,读者可以更好地理解和优化SQL查询性能。
|
1月前
|
SQL Java 数据库连接
如何在 Java 代码中使用 JSqlParser 解析复杂的 SQL 语句?
大家好,我是 V 哥。JSqlParser 是一个用于解析 SQL 语句的 Java 库,可将 SQL 解析为 Java 对象树,支持多种 SQL 类型(如 `SELECT`、`INSERT` 等)。它适用于 SQL 分析、修改、生成和验证等场景。通过 Maven 或 Gradle 安装后,可以方便地在 Java 代码中使用。
327 11
|
2月前
|
SQL 存储 关系型数据库
【MySQL基础篇】全面学习总结SQL语法、DataGrip安装教程
本文详细介绍了MySQL中的SQL语法,包括数据定义(DDL)、数据操作(DML)、数据查询(DQL)和数据控制(DCL)四个主要部分。内容涵盖了创建、修改和删除数据库、表以及表字段的操作,以及通过图形化工具DataGrip进行数据库管理和查询。此外,还讲解了数据的增、删、改、查操作,以及查询语句的条件、聚合函数、分组、排序和分页等知识点。
【MySQL基础篇】全面学习总结SQL语法、DataGrip安装教程

热门文章

最新文章

推荐镜像

更多