InnoDB存储引擎--2、存储过程
来源:互联网 发布:域名授权系统源码php 编辑:程序博客网 时间:2024/06/10 22:31
创建表:
CREATE TABLE test_load (
a INT NOT NULL AUTO_INCREMENT,
b CHAR(80),
PRIMARY KEY (`a`)
) ENGINE=INNODB;
创建存储过程:
DELIMITER //
CREATE PROCEDURE p_load(COUNT INT UNSIGNED)
BEGIN
DECLARE s INT UNSIGNED DEFAULT 1;
DECLARE c CHAR(80) DEFAULT REPEAT('a', 80);
WHILE s <= COUNT DO
INSERT INTO test_load SELECT NULL,c;
COMMIT;
SET s = s+1;
END WHILE;
END;
//
DELIMITER ;
同上,但是一次性提交事务的存储过程:性能提升
CREATE PROCEDURE p_load(COUNT INT UNSIGNED)
BEGIN
DECLARE s INT UNSIGNED DEFAULT 1;
DECLARE c CHAR(80) DEFAULT REPEAT('a', 80);
START TRANSACTION;
WHILE s <= COUNT DO
INSERT INTO test_load SELECT NULL,c;
SET s = s+1;
END WHILE;
COMMIT;
END;
调用存储过程:
CALL p_load(500000);
参数innodb_flush_log_at_trx_commit 控制重做日志刷新到磁盘的策略。
默认1:事务提交时必须调用一次fsync操作。
0:事务提交时不进行写入重做日志操作,这个操作仅在master thread中完成,而master thread中每1秒会进行一次重做日志文件的fsync操作,
2:事务提交时将重做日志写入重做日志文件,但仅写入文件系统的缓存,不进行fsync操作。这个设置下,当mysql数据库发生宕机而操作系统不发生宕机时,并不会导致事务的丢失。
测试例子,真实情况中为了提高上述存储过程事务的提交性能,应该在50万行记录插入表后进行一次COMMIT操作。
而不是每插入一条记录后进行一次COMMIT
捕捉异常,事务回滚的存储器例子:
DELIMITER //
CREATE PROCEDURE sp_auto_rollback_demo()
BEGIN
DECLARE EXIT HANDLER FOR SQLEXCEPTION BEGIN ROLLBACK;
SELECT -1;
END;
START TRANSACTION;
INSERT INTO t SELECT 1;
INSERT INTO t SELECT 2;
INSERT INTO t SELECT 1;
INSERT INTO t SELECT 3;
COMMIT;
SELECT 1;
END;
//
- InnoDB存储引擎--2、存储过程
- chpater 2 : InnoDB存储引擎
- 15.2. InnoDB存储引擎
- InnoDB数据库存储引擎
- InnoDB存储引擎Log
- InnoDB 存储引擎
- InnoDB存储引擎
- InnoDB存储引擎
- innodb 存储引擎
- MySQL InnoDB存储引擎
- MySQL存储引擎--InnoDB
- 优化Innodb存储引擎
- innodb存储引擎
- innodb存储引擎
- InnoDB存储引擎简述
- innodb存储引擎
- InnoDB存储引擎文件
- MySQL InnoDB存储引擎
- 文件下载:POI读取word或Excel,修改内容后以流的形式输出到前端
- bzoj5017: [Snoi2017]炸弹
- HOG特征简介
- 微信扫码提示在浏览器中打开的遮罩代码
- C++ IO操作API及注意事项(包含一个日志类的实现)
- InnoDB存储引擎--2、存储过程
- Qt之QCheckBox
- 美团一面记录(2017-09-07)
- 【n阶乘求尾数有多少个0】
- Java多线程--CompletionService的使用
- 基于redis单节点实现分布式锁
- 极光推送
- 超大数据量存储常用数据库分表分库算法总结
- 1002. 写出这个数 (20)