Ho scaricato le mie stored procedure con il seguente
C:\>mysqldump -u... -p... -n -d --routines --triggers --all-databases > Z:\stuff.sql
Ecco una delle procedure con DROP PROCEDURE inclusa:
--
-- Dumping routines for database 'lovesh'
--
/*!50003 DROP PROCEDURE IF EXISTS `LoadMyData` */;
/*!50003 SET @saved_cs_client = @@character_set_client */ ;
/*!50003 SET @saved_cs_results = @@character_set_results */ ;
/*!50003 SET @saved_col_connection = @@collation_connection */ ;
/*!50003 SET character_set_client = cp850 */ ;
/*!50003 SET character_set_results = cp850 */ ;
/*!50003 SET collation_connection = cp850_general_ci */ ;
/*!50003 SET @saved_sql_mode = @@sql_mode */ ;
/*!50003 SET sql_mode = '' */ ;
DELIMITER ;;
/*!50003 CREATE*/ /*!50020 DEFINER=`lwdba`@`127.0.0.1`*/ /*!50003 PROCEDURE `LoadMyData`()
DETERMINISTIC
BEGIN
DECLARE NDX INT;
SET NDX = 0;
WHILE NDX < 100 DO
INSERT INTO mydata (ti_time) VALUES (NOW() - INTERVAL CEILING(14400*RAND()) SECOND);
SET NDX = NDX + 1;
END WHILE;
END */;;
DELIMITER ;
/*!50003 SET sql_mode = @saved_sql_mode */ ;
/*!50003 SET character_set_client = @saved_cs_client */ ;
/*!50003 SET character_set_results = @saved_cs_results */ ;
/*!50003 SET collation_connection = @saved_col_connection */ ;
Quando hai usato --skip-opt, questo è ciò che l'ha causato perché --opt include --create-options e DROP PROCEDURE è considerato specifico di MySQL.
-a, --create-options
Include all MySQL specific create options.
(Defaults to on; use --skip-create-options to disable.)
--skip-opt Disable --opt. Disables --add-drop-table, --add-locks,
--create-options, --quick, --extended-insert,
--lock-tables, --set-charset, and --disable-keys.
--skip-opt annulla --create-options e quindi rimuove la PROCEDURA DROP.
Mistero risolto !!!
Rispondi alla domanda bonus
Quelli non sono commenti; quelle sono le direttive MySQL. Ogni volta che MySQL esegue un comando, cerca queste direttive racchiuse nei commenti
Il numero 50003 indica che questo comando verrà eseguito se e solo se la versione di MySQL è 5.0.3 o successiva.
Ecco un altro esempio da un mysqldump:
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `datas` (
`ID` int(2) DEFAULT NULL,
`CATEGORY` int(2) DEFAULT NULL,
`ORD` int(1) DEFAULT NULL
);
/*!40101 SET character_set_client = @saved_cs_client */;
Il numero 40101 indica che questo comando verrà eseguito se e solo se la versione di MySQL è 4.1.1 o successiva.
Queste direttive SQL sono lì per la tua protezione se carichi questi mysqldumps in versioni precedenti. Queste direttive consentono la piena accettazione di determinati comandi. Si prega di non rimuoverli.
Tuttavia, se lavori solo con MySQL 5.0+ e prevedi di eseguire il dump delle procedure memorizzate separatamente, puoi rimuoverle utilizzando Perl o awk. Personalmente li lascerei essere.