-- 測試用表 -- innodb 支持事務 CREATE TABLE `tb_test` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `name` VARCHAR(50) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=INNODB AUTO_INCREMENT=92 DEFAULT CHARSET=utf8;
-- 測試用儲存過程 -- 通過插入相同的主鍵和插入NULL到非空字段中制造異常 CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_test`() BEGIN -- 如果出現執行異常則結束后繼的執行,並執行begin-end中的處理 DECLARE EXIT HANDLER FOR SQLEXCEPTION BEGIN -- 回滾事務 ROLLBACK; -- 獲取錯誤信息 GET DIAGNOSTICS CONDITION 1 @p1=RETURNED_SQLSTATE,@p2= MESSAGE_TEXT; -- 借“模擬”拋出異常 RESIGNAL SET schema_name = 'mtt_dev', table_name = 'tb_test', message_text = @p2, mysql_errno = @p1; END; START TRANSACTION; INSERT INTO `tb_test`(`name`)VALUES ('name'); INSERT INTO `tb_test`(`name`)VALUES (NULL); INSERT INTO `tb_test`(`id`,`name`)VALUES (1,'name2'); INSERT INTO `tb_test`(`id`,`name`)VALUES (1,'name3'); COMMIT; END$$ DELIMITER ;
-- 執行 CALL sp_test();