MYSQL中如何 高效获取新插入的流水记录

来源:互联网 发布:linux vim颜色主题 编辑:程序博客网 时间:2024/05/17 02:00

在MySQL中,运用 auto_increment类型的id字段作为表的主键,并用它作为其他表的外键,形成“主从表结构”,这是数据库设计中多见的用法。但是在详细生成id的时刻,咱们的操作顺序通常是:先在主表中插入记载,然后取得自动生成的id,以它为基本插入从表的记载。这里面有个难处,就是插入主表记载后,如何 取得它对应的id。通常的做法,是议决 “select max(id) from tablename”的做法,但是显然这种做法须要思虑并发的情况,须要在事务中对主表加以“X锁“,待取得 max(id)的值以后,再解锁。这种做法须要的步骤比较多,有些麻烦,并且并发性也不好。有没有更基本的做法呢?答案之一是议决 select LAST_INSERT_ID()这个操作。乍一看,它和select max(id)很象,但实际上它是线程安全的。也就是说它是详细于数据库连接的。下面议决实验表明: 1、在连接1中向A表插入一条记载,A表包含一个auto_increment类型的字段。 2、在连接2中向A表再插入一条记载。 3、结果:在连接1中执行select LAST_INSERT_ID()得到的结果和连接2中执行select LAST_INSERT_ID()的结果是不一样的;而在两个连接中执行select max(id)的结果是相似的。 本来在MSSQL中SCOPE_IDENTITY()和IDENT_CURRENT()的区别和这里是类似的。运用 SCOPE_IDENTITY()能够取得插入某个IDENTITY字段的当前会话的值,而运用 IDENT_CURRENT()会取得在某个IDENTITY字段上插入的最大值,而不区分不一样的会话。 注:运用 select last_insert_id()时要留心,当一次插入多条记载时,只是取得第一次插入的id值,务必留心!能够试试 insert into tb(c1,c2) values (c1value,c2value),(c1value1,c2value2)..。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 支付宝忘了密码怎么办 忘了支付宝账号怎么办 支付宝账号丢了怎么办 生完孩子奶水不足怎么办 生完宝宝没奶水怎么办 生完三天没奶水怎么办 生完孩子奶头小怎么办 生完孩子没有奶水怎么办 宝宝刚出生没奶怎么办 婴儿含着乳头睡怎么办 没满月的换奶粉怎么办 生完孩子奶少怎么办 刚满月没奶了怎么办 健康之路没奶水怎么办 生完孩子奶胀痛怎么办 生完两天没有奶怎么办 一个多月的宝宝睡眠不好怎么办 产妇奶少不够吃怎么办 冬天腿上掉皮屑怎么办 一岁宝宝不喝奶粉怎么办 2岁宝宝不吃奶粉怎么办 老婆生了孩子性冷淡怎么办 宝宝有轻度地贫怎么办 不小心怀孕了该怎么办 45岁不小心怀了怎么办 喝了酒胃不舒服怎么办 备孕期间孕酮低怎么办 2个月宝宝不睡觉怎么办 生完小孩肚子还是很大怎么办 生完孩子肚皮疼怎么办 生完孩子有肚腩怎么办 生完宝宝肚子还是很大怎么办 生完孩子小腹大怎么办 生完孩子肚皮松怎么办 生过孩子肚子松怎么办 生完孩子肚皮痒怎么办 生完小孩肚子松弛怎么办 生了孩子肚子大怎么办 嫁到别的省户口怎么办 孕中期假性宫缩怎么办 频繁的假性宫缩怎么办