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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云解析 DNS,旗舰版 1个月
简介: 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
目录
相关文章
|
18天前
|
SQL 关系型数据库 MySQL
深入解析MySQL的EXPLAIN:指标详解与索引优化
MySQL 中的 `EXPLAIN` 语句用于分析和优化 SQL 查询,帮助你了解查询优化器的执行计划。本文详细介绍了 `EXPLAIN` 输出的各项指标,如 `id`、`select_type`、`table`、`type`、`key` 等,并提供了如何利用这些指标优化索引结构和 SQL 语句的具体方法。通过实战案例,展示了如何通过创建合适索引和调整查询语句来提升查询性能。
118 9
|
11天前
|
SQL 存储 关系型数据库
【MySQL基础篇】全面学习总结SQL语法、DataGrip安装教程
本文详细介绍了MySQL中的SQL语法,包括数据定义(DDL)、数据操作(DML)、数据查询(DQL)和数据控制(DCL)四个主要部分。内容涵盖了创建、修改和删除数据库、表以及表字段的操作,以及通过图形化工具DataGrip进行数据库管理和查询。此外,还讲解了数据的增、删、改、查操作,以及查询语句的条件、聚合函数、分组、排序和分页等知识点。
【MySQL基础篇】全面学习总结SQL语法、DataGrip安装教程
|
17天前
|
SQL Oracle 数据库
使用访问指导(SQL Access Advisor)优化数据库业务负载
本文介绍了Oracle的SQL访问指导(SQL Access Advisor)的应用场景及其使用方法。访问指导通过分析给定的工作负载,提供索引、物化视图和分区等方面的优化建议,帮助DBA提升数据库性能。具体步骤包括创建访问指导任务、创建工作负载、连接工作负载至访问指导、设置任务参数、运行访问指导、查看和应用优化建议。访问指导不仅针对单条SQL语句,还能综合考虑多条SQL语句的优化效果,为DBA提供全面的决策支持。
44 11
|
20天前
|
存储 关系型数据库 MySQL
double ,FLOAT还是double(m,n)--深入解析MySQL数据库中双精度浮点数的使用
本文探讨了在MySQL中使用`float`和`double`时指定精度和刻度的影响。对于`float`,指定精度会影响存储大小:0-23位使用4字节单精度存储,24-53位使用8字节双精度存储。而对于`double`,指定精度和刻度对存储空间没有影响,但可以限制数值的输入范围,提高数据的规范性和业务意义。从性能角度看,`float`和`double`的区别不大,但在存储空间和数据输入方面,指定精度和刻度有助于优化和约束。
|
29天前
|
SQL 存储 缓存
MySQL进阶突击系列(02)一条更新SQL执行过程 | 讲透undoLog、redoLog、binLog日志三宝
本文详细介绍了MySQL中update SQL执行过程涉及的undoLog、redoLog和binLog三种日志的作用及其工作原理,包括它们如何确保数据的一致性和完整性,以及在事务提交过程中各自的角色。同时,文章还探讨了这些日志在故障恢复中的重要性,强调了合理配置相关参数对于提高系统稳定性的必要性。
|
28天前
|
SQL 关系型数据库 MySQL
MySQL 高级(进阶) SQL 语句
MySQL 提供了丰富的高级 SQL 语句功能,能够处理复杂的数据查询和管理需求。通过掌握窗口函数、子查询、联合查询、复杂连接操作和事务处理等高级技术,能够大幅提升数据库操作的效率和灵活性。在实际应用中,合理使用这些高级功能,可以更高效地管理和查询数据,满足多样化的业务需求。
109 3
|
1月前
|
SQL 关系型数据库 MySQL
MySQL导入.sql文件后数据库乱码问题
本文分析了导入.sql文件后数据库备注出现乱码的原因,包括字符集不匹配、备注内容编码问题及MySQL版本或配置问题,并提供了详细的解决步骤,如检查和统一字符集设置、修改客户端连接方式、检查MySQL配置等,确保导入过程顺利。
|
29天前
|
SQL 监控 安全
SQL Servers审核提高数据库安全性
SQL Server审核是一种追踪和审查SQL Server上所有活动的机制,旨在检测潜在威胁和漏洞,监控服务器设置的更改。审核日志记录安全问题和数据泄露的详细信息,帮助管理员追踪数据库中的特定活动,确保数据安全和合规性。SQL Server审核分为服务器级和数据库级,涵盖登录、配置变更和数据操作等事件。审核工具如EventLog Analyzer提供实时监控和即时告警,帮助快速响应安全事件。
|
13天前
|
存储 Oracle 关系型数据库
数据库传奇:MySQL创世之父的两千金My、Maria
《数据库传奇:MySQL创世之父的两千金My、Maria》介绍了MySQL的发展历程及其分支MariaDB。MySQL由Michael Widenius等人于1994年创建,现归Oracle所有,广泛应用于阿里巴巴、腾讯等企业。2009年,Widenius因担心Oracle收购影响MySQL的开源性,创建了MariaDB,提供额外功能和改进。维基百科、Google等已逐步替换为MariaDB,以确保更好的性能和社区支持。掌握MariaDB作为备用方案,对未来发展至关重要。
39 3
|
13天前
|
安全 关系型数据库 MySQL
MySQL崩溃保险箱:探秘Redo/Undo日志确保数据库安全无忧!
《MySQL崩溃保险箱:探秘Redo/Undo日志确保数据库安全无忧!》介绍了MySQL中的三种关键日志:二进制日志(Binary Log)、重做日志(Redo Log)和撤销日志(Undo Log)。这些日志确保了数据库的ACID特性,即原子性、一致性、隔离性和持久性。Redo Log记录数据页的物理修改,保证事务持久性;Undo Log记录事务的逆操作,支持回滚和多版本并发控制(MVCC)。文章还详细对比了InnoDB和MyISAM存储引擎在事务支持、锁定机制、并发性等方面的差异,强调了InnoDB在高并发和事务处理中的优势。通过这些机制,MySQL能够在事务执行、崩溃和恢复过程中保持
42 3

推荐镜像

更多