MySQL的进阶开发技巧

  • 1、MySQL的存储过程
    • 1.1 创建企业销售系统的数据库,命名为salesdb
    • 1.2 创建一张商品销售表,命名为salerecords,包括如下字段:商品ID,商品名称,销售单价,销售数量。
    • 1.3 创建一个存储过程,名称自订,通过输入商品ID,商品名称,销售单价,销售数量往表中插入一条记录。
    • 1.4 创建一个存储过程,名称自订,通过输入商品名称往表中插入100条记录。其中,所插入第一条记录的商品ID由现有表中商品ID的最大值+1构成,后续记录中商品ID依次递增1。所插入第一条记录的商品价格与现有表中商品价格的最小值相同,后续记录的商品价格依次递增1。商品销售数量随机生成。
    • 1.5 创建一个存储过程,名称自定,通过输入商品ID的最小值,最大值,将表中商品ID处于(最小值,最大值)范围内,且为偶数的记录删除,包括最小值与最大值本身。此处不考虑商品ID不存在的情况,在实验时请选择1.4中创建的商品ID范围的子集。
    • 1.6 创建两个事件调度器,第一个每3秒往1.2的表中插入一条记录,第二个每30秒清空1.2的表中的所有记录。
  • 2、MySQL的触发器
    • 定义一个触发器,实现如下功能,在往1.2的表中插入记录的时候,将记录同时也插入到一张新的表sale_backup.
  • 3、MySQL的事务控制
    • 3.1 启动一个事务往1.2的表中插入任意三条记录,提交在第二条和第三条记录中定义一个savepoint,在插入完成后回滚到定义的savepoint。
    • 3.2 简述读锁和写锁的区别
  • 4、MySQL的分区
    • 4.1 分别使用range分区(自行决定区间)和hash分区创建对应与1.2中表的分区。
    • 4.2 插入100条记录后,确认分区中的记录分布情况。

实验一:《大型数据库技术》MySQL数据库的开发基础
实验二:《大型数据库技术》MySQL数据库安装配置及基础使用
实验三:《大型数据库技术》MySQL的进阶开发技巧
实验四:《大型数据库技术》MySQL管理维护
实验五:

1、MySQL的存储过程

1.1 创建企业销售系统的数据库,命名为salesdb

CREATE DATABASE salesdb;

1.2 创建一张商品销售表,命名为salerecords,包括如下字段:商品ID,商品名称,销售单价,销售数量。

CREATE TABLE salerecords (id INT(10) PRIMARY KEY AUTO_INCREMENT,name VARCHAR(20),price FLOAT(10),number INT(10)
);

1.3 创建一个存储过程,名称自订,通过输入商品ID,商品名称,销售单价,销售数量往表中插入一条记录。

CREATE PROCEDURE pr_add(a INT(10), b VARCHAR(20), c FLOAT(10), d INT(10))
INSERT INTO salerecords VALUES(a, b, c, d);
CALL pr_add(1, "雷蛇哆啦A梦50周年限定版机械键盘", 499, 80);
CALL pr_add(2, "雷蛇哆啦A梦50周年限定版鼠标", 279, 70);
CALL pr_add(3, "雷蛇哆啦A梦50周年限定版耳机", 349, 60);

1.4 创建一个存储过程,名称自订,通过输入商品名称往表中插入100条记录。其中,所插入第一条记录的商品ID由现有表中商品ID的最大值+1构成,后续记录中商品ID依次递增1。所插入第一条记录的商品价格与现有表中商品价格的最小值相同,后续记录的商品价格依次递增1。商品销售数量随机生成。

delimiter $$ # 修改分隔符为 $$, 因为 ; 会影响命令中语句的执行
CREATE PROCEDURE add100(name VARCHAR(20))
BEGIN
DECLARE a INT; # 商品ID
DECLARE b DOUBLE; # 商品价格
DECLARE c INT; # 商品销售数量
DECLARE n INT; # 循环变量
#################################################
SELECT MAX(id) INTO a FROM salerecords; # ID最大值
SET a = a + 1; # 第一个商品ID为ID最大值 + 1
#################################################
SELECT MIN(price) INTO b FROM salerecords; # 第一个商品价格为价格最小值
#################################################
SET n = 0; # 循环100次
WHILE n < 100 DOSET c = rand(); # 商品销售数量随机INSERT INTO salerecords VALUES(a, name, b, c);SET a = a + 1; # 后续商品ID+1SET b = b + 1; # 后续商品价格+1SET n = n + 1;
END WHILE;
END
$$

delimiter ; # 将分隔符修改回 ;

调用存储过程:

CALL add100("C++ Primer Plus");


表中前10条查询结果:

SELECT * FROM salerecords limit 0, 10;

