2013-08-17 14 views
5

documentazione dice cheerrore imprevisto nel grilletto quando esportare

Non ci possono essere due trigger per una determinata tabella che hanno lo stesso tempo di azione grilletto ed evento.

Io uso mysql 5.5.16. Ho creato due trigger. upd_check1 e sale_tri. Sono sicuro che i miei due trigger eseguono due diversi tavoli sull'evento INSERT. Ma perché ottengo questo errore in entrambi i trigger. quando provo ad esportare database (phpmyadmin non mostra errore ma mysql workbench, heidisql, browser di query mostra errore).

SQL Error (1235): Questa versione di MySQL non supporta ancora 'multipla innesca con lo stesso tempo di azione e di eventi per un tavolo'

Qui il mio upd_check1 grilletto

-- 
-- Triggers `product_purchases` 
-- 
DROP TRIGGER IF EXISTS `upd_check1`; 
DELIMITER // 
CREATE TRIGGER `upd_check1` AFTER INSERT ON `product_purchases` 
FOR EACH ROW BEGIN 
    DECLARE X INTEGER; 
    SET X = (SELECT product_id FROM product_stock where product_id = NEW.product_id); 
    IF NEW.product_id =X THEN 
    UPDATE 
    product_stock AS S, 
    product_purchase_item AS I, 
    product_purchases AS P 
    SET 
    S.product_total_quantity=S.product_total_quantity+I.quantity 
    WHERE 
    S.product_id=I.product_id 
    AND 
    I.product_purchase_item_id=P.product_purchase_item_id 
    AND 
    P.product_purchase_id=NEW.product_purchase_id; 
    ELSE 
    INSERT INTO 
     product_stock (product_id,product_total_quantity) 
    SELECT 
     product_id, quantity 
    FROM 
     product_purchase_item 
    WHERE 
     product_purchase_item_id=NEW.product_purchase_item_id; 
    END IF; 

    END 
// 
DELIMITER ; 

e qui il mio sale tri grilletto

-- 
-- Triggers `product_sales` 
-- 
DROP TRIGGER IF EXISTS `sale_tri`; 
DELIMITER // 
CREATE TRIGGER `sale_tri` AFTER INSERT ON `product_sales` 
FOR EACH ROW BEGIN 
     DECLARE X INTEGER; 

     SET X = (SELECT product_id FROM product_stock where product_id = NEW.product_id); 
     IF NEW.product_id =X THEN 
      update product_stock as s, 
      product_sale_item as i, 
      product_sales as p 
     SET s.product_total_quantity=s.product_total_quantity-i.quantity 
     WHERE s.product_id=i.product_id AND 
      i.product_sale_item_id=p.product_sales_item_id AND 
      p.product_sales_id=NEW.product_sales_id; 
     END IF; 
    END 
// 
DELIMITER ; 
+1

Sei sicuro che quelle tabelle non abbiano già attivatori? –

+0

sì. uso solo sopra due trigger. – Imran

+0

Si ha un errore durante * l'esportazione * del DB, o mentre * si importa *? –

risposta

3

Se entrambi

SHOW TRIGGERS 

e

SELECT * from INFORMATION_SCHEMA.TRIGGERS 

visualizzare solo uno dopo l'INSERT trigger per ogni tabella, il passo successivo è quello di assicurarsi che non v'è alcun danneggiamento nella definizione di trigger stesso.

MySQL mantiene i trigger nei file *.TRG e *.TRN nella directory dei dati e il formato è testuale, quindi un'ispezione visiva può aiutare a verificare quanti trigger sono realmente definiti.

Si dovrebbe vedere qualcosa di simile a questo per la tabella:

[email protected]:test> more product_sales.TRG 
TYPE=TRIGGERS 
triggers='CREATE DEFINER=`root`@`localhost` TRIGGER `sale_tri` AFTER INSERT ON `product_sales`\n FOR EACH ROW BEGIN\n  D 
ECLARE X INTEGER;\n ... END' 
sql_modes=0 
definers='[email protected]' 
client_cs_names='utf8' 
connection_cl_names='utf8_general_ci' 
db_cl_names='latin1_swedish_ci' 

E per il file nome del trigger:

[email protected]:test> more sale_tri.TRN 
TYPE=TRIGGERNAME 
trigger_table=product_sales 

più trigger nel file TRG confermeranno se la definizione è in qualche modo corrotto (nel qual caso potrebbe essere necessario rilasciare e creare nuovamente i trigger), ma non in che modo è effettivamente corrotto.

In ogni caso, non modificare mai i file *.TRN o *.TRG manualmente.

Problemi correlati