-- 存储过程基本语法
-- 创建
create procedure p1()
begin
select count(*) from student;
end;
-- 调用
call p1();
-- 查看
select * from information_schema.ROUTINES where ROUTINE_SCHEMA = 'itcast';
show create procedure p1;
-- 删除
drop procedure if exists p1;
-- 变量: 系统变量
-- 查看系统变量
show session variables ;
show session variables like 'auto%';
show global variables like 'auto%';
select @@global.autocommit;
select @@session.autocommit;
-- 设置系统变量
set session autocommit = 1;
insert into course(id, name) VALUES (6, 'ES');
set global autocommit = 0;
select @@global.autocommit;
-- 变量: 用户变量
-- 赋值
set @myname = 'itcast';
set @myage := 10;
set @mygender := '男',@myhobby := 'java';
select @mycolor := 'red';
select count(*) into @mycount from tb_user;
-- 使用
select @myname,@myage,@mygender,@myhobby;
select @mycolor , @mycount;
select @abc;
-- 变量: 局部变量
-- 声明 - declare
-- 赋值 -
create procedure p2()
begin
declare stu_count int default 0;
select count(*) into stu_count from student;
select stu_count;
end;
call p2();
-- if
-- 根据定义的分数score变量,判定当前分数对应的分数等级。
-- score >= 85分,等级为优秀。
-- score >= 60分 且 score < 85分,等级为及格。
-- score < 60分,等级为不及格。
create procedure p3()
begin
declare score int default 58;
declare result varchar(10);
if score >= 85 then
set result := '优秀';
elseif score >= 60 then
set result := '及格';
else
set result := '不及格';
end if;
select result;
end;
call p3();
-- in/out/inout参数
-- 根据传入(in)参数score,判定当前分数对应的分数等级,并返回(out)。
-- score >= 85分,等级为优秀。
-- score >= 60分 且 score < 85分,等级为及格。
-- score < 60分,等级为不及格。
create procedure p4(in score int, out result varchar(10))
begin
if score >= 85 then
set result := '优秀';
elseif score >= 60 then
set result := '及格';
else
set result := '不及格';
end if;
end;
call p4(18, @result);
select @result;
-- 将传入的 200分制的分数,进行换算,换算成百分制 , 然后返回分数 ---> inout
create procedure p5(inout score double)
begin
set score := score * 0.5;
end;
set @score = 198;
call p5(@score);
select @score;
-- case
-- 根据传入的月份,判定月份所属的季节(要求采用case结构)。
-- 1-3月份,为第一季度
-- 4-6月份,为第二季度
-- 7-9月份,为第三季度
-- 10-12月份,为第四季度
create procedure p6(in month int)
begin
declare result varchar(10);
case
when month >= 1 and month <= 3 then
set result := '第一季度';
when month >= 4 and month <= 6 then
set result := '第二季度';
when month >= 7 and month <= 9 then
set result := '第三季度';
when month >= 10 and month <= 12 then
set result := '第四季度';
else
set result := '非法参数';
end case ;
select concat('您输入的月份为: ',month, ', 所属的季度为: ',result);
end;
call p6(16);
-- while 计算从1累加到n的值,n为传入的参数值。
-- A. 定义局部变量, 记录累加之后的值;
-- B. 每循环一次, 就会对n进行减1 , 如果n减到0, 则退出循环
create procedure p7(in n int)
begin
declare total int default 0;
while n>0 do
set total := total + n;
set n := n - 1;
end while;
select total;
end;
call p7(100);
-- repeat 计算从1累加到n的值,n为传入的参数值。
-- A. 定义局部变量, 记录累加之后的值;
-- B. 每循环一次, 就会对n进行-1 , 如果n减到0, 则退出循环
create procedure p8(in n int)
begin
declare total int default 0;
repeat
set total := total + n;
set n := n - 1;
until n <= 0
end repeat;
select total;
end;
call p8(10);
call p8(100);
-- loop 计算从1累加到n的值,n为传入的参数值。
-- A. 定义局部变量, 记录累加之后的值;
-- B. 每循环一次, 就会对n进行-1 , 如果n减到0, 则退出循环 ----> leave xx
create procedure p9(in n int)
begin
declare total int default 0;
sum:loop
if n<=0 then
leave sum;
end if;
set total := total + n;
set n := n - 1;
end loop sum;
select total;
end;
call p9(100);
-- loop 计算从1到n之间的偶数累加的值,n为传入的参数值。
-- A. 定义局部变量, 记录累加之后的值;
-- B. 每循环一次, 就会对n进行-1 , 如果n减到0, 则退出循环 ----> leave xx
-- C. 如果当次累加的数据是奇数, 则直接进入下一次循环. --------> iterate xx
create procedure p10(in n int)
begin
declare total int default 0;
sum:loop
if n<=0 then
leave sum;
end if;
if n%2 = 1 then
set n := n - 1;
iterate sum;
end if;
set total := total + n;
set n := n - 1;
end loop sum;
select total;
end;
call p10(100);
-- 通过变量记录查询结果
create procedure p11()
begin
declare stu_count int default 0;
select * into stu_count from student;
select stu_count;
end;
call p11();
-- 游标
-- 根据传入的参数uage,来查询用户表 tb_user中,所有的用户年龄小于等于uage的用户姓名(name)和专业(profession),
-- 并将用户的姓名和专业插入到所创建的一张新表(id,name,profession)中。
-- 逻辑:
-- A. 声明游标, 存储查询结果集
-- B. 准备: 创建表结构
-- C. 开启游标
-- D. 获取游标中的记录
-- E. 插入数据到新表中
-- F. 关闭游标
create procedure p11(in uage int)
begin
declare uname varchar(100);
declare upro varchar(100);
declare u_cursor cursor for select name,profession from tb_user where age <= uage;
declare exit handler for SQLSTATE '02000' close u_cursor;
drop table if exists tb_user_pro;
create table if not exists tb_user_pro(
id int primary key auto_increment,
name varchar(100),
profession varchar(100)
);
open u_cursor;
while true do
fetch u_cursor into uname,upro;
insert into tb_user_pro values (null, uname, upro);
end while;
close u_cursor;
end;
call p11(30);
create procedure p12(in uage int)
begin
declare uname varchar(100);
declare upro varchar(100);
declare u_cursor cursor for select name,profession from tb_user where age <= uage;
declare exit handler for not found close u_cursor;
drop table if exists tb_user_pro;
create table if not exists tb_user_pro(
id int primary key auto_increment,
name varchar(100),
profession varchar(100)
);
open u_cursor;
while true do
fetch u_cursor into uname,upro;
insert into tb_user_pro values (null, uname, upro);
end while;
close u_cursor;
end;
call p12(30);
-- 存储函数
-- 从1到n的累加
create function fun1(n int)
returns int deterministic
begin
declare total int default 0;
while n>0 do
set total := total + n;
set n := n - 1;
end while;
return total;
end;
select fun1(50);
-- 触发器
-- 需求: 通过触发器记录 user 表的数据变更日志(user_logs) , 包含增加, 修改 , 删除 ;
-- 准备工作 : 日志表 user_logs
create table user_logs(
id int(11) not null auto_increment,
operation varchar(20) not null comment '操作类型, insert/update/delete',
operate_time datetime not null comment '操作时间',
operate_id int(11) not null comment '操作的ID',
operate_params varchar(500) comment '操作参数',
primary key(`id`)
)engine=innodb default charset=utf8;
-- 插入数据触发器
create trigger tb_user_insert_trigger
after insert on tb_user for each row
begin
insert into user_logs(id, operation, operate_time, operate_id, operate_params) VALUES
(null, 'insert', now(), new.id, concat('插入的数据内容为: id=',new.id,',name=',new.name, ', phone=', NEW.phone, ', email=', NEW.email, ', profession
Mysql-Linux版本安装包
需积分: 0 67 浏览量
更新于2022-08-13
收藏 883.53MB RAR 举报
MySQL是世界上最受欢迎的关系型数据库管理系统之一,尤其在Linux操作系统中,它的使用非常广泛。本教程将详细介绍如何在Linux系统上安装MySQL,以及相关的进阶知识。
让我们了解MySQL的基本概念。MySQL是一个开源、免费的SQL数据库服务器,由Oracle公司维护。它提供了高效的数据存储、查询和管理功能,支持多种操作系统,包括各种Linux发行版。MySQL以其高可扩展性、稳定性和安全性而闻名,广泛应用于Web应用、数据分析和云计算等领域。
在Linux上安装MySQL通常涉及以下步骤:
1. **更新系统**:确保你的Linux系统是最新的,这可以通过运行`sudo apt-get update`(对于基于Debian的系统)或`sudo yum update`(对于基于RPM的系统,如CentOS)来完成。
2. **安装MySQL社区服务器**:对于基于Debian的系统,可以使用`sudo apt-get install mysql-server`命令;对于基于RPM的系统,使用`sudo yum install mysql-community-server`。
3. **启动MySQL服务**:安装完成后,启动MySQL服务,命令可能是`sudo systemctl start mysqld`或`sudo service mysql start`。
4. **设置root用户密码**:安装过程中可能需要设置MySQL的root用户的初始密码,或者安装后可以通过`mysql_secure_installation`脚本来设置。
5. **验证安装**:你可以通过`mysql -u root -p`命令登录MySQL服务器,然后输入密码进行验证。
进阶篇的内容可能会包含以下方面:
1. **配置MySQL**:MySQL的配置文件通常是`/etc/my.cnf`,在这里可以调整参数以优化性能,比如缓存大小、日志设置等。
2. **用户管理**:学习如何创建、删除和管理MySQL用户,以及权限分配,例如`CREATE USER`、`GRANT`和`REVOKE`语句。
3. 数据库操作:掌握`CREATE DATABASE`、`USE`、`DROP DATABASE`等命令,以及如何用`SELECT`、`INSERT`、`UPDATE`和`DELETE`操作数据。
4. **备份与恢复**:理解如何使用`mysqldump`工具进行数据库备份,并使用`mysql`命令恢复数据。
5. **性能监控**:学习如何使用`SHOW STATUS;`和`SHOW VARIABLES;`查看MySQL的状态和配置,以及如何使用`pt-query-digest`等工具分析查询性能。
6. **安全实践**:了解最佳安全实践,如定期更改密码,限制远程访问,以及使用SSL加密连接。
7. **复制与集群**:MySQL支持主从复制和集群配置,用于提高可用性和扩展性。了解如何配置复制和集群是进阶技能。
8. **InnoDB存储引擎**:MySQL默认的事务安全存储引擎,学习其特性,如行级锁定、ACID合规性和外键支持。
9. **故障排查**:学会使用日志文件定位问题,如错误日志 (`error.log`) 和慢查询日志 (`slow_query.log`)。
10. **优化技巧**:包括索引优化、查询优化、内存调优等,提升数据库性能。
以上内容只是MySQL在Linux环境下安装和使用的基础知识,更深入的学习还包括SQL编程、存储过程、触发器、视图等高级特性,以及MySQL的最新特性,如InnoDB Cluster、JSON支持等。不断学习和实践,你将成为MySQL的专家。
ZhangBlossom
- 粉丝: 4w+
- 资源: 280
最新资源
- 二维码图形检测6-YOLO(v5至v9)、COCO、CreateML、Darknet、Paligemma、TFRecord数据集合集.rar
- Matlab绘制绚丽烟花动画迎新年
- 厚壁圆筒弹性应力计算,过盈干涉量计算
- 网络实践11111111111111
- GO编写图片上传代码.txt
- LabVIEW采集摄像头数据,实现图像数据存储和浏览
- 几种不同方式生成音乐的 Python 源码示例.txt
- python红包打开后出现烟花代码.txt
- 嵌入式 imx6 linux gdb工具
- 乒乓球检测22-YOLO(v5至v11)、COCO、CreateML、Paligemma、TFRecord、VOC数据集合集.rar