【收藏级】MySQL 100条命令,基本操作的所有内容(常看常新)(四)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 【收藏级】MySQL 100条命令,基本操作的所有内容(常看常新)(四)

11.1.2、用户变量

用户变量指用户自己定义的变量,可以给用户变量分配值。可以使用set 和 select语句定义赋值(不赋值默认为空值),其中 select 语句还可以查看所赋的值。

变量作用范围:当前连接的会话范围(如果断开当前的连接,那么之前定义的变量将无法访问)。

定义用户变量的形式:以’@‘开始,如:“@var_name”,从而区分用户变量和表中列名。可以使用 '=',':=' 操作符赋值。如果使用 select 语句必须使用 ':=' 操作符赋值

语法:

set @var_name = value1 [ , @var_name = value2];

set @var_name := value1 [ , @var_name := value2];

set语句

mysql> set @test=123;  
Query OK, 0 rows affected (0.00 sec)
mysql> select @test;
+-------+
| @test |
+-------+
|   123 |
+-------+
1 row in set (0.00 sec)
mysql> set @var1=1,@var2=2;
Query OK, 0 rows affected (0.00 sec)
mysql> select @var1,@var2;
+-------+-------+
| @var1 | @var2 |
+-------+-------+
|     1 |     2 |
+-------+-------+
1 row in set (0.00 sec)

select语句

mysql> select @var:=1,@var:=2;
+---------+---------+
| @var:=1 | @var:=2 |
+---------+---------+
|       1 |       2 |
+---------+---------+
1 row in set, 2 warnings (0.00 sec)
mysql> select @var,@var;
+------+------+
| @var | @var |
+------+------+
|    2 |    2 |
+------+------+
1 row in set (0.00 sec)

11.2、SQL系统函数

11.2.1、条件判断函数

if函数

语法:if(expr1,expr2,expr3)

如果表达式的结果是true(布尔类型),则返回expr2的值,否则返回expr3的值。

case结构

case case_expr
  when when_value then statement_list
  [ when when_value then statement_list ]...
end case

case_expr:条件判断表达式,决定哪一个 when 被执行。 when_value:表示表达式可能的值,如果某个 when_value 值与case_expr表达式值结果相同,则执行对应 then 关键字后的 statement_list 语句。

11.2.2、数学函数

常用的一种函数。主要用于处理数字,包括整型、浮点数等

数学函数

11.2.3、字符串函数

字符串函数是非常常用的一种函数。针对数据类型 数据的处理。

字符串函数

11.2.4、日期函数

日期函数

11.2.5、聚合函数

一般作用在指定字段上。

聚合函数

11.3、自定义函数

在函数种可以使用 if、case、loop、repeat、while、for语句,这部分内容请自行了解。

11.3.1、创建函数

语法:

create function func_name(func_parameter)
returns type
 body

create function:创建函数的关键字

func_name:函数名称

func_parameter:函数参数列表,形式为 (param_nae type),如:(num1 int,num2 int)

type:函数放回值类型,如:int、char(50)等。

body一般格式为,如下:

begin
   retrun(select 查询语句);
end

delimiter 定界符: MySQL默认定界符是分号 ‘;’ 。使用 delimiter 语句,可以修改默认定界符

例子:

创建一个函数,查询某读者的年龄。

delimiter $ 
create function func_reader_age2(name char(50))
returns int
begin
return(select year(curdate())-year(reader_birthday) from t_reader where reader_name=name);
end $
delimiter ;
select func_reader_age2("肖华");

11.3.2、删除函数

drop function function_name;

十二、触发器

触发器自动执行时,以响应特定事件的存储程序。(特定事件:对数据库表的增删改)

触发器可以被定义在INSERT、UPDATE、DELETE语句更改数据表之前或之后被自动执行。

12.1、创建触发器

语法:CREATE TRIGGER trigger_name trigger_time trigger_event ON table_name FOR EACH ROW [trigger_order] trigger_body

参数详解:

trigger_time:中发器执行的时间:AFTER(之后) | BEFORE(之前)

trigger_event:触发器触发的事件:DELETE | UPDATE | INSERT

FOR EACH ROW:表示任何一条记录上的操作满足触发事件都会触发该触发器

table_name:表元触发事件操作表的名字

trigger_body:创建触发器的SQL语句

(1)创建Insert触发器,每向t_student中插入一条记录后,则向t_log表中插入该表的表名t_student和插入的时间。

CREATE TABLE t_log  
(logno int AUTO_INCREMENT primary key,    
tname varchar(20),    
logtime datetime);
SELECT * FROM t_log;
create trigger tr_insert after insert on t_student for each row 
insert into t_log (tname,logtime) VALUES('t_student',now());
insert into t_student(stu_id) values("0123456789");
select * from t_student;
select  * from t_log;

(2)创建一个t_score1表的插入触发器,当向t_score1表中插入一条数据时,在t_student1自动添加一条stu_id对应的记录,在t_cours1e中自动添加一条course_id对应的记录。

create table t_score1 like t_score;
insert into t_score1 select  * from t_score;
//创建触发器
create trigger t_insert3 after insert on t_score1 for each row 
begin
insert into t_student1(stu_id) VALUES("1123456789") ;
insert into t_course1(course_id) VALUES("12345678") ;
end
//验证
insert into t_score1(score_id,stu_id,course_id) values(1018,1631607101,16610001);
select  * from  t_student1 where stu_id = "1123456789";
select  * from  t_course1 where course_id = "12345678";

12.2、查看触发器

show triggers;

12.3、删除触发器

drop trigger trigger_name;

12.4、NEW和OLD的应用

MySQL中定义了NEW和OLD两个临时表,用来保存触发器修改之前和之后的表,方便引用。

12.4.1、流程图

