2014-02-18 164 views
1

我在mysql中有一个表。它有以前的几条记录。它的字段是a,b和c。有时候我在这个表格中插入一条记录,例如这个值有不同的值:在mysql的下一条记录中插入最后一条记录字段

$query = "INSERT INTO table(a, b, c) VALUES('1', '0', '2')"; 

值是字符。似乎表中的最后一条记录是5,6,4.我的意思是a = 5,b = 6和c = 4,我想插入一条新记录。我的值是1和0和2,但我希望你能帮我这个方法: 当b == 0时,我不想保存它,而是想保存表中的最后一个字段。例如我插入1,0,2和它只是插入一个= 1和c = 2,但其插入的最后一个字段表,而不是这个0,这是6

是这样的:

if(false) 
{ 
    $query = "INSERT INTO table(a, b, c) VALUES('1', The Last Value In Table, '2')"; 
} 

我宁愿不读取表格的最后一个记录并使用它的值,因为它可以降低速度,速度非常重要。它更好地使用自动执行它的mysql命令。

+3

'INSERT INTO table [17]'?嗯?你为什么不使用'AUTO_INCREMENT'主键?要获得最后一行,你可以使用'SELECT MAX(id)FROM your_table',假设'id'是自动增量主键的列名。 – Raptor

+0

对不起。插入表中。我使用自动增量,但我宁愿不去取最后一个记录。我需要一些自动执行的操作。可能吗? –

+0

在MySQL中搜索'INSERT INTO ... SELECT'。 – Raptor

回答

1

由于您需要上次插入记录的数据,您必须从某处获取它。首先想到的是:读取表格并查找最后插入的记录,这是您不需要的,可能是因为表太大而无法快速访问数据。

所以你需要一个查找表,只包含最后插入的值(即一个记录):

create table last_insert_mytable(a varchar, b varchar, c varchar); 

您与触发器填写:

create trigger trg_mytable_last_insert after insert on mytable 
    for each row begin 
    delete from last_insert_mytable; 
    insert into last_insert_mytable (a, b, c) values (new.a, new.b, new.c); 
    end; 

所以你插入语句看起来象这个:

insert into mytable(a, b, c) 
values ('1', (select b from last_insert_mytable), '2'); 

或(只要在last_insert_mytable中已经有记录):

insert into mytable(a, b, c) 
select '1', b, '2' from last_insert_mytable; 

请记住,由于触发器的原因,每个插入点都会变慢一点。由于只有一条记录需要处理,因此比在mytable中查找最后插入的记录要快。这取决于mytable的大小。这发生在每个插入到mytable中。如果很少需要查看最新记录,那么最好每隔一段时间进行一次慢速查找,而不是每次都稍微慢一点。那么,试试吧。