补充:删除存储过程:

ALTER PROCEDURE add100

1.5 创建一个存储过程,名称自定,通过输入商品ID的最小值,最大值,将表中商品ID处于(最小值,最大值)范围内,且为偶数的记录删除,包括最小值与最大值本身。此处不考虑商品ID不存在的情况,在实验时请选择1.4中创建的商品ID范围的子集。

delimiter $$ # 修改分隔符为 $$, 因为 ; 会影响命令中语句的执行
CREATE PROCEDURE deleteEven(a int, b int)
BEGINDELETE FROM salerecords WHERE MOD(id,2)=0 # 偶数AND id BETWEEN a AND b;
END
$$
delimiter ; # 将分隔符修改回 ;
CALL deleteEven(1,10); # 删除前10条数据中的偶数数据
SELECT * FROM salerecords LIMIT 0,10; # 分页查询前10条数据

1.6 创建两个事件调度器,第一个每3秒往1.2的表中插入一条记录,第二个每30秒清空1.2的表中的所有记录。

注意事项:
全局的 event 是关闭的:通过下列语句查看是否开启

SHOW variables LIKE 'event_scheduler';


如未开启,通过下列语句开启:

SET GLOBAL event_scheduler = 1;

CREATE EVENT sale_insert
ON SCHEDULE EVERY 3 SECOND
DO INSERT INTO salerecords(name, price, number) VALUES ('海洋之心', 888, 10
);
CREATE EVENT sale_delete
ON SCHEDULE EVERY 30 SECOND
DO DELETE FROM salerecords;

每过3秒查询一下表中数据数量,可以看到确实发生了变化:

SELECT COUNT(*) FROM salerecords;

2、MySQL的触发器

定义一个触发器,实现如下功能,在往1.2的表中插入记录的时候,将记录同时也插入到一张新的表sale_backup.

CREATE TABLE sale_backup(id INT,name VARCHAR(20),price INT,number INT);

CREATE TRIGGER tri AFTER INSERT
ON salerecords FOR EACH ROW
INSERT INTO sale_backup VALUES (new.id, new.name, new.price, new.number);

SELECT * FROM sale_backup LIMIT 0,10;

3、MySQL的事务控制

3.1 启动一个事务往1.2的表中插入任意三条记录,提交在第二条和第三条记录中定义一个savepoint,在插入完成后回滚到定义的savepoint。

注:做这个任务时要把前面定义的 EVENT 删除,顺便清空表,效果更明显;

DELETE EVENT sale_insert;
DELETE EVENT sale_delete;
DELETE FROM salerecords;

START TRANSACTION; # 开启事务
INSERT INTO salerecords VALUES (1000, '考研数学', 40, 3); # 插入数据1
INSERT INTO salerecords VALUES (1001, '考研英语', 35, 3); # 插入数据2
SAVEPOINT sp; # 保存点sp
INSERT INTO salerecords VALUES (1003, '考研政治', 30, 2); # 插入数据3
SELECT * FROM salerecords; # 此时应当有3个数据
ROLLBACK TO SAVEPOINT sp; # 回滚到保存点sp
SELECT * FROM salerecords; # 此时应当有2个数据
COMMIT; # 提交事务
SELECT * FROM salerecords; # 此时应当只有2个数据

3.2 简述读锁和写锁的区别

共享锁(S锁) 又称 读锁。若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的S 锁。这保证了其他事务可以读A,但在T释放A上的S锁之前不能对A做任何修改。

排他锁(X锁) 又称 写锁。若事务T对数据对象A加上X锁,事务T可以读A也可以修改A,其他事务不能再对A加任何锁,直到T释放A上的锁。这保证了其他事务在T释放A上的锁之前不能再读取和修改A。

4、MySQL的分区

4.1 分别使用range分区(自行决定区间)和hash分区创建对应与1.2中表的分区。

ALTER TABLE salerecords
PARTITION BY RANGE(id) (PARTITION p0 VALUES LESS THAN (100),PARTITION p1 VALUES LESS THAN (200),PARTITION p2 VALUES LESS THAN (2000)
);
ALTER TABLE salerecords
PARTITION BY HASH(id) partitions 4;

4.2 插入100条记录后,确认分区中的记录分布情况。

INSERT INTO salerecords VALUES(1, '数据结构', 50, 100);CALL add100("Java程序设计语言");EXPLAIN partitions SELECT * FROM salerecords WHERE id = 4;