12.4.2、案例

(1)修改表t_student1中一个学生的生日时,向另一个表t_backup(需新建)表中插入修改前的生日与修改后的生日。

//创建触发器
create trigger t_updata1 after update on t_student1 for each row
begin
insert into t_backup(old_birthday,new_birthday) values(old.stu_birthday,new.stu_birthday);
end
//测试
update t_student1 set stu_birthday="1999-12-12" where stu_name="王伟";

(2)删除t_major1表中的一条记录时,将删除的这条记录插入到另一个表(需新建表)中。

//创建触发器
create trigger t_delete1 after delete on t_major1 for each row
begin
insert into t_major_back values(old.major_id,old.major_name);
end
//测试
delete from t_major1 where major_name="计算机应用技术";

十三、 事务

语法:

START TRANSACTION | BEGIN
DML语句
COMMIT 或 ROLLBACK

START TRANSACTION、BEGIN:可以开始一项新的事务

DML语句:insert、delete、update

COMMIT、ROLLBACK:定义提交、回滚事务

13.1、介绍

事务是一个完整的业务逻辑,是一个工作单元。如:

假设转账,从A账户向B账户中转账10000。

  • 将A账户的钱减去10000 (update语句)
    将B账户的钱加上10000 (update语句)

这就是一个完整的业务逻辑。这两个updata语句要求必须同时成功或同时失败

只有DML语句才会有事务这一说,其它语句和事务无关! ! !

insert、delete、update

只有以上的三个语句和事务有关系,其它都没有关系。

所以,事务就是批量的DML语句同时成功,或者同时失败

13.2、提交、回滚事务

提交事务:commit; 语句 ,代表事务结束。

回滚事务:rollback; 语句(回滚永远都是只能回滚到上一次的提交点!)

13.3、事务包括4个特性

A(原子性):

说明事务是最小的工作单元。不可再分。

C(一致性):

所有事务要求,在同一个事务当中,所有操作必须同时成功,或者同时失败,以保证数据的一致性。

I(隔离性)重点:

A事务和B事务之间具有一定的隔离。

教室A和教室B之间有一道墙,这道墙就是隔离性。

A事务在操作一张表的时候,另一个事务B也操作这张表会那样? ? ?

D(持久性):

事务最终结束的一个保障。事务提交,就相当于将没有保存到硬盘上的数据保存到硬盘上!

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
3月前
|
存储 关系型数据库 MySQL
初步了解MySQL数据库的基本命令
初步了解MySQL数据库的基本命令
43 0
|
1月前
|
tengine 关系型数据库 MySQL
Tengine、Nginx安装MySQL数据库命令教程
本指南详细介绍了在Linux系统上安装与配置MySQL数据库的步骤。首先通过下载并安装MySQL社区版本,接着启动MySQL服务,使用`systemctl start mysqld.service`命令。若启动失败,可尝试使用`sudo /etc/init.d/mysqld start`。利用`systemctl status mysqld.service`检查MySQL的服务状态,确保其处于运行中。通过日志文件获取初始密码,使用该密码登录数据库,并按要求更改初始密码以增强安全性。随后创建一个名为`tengine`的数据库,最后验证数据库创建是否成功以及完成整个设置流程。
|
2月前
|
存储 关系型数据库 MySQL
MySQL基础命令及使用示例
这些基础命令构成了与MySQL数据库交互的核心,理解并掌握它们对于进行有效的数据库操作至关重要。在实际使用中,建议结合实际案例和需求来练习这些命令,以加深理解和提高效率。
28 3
|
2月前
|
存储 关系型数据库 MySQL
MySQL基础命令及使用示例
这些基础命令构成了与MySQL数据库交互的核心,理解并掌握它们对于进行有效的数据库操作至关重要。在实际使用中,建议结合实际案例和需求来练习这些命令,以加深理解和提高效率。
63 4
|
1月前
|
关系型数据库 MySQL 数据库
Mysql 常用命令
Mysql 常用命令
22 0
|
4月前
|
存储 关系型数据库 MySQL
(十五)MySQL命令大全:以后再也不用担心忘记SQL该怎么写啦~
相信大家在编写SQL时一定有一个困扰,就是明明记得数据库中有个命令/函数,可以实现自己需要的功能,但偏偏不记得哪个命令该怎么写了,这时只能靠盲目的去百度,以此来寻找自己需要的命令。
159 28
|
4月前
|
SQL 关系型数据库 MySQL
MySQL删除表数据、清空表命令(truncate、drop、delete 区别)
MySQL删除表数据、清空表命令(truncate、drop、delete区别) 使用原则总结如下: 当你不需要该表时(删除数据和结构),用drop; 当你仍要保留该表、仅删除所有数据表内容时,用truncate; 当你要删除部分记录、且希望能回滚的话,用delete;
|
4月前
|
SQL 关系型数据库 MySQL
mysql性能调优:EXPLAIN命令21
【7月更文挑战第21天】掌握SQL性能调优:深入解析EXPLAIN命令的神奇用法!
61 1
|
4月前
|
存储 SQL Cloud Native
云原生数据仓库使用问题之运行MySQL命令发现中文内容变成了问号,该如何解决
阿里云AnalyticDB提供了全面的数据导入、查询分析、数据管理、运维监控等功能,并通过扩展功能支持与AI平台集成、跨地域复制与联邦查询等高级应用场景,为企业构建实时、高效、可扩展的数据仓库解决方案。以下是对AnalyticDB产品使用合集的概述,包括数据导入、查询分析、数据管理、运维监控、扩展功能等方面。
|
5月前
|
关系型数据库 MySQL 分布式数据库
PolarDB产品使用问题之 MySQL数据库中,执行delete命令删除数据后,存储空间通常不会立即释放,该如何优化
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
127 2