2017-11-04 49 views
0

的价值我有一个包括许多查询获取前面的查询

DELIMITER $$ 
CREATE PROCEDURE test() 

BEGIN 

    SELECT * FROM a; 
    INSERT INTO b ...;   //use result a query 
    UPDATE c ...;    //use result a query 
    INSERT INTO d ...;   //use result a query 
    SELECT * FROM d WHERE ...; //use result a query 
    INSERT INTO e ...;   //use result d query 
    UPDATE a ...;    //use result d query 

END 
$$ 

我怎样才能从以前的查询值的过程?

and

如何检测它是否为空?

回答

2

如果您一次插入一行,并且想要最近一次自动递增的ID,则可以使用ID;

select last_insert_id() 

这记录在here

如果他们插入多行,那么这可能有点棘手。

如果您想从select“返回”一个值,请使用变量。 。 。 :=into

+0

我的第一个查询选择。然后,通过获取last_insert_id(),可以采取另一个用户。我不只是想要一个身份证 –

+0

你能给我一个小例子吗? –

0

我建议你使用“临时表”。您可以创建临时表来存储数据并根据该会话执行对其的查询

因此,它可能是这样的..

DELIMITER $$ CREATE PROCEDURE test() 

BEGIN 

CREATE TEMPORARY TABLE IF NOT EXISTS tempTable_A AS (SELECT * FROM a) 

INSERT INTO b ...;   //use result tempTable_A query 
UPDATE c ...;    //use result tempTable_A query 
INSERT INTO d ...;   //use result tempTable_A query 

CREATE TEMPORARY TABLE IF NOT EXISTS tempTable_D AS (SELECT * FROM d) //use result tempTable_A query 
INSERT INTO e ...;   //use result tempTable_D query 
UPDATE a ...;    //use result tempTable_D query 



END $$ 

的例子可以在这里找到: Create a temporary table in a SELECT statement without a separate CREATE TABLE

文档链接: https://dev.mysql.com/doc/refman/5.7/en/create-table.html