2010-12-03 46 views

Répondre

2

Vous pouvez » t réduire le nombre de requêtes - ils font tous des choses différentes - mais vous pourriez réduire e nombre d'allers-retours à la base de données et le nombre d'analyses en l'enveloppant toutes comme une fonction PLSQL.

Cependant, vous ne pouvez pas sélectionner les données après que vous avez supprimé ..... mais pensez:

CREATE PROCEDURE s_u_d(a) 
BEGIN 

UPDATE tab_x SET tab_x.avalue=1 WHERE tab_x.another=a; 

DELETE FROM tab_y WHERE tab_y.avalue=a; 

SELECT * 
FROM tab_x 
WHERE tab_x.another=a; 

END; 

NB - vous pouvez également exécuter plusieurs sélections dans la même procédure et gérer plusieurs, différents ensembles de résultats en forme, p.ex. see this page

1

NO,
ne peut combiner

  • SUPPRIMER et SELECT
  • UPDATE et SELECT

Ce n'est pas une bonne façon pour l'optimisation de MySQL simplement
parce que chaque requête venir avec des coûts de requête différents.

Et MyISAM, il impliquent le niveau de verrouillage de table pour écrire

Exemple UPDATE et SELECT

/* this will update TABLE_A if ID in TABLE_B exist in TABLE_A */ 
UPDATE TABLE_A, TABLE_B 
    SET TABLE_A.SOME_COLUMN=TABLE_B.SOME_COLUMN 
WHERE TABLE_A.ID=TABLE_B.ID 

/* or */ 
UPDATE TABLE_A 
    SET SOME_COLUMN = (SELECT SOME_COLUMN_B FROM TABLE_B WHERE ... LIMIT 1) 

Exemple pour SUPPRIMER et SELECT

DELETE FROM TABLE_A WHERE TABLE_A IN(SELECT ID FROM TABLE_B) 
+1

Pourriez-vous s'il vous plaît me montrer l'exemple SELECT et UPDATE? –

+1

Merci ajreal –

0

Créer une procédure stockée:

DELIMITER // 

create procedure empproc(in name varchar(255),in fathername varchar(255),in password varchar(255)) 

begin 

     Select * from xemp where uname = name and fname = fathername; 

     insert into xemp values(name,fathername,password); 

end // 
delimiter ; 

code Java .....

import java.sql.*; 

public class StoredProcedure { 

    public static void main(String a[])throws Exception { 

     Class.forName("com.mysql.jdbc.Driver").newInstance(); 
     Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/01jim2010","root",""); 
     CallableStatement calstat=conn.prepareCall("{call empproc(?,?,?)}"); 
     calstat.setString(1,"Jimit"); 
     calstat.setString(2,"Temp"); 
     calstat.setString(3,"Temp"); 

     ResultSet rs = calstat.executeQuery(); 
     conn.close(); 
     calstat.close(); 

     System.out.println("Your data has been inserted into table."); 
     } 
}