-- 測試用表
-- 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 ;