MYSQL教程:主表中插入记录从表获取ID

在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)..。

时间: 2024-09-20 00:29:06

MYSQL教程:主表中插入记录从表获取ID的相关文章

asp.net在向表中插入记录和dataliast的更新和删除的代码搞不定了

问题描述 asp.net在向表中插入记录和dataliast的更新和删除的代码搞不定了求救

C#向Sql Server中插入记录时单引号的处理

server|插入 ASP.Net种使用C#, 向CoreDB.myBBS表中插入记录值(Title, Content)[文章的标题和内容],由于Content, Title中可能包含单引号,直接使用sql的insert命令会报错,对此有两种处理方法,一种将单引号替换成两个单引号,第2种方法是使用存储过程. 表myBBS的格式定义如下:CREATE TABLE [dbo].[myBBS] ( [ID] [bigint] IDENTITY (1, 1) NOT NULL , [Title] [ch

如何在网页中插入CSS样式表

  本例为CSS入门系列教程,在这一课中我们将学习如何在网页中插入CSS样式表,主要学习在页面中插入链入外部样式表.内部样式表.导入外表样式表和内嵌样式的四种方法,另外作者还讲解了多重样式表的叠加的运用以及如何在xml中插入CSS,希望能给对网页制作感兴趣的朋友带来帮助~~ CSS入门教程之如何在网页中插入CSS样式表 前面我们了解了CSS的语法,但要想在浏览器中显示出效果,就要让浏览器识别并调用.当浏览器读取样式表时,要依照文本格式来读,这里介绍四种在页面中插入样式表的方法:链入外部样式表.内

sql-如何在vsGridView中插入一张表的部分数据?

问题描述 如何在vsGridView中插入一张表的部分数据? GridView中: 我用的是SQL2008,现在我想只要这个表里商品名称含有"包"字的数据,滤掉其他无关的过滤掉,怎么实现啊,新手求大神解答啊!!!!!!!!! 解决方案 DataTable或者SQL中过滤,将结果返回数据源,不需要改GridView的代码. 如果用sql就是 select * from 你的表 where 字段 like '%包%'

dreamweaver-在Dreamweaver中插入记录集后,预览时总是出现这个问题,该怎么解决?求指点!!

问题描述 在Dreamweaver中插入记录集后,预览时总是出现这个问题,该怎么解决?求指点!! 在Dreamweaver中插入记录集后,预览时总是出现这个问题,该怎么解决?求指点!! [Microsoft OLE DB Provider for ODBC Drivers 错误 '80004005' [Microsoft][ODBC Microsoft Access 驱动程序] Microsoft Jet 数据库引擎打不开文件'(未知的)'. 它已经被别的用户以独占方式打开,或没有查看数据的权限

在MsSql、Access两种数据库中插入记录后马上得到自动编号的ID值_木马相关

本编文章将要介绍重点解释如何在Ms Sql Server中更新或添加一条记录后立即得到其标识列的值,这个值在ACCESS就是我们熟知的自动编号的 ID值,好了,闲话不多说,代码我也不多写,只写关键些,相信各位高手一看就明白,呵呵.后面也附带了在ACCESS中获取的方法,虽然在ACCESS 中获取自动编号的文章网上虽然很多,但放在此做为一个总结吧. Set testRs=Server.CreateObject("ADODB.RecordSet") '创建要测试的对象 testRs.Ope

mysql中插入记录时不存在时插入已经存在则更新

如果您指定了ON DUPLICATE KEY UPDATE,并且插入行后会导致在一个UNIQUE索引或PRIMARY KEY中出现重复值,则执 行旧行UPDATE.例如,如果列a被定义为UNIQUE,并且包含值1,则以下两个语句具有相同的效果: 代码如下:  代码如下 复制代码 mysql> INSERT INTO table (a,b,c) VALUES (1,2,3) -> ON DUPLICATE KEY UPDATE c=c+1; mysql> UPDATE table SET

Word入门动画教程87:插入Excel工作表

使用"插入对象"可以插入系统中安装的许多文件类型,比如Adobe Photoshop Image.MIDI序列.媒体剪辑.视频剪辑等选项.其中,插入Excel工作表用途较广,下面我们就以它为例,来了解一下插入对象的方法. 一.新建Excel工作表对象 1.将光标置于文档中要插入对象的位置. 2.执行"插入"→"对象",打开"对象"对话框. 3.在"新建"选项卡的"对象类型"列表框中选择&

在网页中插入记录到sql中,在抛出异常后,如何继续执行其它记录的插入操作?

问题描述 由于表中设置了主键,因此在插入数据的时候,如果有主键重复的记录,会抛出异常,然后就终止所有的插入操作.插入多条记录,其中有一些是主键重复的,有一些是不重复的,我想实现的是插入与主键不重复的记录,而现在的情况是一旦有与主键重复的记录就跳出循环不再插入后续的记录了.我采用的插入方式是:循环逐条插入记录.请问有没有解决的方法? 解决方案 解决方案二:...解决方案三://替換成你的循環for(inti=0;i<10;i++){try{//插入的語句}catch(Exception){//記錄