《大型数据库技术》MySQL的进阶开发技巧相关推荐

  1. 大型数据库的设计原则与开发技巧

    目前,计算机技术已经广泛地应用于国民经济的各个领域当中,在计算机硬件不断微型化的同时,应用系统也逐渐向着复杂化.大型化的方向发展.数据库是整个系统的核心,它的设计直接关系系统执行的效率和系统的稳定性. ...

  2. 《大型数据库技术》MySQL数据库的开发基础

    文章目录 注意 1.MySQL 的存储引擎 1.1 创建企业管理系统的数据库,命名为enterprisedb 1.2 创建一张雇员表,使用MyISAM引擎,命名为employee,包括如下字段:雇员工 ...

  3. 《大型数据库技术》MySQL管理维护

    MySQL管理维护 1.MySQL的备份 1.1 自由建立实验数据库及模拟数据(可复用前面实验产生的数据库) 1.2 利用mysqldump 备份所建立数据库的所有表 1.3 在任意表中插入新的数据 ...

  4. 《大型数据库技术》MySQL数据库安装配置及基础使用

    文章目录 1.下载安装MySQL 1.1 搜索MySQL下载页面 1.2 查看各种MySQL版本 1.3 安装配置MySQL 2.数据库基本操作 2.1 创建数据库 2.2 创建关系表 2.3 插入数 ...

  5. hadoop大数据开发技术学习笔记第三天:(前序)MySQL数据库进阶

    hadoop大数据开发技术学习笔记第三天:(前序)MySQL数据库进阶 一.回顾知识 1.myschool数据库和数据表的创建 (1)创建数据库 (2)数据库模型图 (3)创建数据表grand (4) ...

  6. ASP.NET编程技术-用ASP.NET开发Web服务的五则技巧

    ASP.NET编程技术-用ASP.NET开发Web服务的五则技巧 ------------------------------------------------------------------- ...

  7. vue watch 修改滚动条_只需要这几个vue快捷开发技巧,看完技术提升30%!!!!...

    前言 一般在组件内使用路由参数,大多数人会这样做: 先赞再看,养成习惯~ 今天分享十个vue开发技巧给大家,中级前端工程师 1.路由参数解耦 export default {methods: {get ...

  8. 菜鸟的mysql高级进阶以及mysql数据库优化

    菜鸟的mysql高级进阶以及mysql数据库优化 说明 一.mysql的逻辑分层及存储引擎 (1)逻辑分层 (2)存储引擎 二.事务的ACID原则 三.数据库设计的三大范式 四.索引 (1)二叉树搜索 ...

  9. MySQL的进阶实战篇

    关联文章: MySQL的初次见面礼基础实战篇 MySQL的进阶实战篇 本篇上一篇博文MySQL的初次见面礼基础实战篇的延续,是mysql的进阶内容的记录,本篇主要知识点如下: 进阶实战篇 进阶实战篇 ...

最新文章

  1. LiFi会将大数据和物联网带到新高度吗?
  2. Android手机在获取root权限下的抓包过程
  3. TRMF 辅助论文:最小二乘法复现TRMF
  4. 使用Talend Open Studio将数据分步从oracle导入到hive中
  5. ThreadLocal的原理和FastThreadLocal的优势
  6. 神策数据多少含金量?PICOOC 有品帮你智能称量
  7. 夜读丨72名研究生被清退:孩子,你前半生偷的懒,后半生得拼命还
  8. python 模糊匹配_很冷门,但非常实用的 Python 库
  9. mysql时区代码_mysql时区设置为东八区
  10. VTK:图像平滑——中值滤波器
  11. 安装MySQL5.5.28步骤
  12. iwebshop功能添加——邮箱邀请注册增加积分
  13. 输入法 - 字母宽 窄 切换 - 全角 半角 的含义
  14. CDR教程-使用调和工具制作三八天猫标志
  15. 集成运放的主要技术指标
  16. Arduino ESP32 获取网络时间并同步本地RTC时钟
  17. 计算机二级Python大题
  18. 千年服务器经验怎么修改,千年服务端加入江湖等级的脚本
  19. 大促系统全流量压测及稳定性保证——京东交易架构分享
  20. 解决Windows下移动硬盘无法弹出的问题:\$Extend\$RmMetadata\$TxfLog\$TxfLog.blf

热门文章

  1. 怎么玩转你现在的圈子?
  2. 同一机器部署多个JVM
  3. 为什么现在的游戏笔记本那么贵,动不动就上万块,组装机不好吗?
  4. 利用truffle与智能合约进行交互
  5. 2021 年高教社杯全国大学生数学建模竞赛题目(A 题 “FAST”主动反射面的形状调节)
  6. Java配置Spring时REQUIRED和REQUIRES_NEW 的区别
  7. if sql语句_SQL IF语句介绍和概述
  8. USACO Training3.3亚瑟王的宫殿【搜索】By cellur925
  9. Angular2 初识
  10. python 读取、保存、二值化、灰度化图片+opencv处理图片的方法