我在mysql中有一个表。它有一些以前的记录。它的字段是a,b和c。有时我会在此表中插入一条记录,例如具有不同值的记录:
$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,但它插入表中的最后一个字段,而不是它是6,它是6。
类似的东西:
if(false)
{
$query = "INSERT INTO table(a, b, c) VALUES('1', The Last Value In Table, '2')";
}
我宁愿不读表的最后记录并使用它的值,因为它可以降低我的速度,速度非常重要。最好使用自动执行它的mysql命令。
答案 0 :(得分: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语句如下所示:
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都会发生这种情况。如果很少需要查找最新记录,那么偶尔进行慢速查找可能会比每次进行稍慢的插入更好。好吧,试试吧。