2010-12-03 90 views

回答

2

你可以用”减少查询的数量 - 他们都做不同的事情 - 但你可以减少e数据库的往返次数以及通过将所有数据包装为PLSQL函数进行解析的次数。

但是你无法选择你的数据已经删除后.....但考虑:

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 - 你也可以在同一个程序运行多个选择和处理多个不同整形结果集,例如see this page

1

NO
只能结合

  • 项,然后选择
  • UPDATE和SELECT

这不是MySQL的优化只是
有道因为每个查询来与不同的查询成本。

而且在MyISAM中,它涉及到表级锁写

举例UPDATE和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) 

举例DELETE和SELECT

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

能否请你告诉我SELECT和UPDATE例如3个查询? – 2010-12-03 09:46:02

0

创建一个存储过程:

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 ; 

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."); 
     } 
} 
相关问题