Mysql
MySQL 儲存過程 - 設置 AUTO_INCREMENT 值
我在編寫儲存過程時遇到了麻煩,如下所示
CREATE DEFINER=`dbcomexuser`@`%` PROCEDURE `clearance_imp`(IN CAPIfilename VARCHAR(12)) BEGIN DECLARE `_rollback` BOOL DEFAULT 0; DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET `_rollback` = 1; DECLARE _refID INT DEFAULT 0; START TRANSACTION; SELECT MAX(imp_id) + 1 INTO _refID FROM temp_imp; INSERT INTO filenamedt (filename, filedate) VALUES (CAPIfilename, now()); INSERT INTO imp__description (imp_id, imp_description) (SELECT imp_id, TRIM(descricaoProduto) FROM temp_imp); TRUNCATE TABLE temp_imp; ALTER TABLE temp_imp AUTO_INCREMENT = _refID; IF `_rollback` THEN ROLLBACK; ELSE COMMIT; END IF; END
主要問題是 MySQL Workbench 輸出行有錯誤:
ALTER TABLE temp_imp AUTO_INCREMENT = _refID;
但我無法弄清楚發生了什麼。
事實是:我正在從數百個文件中載入我的數據庫,並且數據儲存在許多不同的表中。
在我載入每個文件後,我 trucate 臨時表,因為它比使用刪除更快,所以我載入另一個文件。當我 trucate 表時,MySQL 從 0 開始自動遞增編號,但我需要最後一個 int 編號才能再次使用它,因為我將它用作主鍵。
有人可以幫助我嗎?
使用準備好的語句
DELIMITER $$ CREATE DEFINER=`dbcomexuser`@`%` PROCEDURE `clearance_imp`(IN CAPIfilename VARCHAR(12)) BEGIN DECLARE `_rollback` BOOL DEFAULT 0; DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET `_rollback` = 1; DECLARE _refID INT DEFAULT 0; START TRANSACTION; SELECT MAX(imp_id) + 1 INTO _refID FROM temp_imp; INSERT INTO filenamedt (filename, filedate) VALUES (CAPIfilename, now()); INSERT INTO imp__description (imp_id, imp_description) (SELECT imp_id, TRIM(descricaoProduto) FROM temp_imp); TRUNCATE TABLE temp_imp; SET @sql = "ALTER TABLE temp_imp AUTO_INCREMENT = ?"; PREPARE stmt1 FROM @sql; SET @a = _refID; EXECUTE stmt1 USING @a; DEALLOCATE PREPARE stmt1; IF `_rollback` THEN ROLLBACK; ELSE COMMIT; END IF; END$$ DELIMITER ;
如果您使用工作台並創建儲存過程,則不需要 DELIMITER