zoukankan      html  css  js  c++  java
  • 向数据库插入数据后返回新插入行的主键

    在开发的时候,大家可能也遇见过下面类似的问题。

    场景说明:

    存在表1,表2两张表,两表满足以下条件:

    的主键为表2的外键

    1的主键为自动编号,所以在插入数据时,会自增,无需人为干预

    现在,想进行如下操作:

    向表1插入1条新纪录,同时需要向表2插入多条新记录,表2中插入记录的外键为表1新插入记录的主键

    问题解析:

    因为表1的主键为自动编号,所以向表1插入新纪录的过程中,我们程序员是不知道表1新插入这条记录的主键的,因为这个往往不需要我们关注。但是向表2插入新记录时,这个主键又是必须要获取到的,那我们该怎么办呢

    可以采用下面的方法:

    NSERT INTO tableName (fieldname ...) values (value ...) SELECT @@IDENTITY AS returnName;  

    具体实例:

    创建表tb_Class及表tb_Studenttb_Class的主键为classid,自动编号。tb_Student的外键classidtb_Class表的主键classid对应。

    CREATE TABLE [dbo].[tb_Class](
    [classid] [int] IDENTITY(1,1) NOT NULL,
    [classname] [nchar](10) NOT NULL
    ) ON [PRIMARY]
    
    CREATE TABLE [dbo].[tb_Student](
    [id] [int] IDENTITY(1,1) NOT NULL,
    [name] [nchar](10) NOT NULL,
    [age] [int] NOT NULL,
    [classid] [int] NULL,
    CONSTRAINT [PK_tb_Student] PRIMARY KEY CLUSTERED 
    (
    [id] ASC
    )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
    ) ON [PRIMARY]
    

    插入数据操作:

    DECLARE @classId AS INT;
    INSERT INTO tb_Class(classname) VALUES ('1班') SELECT @classId=@@IDENTITY;  
    INSERT INTO tb_Student(name,age,classid) VALUES ('tiana0',20,@classId);  
    INSERT INTO tb_Student(name,age,classid) VALUES ('tiana1',18,@classId);  
    INSERT INTO tb_Student(name,age,classid) VALUES ('tiana2',21,@classId); 
    SELECT * FROM tb_Class;
    SELECT * FROM tb_Student;
    

    插入两次后的结果为:

    好了,88。

  • 相关阅读:
    C# 实现 Snowflake算法生成唯一性Id
    kafka可视化客户端工具(Kafka Tool)的基本使用(转)
    docker 安装kafka
    Model类代码生成器
    使用docker 部署rabbitmq 镜像
    Vue 增删改查 demo
    git 提交代码到库
    Android ble蓝牙问题
    mac 配置 ssh 到git (Could not resolve hostname github.com, Failed to connect to github.com port 443 Operation timed out)
    okhttp
  • 原文地址:https://www.cnblogs.com/riasky/p/3361041.html
Copyright © 2011-2022 走看看